{"version":3,"sources":["../node_modules/.pnpm/safe-buffer@5.2.1/node_modules/safe-buffer/index.js","../node_modules/.pnpm/jws@3.2.2/node_modules/jws/lib/data-stream.js","../node_modules/.pnpm/buffer-equal-constant-time@1.0.1/node_modules/buffer-equal-constant-time/index.js","../node_modules/.pnpm/ecdsa-sig-formatter@1.0.11/node_modules/ecdsa-sig-formatter/src/param-bytes-for-alg.js","../node_modules/.pnpm/ecdsa-sig-formatter@1.0.11/node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.js","../node_modules/.pnpm/jwa@1.4.1/node_modules/jwa/index.js","../node_modules/.pnpm/jws@3.2.2/node_modules/jws/lib/tostring.js","../node_modules/.pnpm/jws@3.2.2/node_modules/jws/lib/sign-stream.js","../node_modules/.pnpm/jws@3.2.2/node_modules/jws/lib/verify-stream.js","../node_modules/.pnpm/jws@3.2.2/node_modules/jws/index.js","../node_modules/.pnpm/jsonwebtoken@8.5.1/node_modules/jsonwebtoken/decode.js","../node_modules/.pnpm/jsonwebtoken@8.5.1/node_modules/jsonwebtoken/lib/JsonWebTokenError.js","../node_modules/.pnpm/jsonwebtoken@8.5.1/node_modules/jsonwebtoken/lib/NotBeforeError.js","../node_modules/.pnpm/jsonwebtoken@8.5.1/node_modules/jsonwebtoken/lib/TokenExpiredError.js","../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js","../node_modules/.pnpm/jsonwebtoken@8.5.1/node_modules/jsonwebtoken/lib/timespan.js","../node_modules/.pnpm/semver@5.7.1/node_modules/semver/semver.js","../node_modules/.pnpm/jsonwebtoken@8.5.1/node_modules/jsonwebtoken/lib/psSupported.js","../node_modules/.pnpm/jsonwebtoken@8.5.1/node_modules/jsonwebtoken/verify.js","../node_modules/.pnpm/lodash.includes@4.3.0/node_modules/lodash.includes/index.js","../node_modules/.pnpm/lodash.isboolean@3.0.3/node_modules/lodash.isboolean/index.js","../node_modules/.pnpm/lodash.isinteger@4.0.4/node_modules/lodash.isinteger/index.js","../node_modules/.pnpm/lodash.isnumber@3.0.3/node_modules/lodash.isnumber/index.js","../node_modules/.pnpm/lodash.isplainobject@4.0.6/node_modules/lodash.isplainobject/index.js","../node_modules/.pnpm/lodash.isstring@4.0.1/node_modules/lodash.isstring/index.js","../node_modules/.pnpm/lodash.once@4.1.1/node_modules/lodash.once/index.js","../node_modules/.pnpm/jsonwebtoken@8.5.1/node_modules/jsonwebtoken/sign.js","../node_modules/.pnpm/jsonwebtoken@8.5.1/node_modules/jsonwebtoken/index.js","../src/index.ts","../src/submit.ts","../src/chrome/chrome-api.ts","../src/utils/fetch.ts","../src/chrome/chrome-web-store.ts","../src/utils/fs.ts","../src/config.ts","../src/edge/edge-api.ts","../src/utils/sleep.ts","../src/utils/withTimeout.ts","../src/edge/edge-addon-store.ts","../src/firefox/firefox-api.ts","../src/utils/plural.ts","../src/firefox/firefox-addon-store.ts","../src/init.ts"],"sourcesContent":["/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","/*global module, process*/\nvar Buffer = require('safe-buffer').Buffer;\nvar Stream = require('stream');\nvar util = require('util');\n\nfunction DataStream(data) {\n  this.buffer = null;\n  this.writable = true;\n  this.readable = true;\n\n  // No input\n  if (!data) {\n    this.buffer = Buffer.alloc(0);\n    return this;\n  }\n\n  // Stream\n  if (typeof data.pipe === 'function') {\n    this.buffer = Buffer.alloc(0);\n    data.pipe(this);\n    return this;\n  }\n\n  // Buffer or String\n  // or Object (assumedly a passworded key)\n  if (data.length || typeof data === 'object') {\n    this.buffer = data;\n    this.writable = false;\n    process.nextTick(function () {\n      this.emit('end', data);\n      this.readable = false;\n      this.emit('close');\n    }.bind(this));\n    return this;\n  }\n\n  throw new TypeError('Unexpected data type ('+ typeof data + ')');\n}\nutil.inherits(DataStream, Stream);\n\nDataStream.prototype.write = function write(data) {\n  this.buffer = Buffer.concat([this.buffer, Buffer.from(data)]);\n  this.emit('data', data);\n};\n\nDataStream.prototype.end = function end(data) {\n  if (data)\n    this.write(data);\n  this.emit('end', data);\n  this.emit('close');\n  this.writable = false;\n  this.readable = false;\n};\n\nmodule.exports = DataStream;\n","/*jshint node:true */\n'use strict';\nvar Buffer = require('buffer').Buffer; // browserify\nvar SlowBuffer = require('buffer').SlowBuffer;\n\nmodule.exports = bufferEq;\n\nfunction bufferEq(a, b) {\n\n  // shortcutting on type is necessary for correctness\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    return false;\n  }\n\n  // buffer sizes should be well-known information, so despite this\n  // shortcutting, it doesn't leak any information about the *contents* of the\n  // buffers.\n  if (a.length !== b.length) {\n    return false;\n  }\n\n  var c = 0;\n  for (var i = 0; i < a.length; i++) {\n    /*jshint bitwise:false */\n    c |= a[i] ^ b[i]; // XOR\n  }\n  return c === 0;\n}\n\nbufferEq.install = function() {\n  Buffer.prototype.equal = SlowBuffer.prototype.equal = function equal(that) {\n    return bufferEq(this, that);\n  };\n};\n\nvar origBufEqual = Buffer.prototype.equal;\nvar origSlowBufEqual = SlowBuffer.prototype.equal;\nbufferEq.restore = function() {\n  Buffer.prototype.equal = origBufEqual;\n  SlowBuffer.prototype.equal = origSlowBufEqual;\n};\n","'use strict';\n\nfunction getParamSize(keySize) {\n\tvar result = ((keySize / 8) | 0) + (keySize % 8 === 0 ? 0 : 1);\n\treturn result;\n}\n\nvar paramBytesForAlg = {\n\tES256: getParamSize(256),\n\tES384: getParamSize(384),\n\tES512: getParamSize(521)\n};\n\nfunction getParamBytesForAlg(alg) {\n\tvar paramBytes = paramBytesForAlg[alg];\n\tif (paramBytes) {\n\t\treturn paramBytes;\n\t}\n\n\tthrow new Error('Unknown algorithm \"' + alg + '\"');\n}\n\nmodule.exports = getParamBytesForAlg;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar getParamBytesForAlg = require('./param-bytes-for-alg');\n\nvar MAX_OCTET = 0x80,\n\tCLASS_UNIVERSAL = 0,\n\tPRIMITIVE_BIT = 0x20,\n\tTAG_SEQ = 0x10,\n\tTAG_INT = 0x02,\n\tENCODED_TAG_SEQ = (TAG_SEQ | PRIMITIVE_BIT) | (CLASS_UNIVERSAL << 6),\n\tENCODED_TAG_INT = TAG_INT | (CLASS_UNIVERSAL << 6);\n\nfunction base64Url(base64) {\n\treturn base64\n\t\t.replace(/=/g, '')\n\t\t.replace(/\\+/g, '-')\n\t\t.replace(/\\//g, '_');\n}\n\nfunction signatureAsBuffer(signature) {\n\tif (Buffer.isBuffer(signature)) {\n\t\treturn signature;\n\t} else if ('string' === typeof signature) {\n\t\treturn Buffer.from(signature, 'base64');\n\t}\n\n\tthrow new TypeError('ECDSA signature must be a Base64 string or a Buffer');\n}\n\nfunction derToJose(signature, alg) {\n\tsignature = signatureAsBuffer(signature);\n\tvar paramBytes = getParamBytesForAlg(alg);\n\n\t// the DER encoded param should at most be the param size, plus a padding\n\t// zero, since due to being a signed integer\n\tvar maxEncodedParamLength = paramBytes + 1;\n\n\tvar inputLength = signature.length;\n\n\tvar offset = 0;\n\tif (signature[offset++] !== ENCODED_TAG_SEQ) {\n\t\tthrow new Error('Could not find expected \"seq\"');\n\t}\n\n\tvar seqLength = signature[offset++];\n\tif (seqLength === (MAX_OCTET | 1)) {\n\t\tseqLength = signature[offset++];\n\t}\n\n\tif (inputLength - offset < seqLength) {\n\t\tthrow new Error('\"seq\" specified length of \"' + seqLength + '\", only \"' + (inputLength - offset) + '\" remaining');\n\t}\n\n\tif (signature[offset++] !== ENCODED_TAG_INT) {\n\t\tthrow new Error('Could not find expected \"int\" for \"r\"');\n\t}\n\n\tvar rLength = signature[offset++];\n\n\tif (inputLength - offset - 2 < rLength) {\n\t\tthrow new Error('\"r\" specified length of \"' + rLength + '\", only \"' + (inputLength - offset - 2) + '\" available');\n\t}\n\n\tif (maxEncodedParamLength < rLength) {\n\t\tthrow new Error('\"r\" specified length of \"' + rLength + '\", max of \"' + maxEncodedParamLength + '\" is acceptable');\n\t}\n\n\tvar rOffset = offset;\n\toffset += rLength;\n\n\tif (signature[offset++] !== ENCODED_TAG_INT) {\n\t\tthrow new Error('Could not find expected \"int\" for \"s\"');\n\t}\n\n\tvar sLength = signature[offset++];\n\n\tif (inputLength - offset !== sLength) {\n\t\tthrow new Error('\"s\" specified length of \"' + sLength + '\", expected \"' + (inputLength - offset) + '\"');\n\t}\n\n\tif (maxEncodedParamLength < sLength) {\n\t\tthrow new Error('\"s\" specified length of \"' + sLength + '\", max of \"' + maxEncodedParamLength + '\" is acceptable');\n\t}\n\n\tvar sOffset = offset;\n\toffset += sLength;\n\n\tif (offset !== inputLength) {\n\t\tthrow new Error('Expected to consume entire buffer, but \"' + (inputLength - offset) + '\" bytes remain');\n\t}\n\n\tvar rPadding = paramBytes - rLength,\n\t\tsPadding = paramBytes - sLength;\n\n\tvar dst = Buffer.allocUnsafe(rPadding + rLength + sPadding + sLength);\n\n\tfor (offset = 0; offset < rPadding; ++offset) {\n\t\tdst[offset] = 0;\n\t}\n\tsignature.copy(dst, offset, rOffset + Math.max(-rPadding, 0), rOffset + rLength);\n\n\toffset = paramBytes;\n\n\tfor (var o = offset; offset < o + sPadding; ++offset) {\n\t\tdst[offset] = 0;\n\t}\n\tsignature.copy(dst, offset, sOffset + Math.max(-sPadding, 0), sOffset + sLength);\n\n\tdst = dst.toString('base64');\n\tdst = base64Url(dst);\n\n\treturn dst;\n}\n\nfunction countPadding(buf, start, stop) {\n\tvar padding = 0;\n\twhile (start + padding < stop && buf[start + padding] === 0) {\n\t\t++padding;\n\t}\n\n\tvar needsSign = buf[start + padding] >= MAX_OCTET;\n\tif (needsSign) {\n\t\t--padding;\n\t}\n\n\treturn padding;\n}\n\nfunction joseToDer(signature, alg) {\n\tsignature = signatureAsBuffer(signature);\n\tvar paramBytes = getParamBytesForAlg(alg);\n\n\tvar signatureBytes = signature.length;\n\tif (signatureBytes !== paramBytes * 2) {\n\t\tthrow new TypeError('\"' + alg + '\" signatures must be \"' + paramBytes * 2 + '\" bytes, saw \"' + signatureBytes + '\"');\n\t}\n\n\tvar rPadding = countPadding(signature, 0, paramBytes);\n\tvar sPadding = countPadding(signature, paramBytes, signature.length);\n\tvar rLength = paramBytes - rPadding;\n\tvar sLength = paramBytes - sPadding;\n\n\tvar rsBytes = 1 + 1 + rLength + 1 + 1 + sLength;\n\n\tvar shortLength = rsBytes < MAX_OCTET;\n\n\tvar dst = Buffer.allocUnsafe((shortLength ? 2 : 3) + rsBytes);\n\n\tvar offset = 0;\n\tdst[offset++] = ENCODED_TAG_SEQ;\n\tif (shortLength) {\n\t\t// Bit 8 has value \"0\"\n\t\t// bits 7-1 give the length.\n\t\tdst[offset++] = rsBytes;\n\t} else {\n\t\t// Bit 8 of first octet has value \"1\"\n\t\t// bits 7-1 give the number of additional length octets.\n\t\tdst[offset++] = MAX_OCTET\t| 1;\n\t\t// length, base 256\n\t\tdst[offset++] = rsBytes & 0xff;\n\t}\n\tdst[offset++] = ENCODED_TAG_INT;\n\tdst[offset++] = rLength;\n\tif (rPadding < 0) {\n\t\tdst[offset++] = 0;\n\t\toffset += signature.copy(dst, offset, 0, paramBytes);\n\t} else {\n\t\toffset += signature.copy(dst, offset, rPadding, paramBytes);\n\t}\n\tdst[offset++] = ENCODED_TAG_INT;\n\tdst[offset++] = sLength;\n\tif (sPadding < 0) {\n\t\tdst[offset++] = 0;\n\t\tsignature.copy(dst, offset, paramBytes);\n\t} else {\n\t\tsignature.copy(dst, offset, paramBytes + sPadding);\n\t}\n\n\treturn dst;\n}\n\nmodule.exports = {\n\tderToJose: derToJose,\n\tjoseToDer: joseToDer\n};\n","var bufferEqual = require('buffer-equal-constant-time');\nvar Buffer = require('safe-buffer').Buffer;\nvar crypto = require('crypto');\nvar formatEcdsa = require('ecdsa-sig-formatter');\nvar util = require('util');\n\nvar MSG_INVALID_ALGORITHM = '\"%s\" is not a valid algorithm.\\n  Supported algorithms are:\\n  \"HS256\", \"HS384\", \"HS512\", \"RS256\", \"RS384\", \"RS512\", \"PS256\", \"PS384\", \"PS512\", \"ES256\", \"ES384\", \"ES512\" and \"none\".'\nvar MSG_INVALID_SECRET = 'secret must be a string or buffer';\nvar MSG_INVALID_VERIFIER_KEY = 'key must be a string or a buffer';\nvar MSG_INVALID_SIGNER_KEY = 'key must be a string, a buffer or an object';\n\nvar supportsKeyObjects = typeof crypto.createPublicKey === 'function';\nif (supportsKeyObjects) {\n  MSG_INVALID_VERIFIER_KEY += ' or a KeyObject';\n  MSG_INVALID_SECRET += 'or a KeyObject';\n}\n\nfunction checkIsPublicKey(key) {\n  if (Buffer.isBuffer(key)) {\n    return;\n  }\n\n  if (typeof key === 'string') {\n    return;\n  }\n\n  if (!supportsKeyObjects) {\n    throw typeError(MSG_INVALID_VERIFIER_KEY);\n  }\n\n  if (typeof key !== 'object') {\n    throw typeError(MSG_INVALID_VERIFIER_KEY);\n  }\n\n  if (typeof key.type !== 'string') {\n    throw typeError(MSG_INVALID_VERIFIER_KEY);\n  }\n\n  if (typeof key.asymmetricKeyType !== 'string') {\n    throw typeError(MSG_INVALID_VERIFIER_KEY);\n  }\n\n  if (typeof key.export !== 'function') {\n    throw typeError(MSG_INVALID_VERIFIER_KEY);\n  }\n};\n\nfunction checkIsPrivateKey(key) {\n  if (Buffer.isBuffer(key)) {\n    return;\n  }\n\n  if (typeof key === 'string') {\n    return;\n  }\n\n  if (typeof key === 'object') {\n    return;\n  }\n\n  throw typeError(MSG_INVALID_SIGNER_KEY);\n};\n\nfunction checkIsSecretKey(key) {\n  if (Buffer.isBuffer(key)) {\n    return;\n  }\n\n  if (typeof key === 'string') {\n    return key;\n  }\n\n  if (!supportsKeyObjects) {\n    throw typeError(MSG_INVALID_SECRET);\n  }\n\n  if (typeof key !== 'object') {\n    throw typeError(MSG_INVALID_SECRET);\n  }\n\n  if (key.type !== 'secret') {\n    throw typeError(MSG_INVALID_SECRET);\n  }\n\n  if (typeof key.export !== 'function') {\n    throw typeError(MSG_INVALID_SECRET);\n  }\n}\n\nfunction fromBase64(base64) {\n  return base64\n    .replace(/=/g, '')\n    .replace(/\\+/g, '-')\n    .replace(/\\//g, '_');\n}\n\nfunction toBase64(base64url) {\n  base64url = base64url.toString();\n\n  var padding = 4 - base64url.length % 4;\n  if (padding !== 4) {\n    for (var i = 0; i < padding; ++i) {\n      base64url += '=';\n    }\n  }\n\n  return base64url\n    .replace(/\\-/g, '+')\n    .replace(/_/g, '/');\n}\n\nfunction typeError(template) {\n  var args = [].slice.call(arguments, 1);\n  var errMsg = util.format.bind(util, template).apply(null, args);\n  return new TypeError(errMsg);\n}\n\nfunction bufferOrString(obj) {\n  return Buffer.isBuffer(obj) || typeof obj === 'string';\n}\n\nfunction normalizeInput(thing) {\n  if (!bufferOrString(thing))\n    thing = JSON.stringify(thing);\n  return thing;\n}\n\nfunction createHmacSigner(bits) {\n  return function sign(thing, secret) {\n    checkIsSecretKey(secret);\n    thing = normalizeInput(thing);\n    var hmac = crypto.createHmac('sha' + bits, secret);\n    var sig = (hmac.update(thing), hmac.digest('base64'))\n    return fromBase64(sig);\n  }\n}\n\nfunction createHmacVerifier(bits) {\n  return function verify(thing, signature, secret) {\n    var computedSig = createHmacSigner(bits)(thing, secret);\n    return bufferEqual(Buffer.from(signature), Buffer.from(computedSig));\n  }\n}\n\nfunction createKeySigner(bits) {\n return function sign(thing, privateKey) {\n    checkIsPrivateKey(privateKey);\n    thing = normalizeInput(thing);\n    // Even though we are specifying \"RSA\" here, this works with ECDSA\n    // keys as well.\n    var signer = crypto.createSign('RSA-SHA' + bits);\n    var sig = (signer.update(thing), signer.sign(privateKey, 'base64'));\n    return fromBase64(sig);\n  }\n}\n\nfunction createKeyVerifier(bits) {\n  return function verify(thing, signature, publicKey) {\n    checkIsPublicKey(publicKey);\n    thing = normalizeInput(thing);\n    signature = toBase64(signature);\n    var verifier = crypto.createVerify('RSA-SHA' + bits);\n    verifier.update(thing);\n    return verifier.verify(publicKey, signature, 'base64');\n  }\n}\n\nfunction createPSSKeySigner(bits) {\n  return function sign(thing, privateKey) {\n    checkIsPrivateKey(privateKey);\n    thing = normalizeInput(thing);\n    var signer = crypto.createSign('RSA-SHA' + bits);\n    var sig = (signer.update(thing), signer.sign({\n      key: privateKey,\n      padding: crypto.constants.RSA_PKCS1_PSS_PADDING,\n      saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST\n    }, 'base64'));\n    return fromBase64(sig);\n  }\n}\n\nfunction createPSSKeyVerifier(bits) {\n  return function verify(thing, signature, publicKey) {\n    checkIsPublicKey(publicKey);\n    thing = normalizeInput(thing);\n    signature = toBase64(signature);\n    var verifier = crypto.createVerify('RSA-SHA' + bits);\n    verifier.update(thing);\n    return verifier.verify({\n      key: publicKey,\n      padding: crypto.constants.RSA_PKCS1_PSS_PADDING,\n      saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST\n    }, signature, 'base64');\n  }\n}\n\nfunction createECDSASigner(bits) {\n  var inner = createKeySigner(bits);\n  return function sign() {\n    var signature = inner.apply(null, arguments);\n    signature = formatEcdsa.derToJose(signature, 'ES' + bits);\n    return signature;\n  };\n}\n\nfunction createECDSAVerifer(bits) {\n  var inner = createKeyVerifier(bits);\n  return function verify(thing, signature, publicKey) {\n    signature = formatEcdsa.joseToDer(signature, 'ES' + bits).toString('base64');\n    var result = inner(thing, signature, publicKey);\n    return result;\n  };\n}\n\nfunction createNoneSigner() {\n  return function sign() {\n    return '';\n  }\n}\n\nfunction createNoneVerifier() {\n  return function verify(thing, signature) {\n    return signature === '';\n  }\n}\n\nmodule.exports = function jwa(algorithm) {\n  var signerFactories = {\n    hs: createHmacSigner,\n    rs: createKeySigner,\n    ps: createPSSKeySigner,\n    es: createECDSASigner,\n    none: createNoneSigner,\n  }\n  var verifierFactories = {\n    hs: createHmacVerifier,\n    rs: createKeyVerifier,\n    ps: createPSSKeyVerifier,\n    es: createECDSAVerifer,\n    none: createNoneVerifier,\n  }\n  var match = algorithm.match(/^(RS|PS|ES|HS)(256|384|512)$|^(none)$/i);\n  if (!match)\n    throw typeError(MSG_INVALID_ALGORITHM, algorithm);\n  var algo = (match[1] || match[3]).toLowerCase();\n  var bits = match[2];\n\n  return {\n    sign: signerFactories[algo](bits),\n    verify: verifierFactories[algo](bits),\n  }\n};\n","/*global module*/\nvar Buffer = require('buffer').Buffer;\n\nmodule.exports = function toString(obj) {\n  if (typeof obj === 'string')\n    return obj;\n  if (typeof obj === 'number' || Buffer.isBuffer(obj))\n    return obj.toString();\n  return JSON.stringify(obj);\n};\n","/*global module*/\nvar Buffer = require('safe-buffer').Buffer;\nvar DataStream = require('./data-stream');\nvar jwa = require('jwa');\nvar Stream = require('stream');\nvar toString = require('./tostring');\nvar util = require('util');\n\nfunction base64url(string, encoding) {\n  return Buffer\n    .from(string, encoding)\n    .toString('base64')\n    .replace(/=/g, '')\n    .replace(/\\+/g, '-')\n    .replace(/\\//g, '_');\n}\n\nfunction jwsSecuredInput(header, payload, encoding) {\n  encoding = encoding || 'utf8';\n  var encodedHeader = base64url(toString(header), 'binary');\n  var encodedPayload = base64url(toString(payload), encoding);\n  return util.format('%s.%s', encodedHeader, encodedPayload);\n}\n\nfunction jwsSign(opts) {\n  var header = opts.header;\n  var payload = opts.payload;\n  var secretOrKey = opts.secret || opts.privateKey;\n  var encoding = opts.encoding;\n  var algo = jwa(header.alg);\n  var securedInput = jwsSecuredInput(header, payload, encoding);\n  var signature = algo.sign(securedInput, secretOrKey);\n  return util.format('%s.%s', securedInput, signature);\n}\n\nfunction SignStream(opts) {\n  var secret = opts.secret||opts.privateKey||opts.key;\n  var secretStream = new DataStream(secret);\n  this.readable = true;\n  this.header = opts.header;\n  this.encoding = opts.encoding;\n  this.secret = this.privateKey = this.key = secretStream;\n  this.payload = new DataStream(opts.payload);\n  this.secret.once('close', function () {\n    if (!this.payload.writable && this.readable)\n      this.sign();\n  }.bind(this));\n\n  this.payload.once('close', function () {\n    if (!this.secret.writable && this.readable)\n      this.sign();\n  }.bind(this));\n}\nutil.inherits(SignStream, Stream);\n\nSignStream.prototype.sign = function sign() {\n  try {\n    var signature = jwsSign({\n      header: this.header,\n      payload: this.payload.buffer,\n      secret: this.secret.buffer,\n      encoding: this.encoding\n    });\n    this.emit('done', signature);\n    this.emit('data', signature);\n    this.emit('end');\n    this.readable = false;\n    return signature;\n  } catch (e) {\n    this.readable = false;\n    this.emit('error', e);\n    this.emit('close');\n  }\n};\n\nSignStream.sign = jwsSign;\n\nmodule.exports = SignStream;\n","/*global module*/\nvar Buffer = require('safe-buffer').Buffer;\nvar DataStream = require('./data-stream');\nvar jwa = require('jwa');\nvar Stream = require('stream');\nvar toString = require('./tostring');\nvar util = require('util');\nvar JWS_REGEX = /^[a-zA-Z0-9\\-_]+?\\.[a-zA-Z0-9\\-_]+?\\.([a-zA-Z0-9\\-_]+)?$/;\n\nfunction isObject(thing) {\n  return Object.prototype.toString.call(thing) === '[object Object]';\n}\n\nfunction safeJsonParse(thing) {\n  if (isObject(thing))\n    return thing;\n  try { return JSON.parse(thing); }\n  catch (e) { return undefined; }\n}\n\nfunction headerFromJWS(jwsSig) {\n  var encodedHeader = jwsSig.split('.', 1)[0];\n  return safeJsonParse(Buffer.from(encodedHeader, 'base64').toString('binary'));\n}\n\nfunction securedInputFromJWS(jwsSig) {\n  return jwsSig.split('.', 2).join('.');\n}\n\nfunction signatureFromJWS(jwsSig) {\n  return jwsSig.split('.')[2];\n}\n\nfunction payloadFromJWS(jwsSig, encoding) {\n  encoding = encoding || 'utf8';\n  var payload = jwsSig.split('.')[1];\n  return Buffer.from(payload, 'base64').toString(encoding);\n}\n\nfunction isValidJws(string) {\n  return JWS_REGEX.test(string) && !!headerFromJWS(string);\n}\n\nfunction jwsVerify(jwsSig, algorithm, secretOrKey) {\n  if (!algorithm) {\n    var err = new Error(\"Missing algorithm parameter for jws.verify\");\n    err.code = \"MISSING_ALGORITHM\";\n    throw err;\n  }\n  jwsSig = toString(jwsSig);\n  var signature = signatureFromJWS(jwsSig);\n  var securedInput = securedInputFromJWS(jwsSig);\n  var algo = jwa(algorithm);\n  return algo.verify(securedInput, signature, secretOrKey);\n}\n\nfunction jwsDecode(jwsSig, opts) {\n  opts = opts || {};\n  jwsSig = toString(jwsSig);\n\n  if (!isValidJws(jwsSig))\n    return null;\n\n  var header = headerFromJWS(jwsSig);\n\n  if (!header)\n    return null;\n\n  var payload = payloadFromJWS(jwsSig);\n  if (header.typ === 'JWT' || opts.json)\n    payload = JSON.parse(payload, opts.encoding);\n\n  return {\n    header: header,\n    payload: payload,\n    signature: signatureFromJWS(jwsSig)\n  };\n}\n\nfunction VerifyStream(opts) {\n  opts = opts || {};\n  var secretOrKey = opts.secret||opts.publicKey||opts.key;\n  var secretStream = new DataStream(secretOrKey);\n  this.readable = true;\n  this.algorithm = opts.algorithm;\n  this.encoding = opts.encoding;\n  this.secret = this.publicKey = this.key = secretStream;\n  this.signature = new DataStream(opts.signature);\n  this.secret.once('close', function () {\n    if (!this.signature.writable && this.readable)\n      this.verify();\n  }.bind(this));\n\n  this.signature.once('close', function () {\n    if (!this.secret.writable && this.readable)\n      this.verify();\n  }.bind(this));\n}\nutil.inherits(VerifyStream, Stream);\nVerifyStream.prototype.verify = function verify() {\n  try {\n    var valid = jwsVerify(this.signature.buffer, this.algorithm, this.key.buffer);\n    var obj = jwsDecode(this.signature.buffer, this.encoding);\n    this.emit('done', valid, obj);\n    this.emit('data', valid);\n    this.emit('end');\n    this.readable = false;\n    return valid;\n  } catch (e) {\n    this.readable = false;\n    this.emit('error', e);\n    this.emit('close');\n  }\n};\n\nVerifyStream.decode = jwsDecode;\nVerifyStream.isValid = isValidJws;\nVerifyStream.verify = jwsVerify;\n\nmodule.exports = VerifyStream;\n","/*global exports*/\nvar SignStream = require('./lib/sign-stream');\nvar VerifyStream = require('./lib/verify-stream');\n\nvar ALGORITHMS = [\n  'HS256', 'HS384', 'HS512',\n  'RS256', 'RS384', 'RS512',\n  'PS256', 'PS384', 'PS512',\n  'ES256', 'ES384', 'ES512'\n];\n\nexports.ALGORITHMS = ALGORITHMS;\nexports.sign = SignStream.sign;\nexports.verify = VerifyStream.verify;\nexports.decode = VerifyStream.decode;\nexports.isValid = VerifyStream.isValid;\nexports.createSign = function createSign(opts) {\n  return new SignStream(opts);\n};\nexports.createVerify = function createVerify(opts) {\n  return new VerifyStream(opts);\n};\n","var jws = require('jws');\n\nmodule.exports = function (jwt, options) {\n  options = options || {};\n  var decoded = jws.decode(jwt, options);\n  if (!decoded) { return null; }\n  var payload = decoded.payload;\n\n  //try parse the payload\n  if(typeof payload === 'string') {\n    try {\n      var obj = JSON.parse(payload);\n      if(obj !== null && typeof obj === 'object') {\n        payload = obj;\n      }\n    } catch (e) { }\n  }\n\n  //return header if `complete` option is enabled.  header includes claims\n  //such as `kid` and `alg` used to select the key within a JWKS needed to\n  //verify the signature\n  if (options.complete === true) {\n    return {\n      header: decoded.header,\n      payload: payload,\n      signature: decoded.signature\n    };\n  }\n  return payload;\n};\n","var JsonWebTokenError = function (message, error) {\n  Error.call(this, message);\n  if(Error.captureStackTrace) {\n    Error.captureStackTrace(this, this.constructor);\n  }\n  this.name = 'JsonWebTokenError';\n  this.message = message;\n  if (error) this.inner = error;\n};\n\nJsonWebTokenError.prototype = Object.create(Error.prototype);\nJsonWebTokenError.prototype.constructor = JsonWebTokenError;\n\nmodule.exports = JsonWebTokenError;\n","var JsonWebTokenError = require('./JsonWebTokenError');\n\nvar NotBeforeError = function (message, date) {\n  JsonWebTokenError.call(this, message);\n  this.name = 'NotBeforeError';\n  this.date = date;\n};\n\nNotBeforeError.prototype = Object.create(JsonWebTokenError.prototype);\n\nNotBeforeError.prototype.constructor = NotBeforeError;\n\nmodule.exports = NotBeforeError;","var JsonWebTokenError = require('./JsonWebTokenError');\n\nvar TokenExpiredError = function (message, expiredAt) {\n  JsonWebTokenError.call(this, message);\n  this.name = 'TokenExpiredError';\n  this.expiredAt = expiredAt;\n};\n\nTokenExpiredError.prototype = Object.create(JsonWebTokenError.prototype);\n\nTokenExpiredError.prototype.constructor = TokenExpiredError;\n\nmodule.exports = TokenExpiredError;","/**\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","var ms = require('ms');\n\nmodule.exports = function (time, iat) {\n  var timestamp = iat || Math.floor(Date.now() / 1000);\n\n  if (typeof time === 'string') {\n    var milliseconds = ms(time);\n    if (typeof milliseconds === 'undefined') {\n      return;\n    }\n    return Math.floor(timestamp + milliseconds / 1000);\n  } else if (typeof time === 'number') {\n    return timestamp + time;\n  } else {\n    return;\n  }\n\n};","exports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n    process.env &&\n    process.env.NODE_DEBUG &&\n    /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n  debug = function () {\n    var args = Array.prototype.slice.call(arguments, 0)\n    args.unshift('SEMVER')\n    console.log.apply(console, args)\n  }\n} else {\n  debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n  /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar R = 0\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\nvar NUMERICIDENTIFIER = R++\nsrc[NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\nvar NUMERICIDENTIFIERLOOSE = R++\nsrc[NUMERICIDENTIFIERLOOSE] = '[0-9]+'\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\nvar NONNUMERICIDENTIFIER = R++\nsrc[NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\nvar MAINVERSION = R++\nsrc[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n                   '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n                   '(' + src[NUMERICIDENTIFIER] + ')'\n\nvar MAINVERSIONLOOSE = R++\nsrc[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n                        '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n                        '(' + src[NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\nvar PRERELEASEIDENTIFIER = R++\nsrc[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +\n                            '|' + src[NONNUMERICIDENTIFIER] + ')'\n\nvar PRERELEASEIDENTIFIERLOOSE = R++\nsrc[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +\n                                 '|' + src[NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\nvar PRERELEASE = R++\nsrc[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +\n                  '(?:\\\\.' + src[PRERELEASEIDENTIFIER] + ')*))'\n\nvar PRERELEASELOOSE = R++\nsrc[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +\n                       '(?:\\\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\nvar BUILDIDENTIFIER = R++\nsrc[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\nvar BUILD = R++\nsrc[BUILD] = '(?:\\\\+(' + src[BUILDIDENTIFIER] +\n             '(?:\\\\.' + src[BUILDIDENTIFIER] + ')*))'\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\nvar FULL = R++\nvar FULLPLAIN = 'v?' + src[MAINVERSION] +\n                src[PRERELEASE] + '?' +\n                src[BUILD] + '?'\n\nsrc[FULL] = '^' + FULLPLAIN + '$'\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\nvar LOOSEPLAIN = '[v=\\\\s]*' + src[MAINVERSIONLOOSE] +\n                 src[PRERELEASELOOSE] + '?' +\n                 src[BUILD] + '?'\n\nvar LOOSE = R++\nsrc[LOOSE] = '^' + LOOSEPLAIN + '$'\n\nvar GTLT = R++\nsrc[GTLT] = '((?:<|>)?=?)'\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\nvar XRANGEIDENTIFIERLOOSE = R++\nsrc[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\nvar XRANGEIDENTIFIER = R++\nsrc[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\nvar XRANGEPLAIN = R++\nsrc[XRANGEPLAIN] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIER] + ')' +\n                   '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n                   '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n                   '(?:' + src[PRERELEASE] + ')?' +\n                   src[BUILD] + '?' +\n                   ')?)?'\n\nvar XRANGEPLAINLOOSE = R++\nsrc[XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:' + src[PRERELEASELOOSE] + ')?' +\n                        src[BUILD] + '?' +\n                        ')?)?'\n\nvar XRANGE = R++\nsrc[XRANGE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAIN] + '$'\nvar XRANGELOOSE = R++\nsrc[XRANGELOOSE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\nvar COERCE = R++\nsrc[COERCE] = '(?:^|[^\\\\d])' +\n              '(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +\n              '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n              '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n              '(?:$|[^\\\\d])'\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\nvar LONETILDE = R++\nsrc[LONETILDE] = '(?:~>?)'\n\nvar TILDETRIM = R++\nsrc[TILDETRIM] = '(\\\\s*)' + src[LONETILDE] + '\\\\s+'\nre[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\nvar TILDE = R++\nsrc[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'\nvar TILDELOOSE = R++\nsrc[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\nvar LONECARET = R++\nsrc[LONECARET] = '(?:\\\\^)'\n\nvar CARETTRIM = R++\nsrc[CARETTRIM] = '(\\\\s*)' + src[LONECARET] + '\\\\s+'\nre[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\nvar CARET = R++\nsrc[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'\nvar CARETLOOSE = R++\nsrc[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\nvar COMPARATORLOOSE = R++\nsrc[COMPARATORLOOSE] = '^' + src[GTLT] + '\\\\s*(' + LOOSEPLAIN + ')$|^$'\nvar COMPARATOR = R++\nsrc[COMPARATOR] = '^' + src[GTLT] + '\\\\s*(' + FULLPLAIN + ')$|^$'\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\nvar COMPARATORTRIM = R++\nsrc[COMPARATORTRIM] = '(\\\\s*)' + src[GTLT] +\n                      '\\\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')\nvar comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\nvar HYPHENRANGE = R++\nsrc[HYPHENRANGE] = '^\\\\s*(' + src[XRANGEPLAIN] + ')' +\n                   '\\\\s+-\\\\s+' +\n                   '(' + src[XRANGEPLAIN] + ')' +\n                   '\\\\s*$'\n\nvar HYPHENRANGELOOSE = R++\nsrc[HYPHENRANGELOOSE] = '^\\\\s*(' + src[XRANGEPLAINLOOSE] + ')' +\n                        '\\\\s+-\\\\s+' +\n                        '(' + src[XRANGEPLAINLOOSE] + ')' +\n                        '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\nvar STAR = R++\nsrc[STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n  debug(i, src[i])\n  if (!re[i]) {\n    re[i] = new RegExp(src[i])\n  }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  if (version.length > MAX_LENGTH) {\n    return null\n  }\n\n  var r = options.loose ? re[LOOSE] : re[FULL]\n  if (!r.test(version)) {\n    return null\n  }\n\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    return null\n  }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n  var v = parse(version, options)\n  return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n  var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n  return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n  if (version instanceof SemVer) {\n    if (version.loose === options.loose) {\n      return version\n    } else {\n      version = version.version\n    }\n  } else if (typeof version !== 'string') {\n    throw new TypeError('Invalid Version: ' + version)\n  }\n\n  if (version.length > MAX_LENGTH) {\n    throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n  }\n\n  if (!(this instanceof SemVer)) {\n    return new SemVer(version, options)\n  }\n\n  debug('SemVer', version, options)\n  this.options = options\n  this.loose = !!options.loose\n\n  var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])\n\n  if (!m) {\n    throw new TypeError('Invalid Version: ' + version)\n  }\n\n  this.raw = version\n\n  // these are actually numbers\n  this.major = +m[1]\n  this.minor = +m[2]\n  this.patch = +m[3]\n\n  if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n    throw new TypeError('Invalid major version')\n  }\n\n  if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n    throw new TypeError('Invalid minor version')\n  }\n\n  if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n    throw new TypeError('Invalid patch version')\n  }\n\n  // numberify any prerelease numeric ids\n  if (!m[4]) {\n    this.prerelease = []\n  } else {\n    this.prerelease = m[4].split('.').map(function (id) {\n      if (/^[0-9]+$/.test(id)) {\n        var num = +id\n        if (num >= 0 && num < MAX_SAFE_INTEGER) {\n          return num\n        }\n      }\n      return id\n    })\n  }\n\n  this.build = m[5] ? m[5].split('.') : []\n  this.format()\n}\n\nSemVer.prototype.format = function () {\n  this.version = this.major + '.' + this.minor + '.' + this.patch\n  if (this.prerelease.length) {\n    this.version += '-' + this.prerelease.join('.')\n  }\n  return this.version\n}\n\nSemVer.prototype.toString = function () {\n  return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n  debug('SemVer.compare', this.version, this.options, other)\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  return compareIdentifiers(this.major, other.major) ||\n         compareIdentifiers(this.minor, other.minor) ||\n         compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (other) {\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  // NOT having a prerelease is > having one\n  if (this.prerelease.length && !other.prerelease.length) {\n    return -1\n  } else if (!this.prerelease.length && other.prerelease.length) {\n    return 1\n  } else if (!this.prerelease.length && !other.prerelease.length) {\n    return 0\n  }\n\n  var i = 0\n  do {\n    var a = this.prerelease[i]\n    var b = other.prerelease[i]\n    debug('prerelease compare', i, a, b)\n    if (a === undefined && b === undefined) {\n      return 0\n    } else if (b === undefined) {\n      return 1\n    } else if (a === undefined) {\n      return -1\n    } else if (a === b) {\n      continue\n    } else {\n      return compareIdentifiers(a, b)\n    }\n  } while (++i)\n}\n\n// preminor will bump the version up to the next minor release, and immediately\n// down to pre-release. premajor and prepatch work the same way.\nSemVer.prototype.inc = function (release, identifier) {\n  switch (release) {\n    case 'premajor':\n      this.prerelease.length = 0\n      this.patch = 0\n      this.minor = 0\n      this.major++\n      this.inc('pre', identifier)\n      break\n    case 'preminor':\n      this.prerelease.length = 0\n      this.patch = 0\n      this.minor++\n      this.inc('pre', identifier)\n      break\n    case 'prepatch':\n      // If this is already a prerelease, it will bump to the next version\n      // drop any prereleases that might already exist, since they are not\n      // relevant at this point.\n      this.prerelease.length = 0\n      this.inc('patch', identifier)\n      this.inc('pre', identifier)\n      break\n    // If the input is a non-prerelease version, this acts the same as\n    // prepatch.\n    case 'prerelease':\n      if (this.prerelease.length === 0) {\n        this.inc('patch', identifier)\n      }\n      this.inc('pre', identifier)\n      break\n\n    case 'major':\n      // If this is a pre-major version, bump up to the same major version.\n      // Otherwise increment major.\n      // 1.0.0-5 bumps to 1.0.0\n      // 1.1.0 bumps to 2.0.0\n      if (this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0) {\n        this.major++\n      }\n      this.minor = 0\n      this.patch = 0\n      this.prerelease = []\n      break\n    case 'minor':\n      // If this is a pre-minor version, bump up to the same minor version.\n      // Otherwise increment minor.\n      // 1.2.0-5 bumps to 1.2.0\n      // 1.2.1 bumps to 1.3.0\n      if (this.patch !== 0 || this.prerelease.length === 0) {\n        this.minor++\n      }\n      this.patch = 0\n      this.prerelease = []\n      break\n    case 'patch':\n      // If this is not a pre-release version, it will increment the patch.\n      // If it is a pre-release it will bump up to the same patch version.\n      // 1.2.0-5 patches to 1.2.0\n      // 1.2.0 patches to 1.2.1\n      if (this.prerelease.length === 0) {\n        this.patch++\n      }\n      this.prerelease = []\n      break\n    // This probably shouldn't be used publicly.\n    // 1.0.0 \"pre\" would become 1.0.0-0 which is the wrong direction.\n    case 'pre':\n      if (this.prerelease.length === 0) {\n        this.prerelease = [0]\n      } else {\n        var i = this.prerelease.length\n        while (--i >= 0) {\n          if (typeof this.prerelease[i] === 'number') {\n            this.prerelease[i]++\n            i = -2\n          }\n        }\n        if (i === -1) {\n          // didn't increment anything\n          this.prerelease.push(0)\n        }\n      }\n      if (identifier) {\n        // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n        // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n        if (this.prerelease[0] === identifier) {\n          if (isNaN(this.prerelease[1])) {\n            this.prerelease = [identifier, 0]\n          }\n        } else {\n          this.prerelease = [identifier, 0]\n        }\n      }\n      break\n\n    default:\n      throw new Error('invalid increment argument: ' + release)\n  }\n  this.format()\n  this.raw = this.version\n  return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n  if (typeof (loose) === 'string') {\n    identifier = loose\n    loose = undefined\n  }\n\n  try {\n    return new SemVer(version, loose).inc(release, identifier).version\n  } catch (er) {\n    return null\n  }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n  if (eq(version1, version2)) {\n    return null\n  } else {\n    var v1 = parse(version1)\n    var v2 = parse(version2)\n    var prefix = ''\n    if (v1.prerelease.length || v2.prerelease.length) {\n      prefix = 'pre'\n      var defaultResult = 'prerelease'\n    }\n    for (var key in v1) {\n      if (key === 'major' || key === 'minor' || key === 'patch') {\n        if (v1[key] !== v2[key]) {\n          return prefix + key\n        }\n      }\n    }\n    return defaultResult // may be undefined\n  }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n  var anum = numeric.test(a)\n  var bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n  return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n  return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n  return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n  return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n  return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n  return compare(a, b, true)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n  return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n  return list.sort(function (a, b) {\n    return exports.compare(a, b, loose)\n  })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n  return list.sort(function (a, b) {\n    return exports.rcompare(a, b, loose)\n  })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n  return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n  return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n  return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n  return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n  return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n  return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object')\n        a = a.version\n      if (typeof b === 'object')\n        b = b.version\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object')\n        a = a.version\n      if (typeof b === 'object')\n        b = b.version\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError('Invalid operator: ' + op)\n  }\n}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (comp instanceof Comparator) {\n    if (comp.loose === !!options.loose) {\n      return comp\n    } else {\n      comp = comp.value\n    }\n  }\n\n  if (!(this instanceof Comparator)) {\n    return new Comparator(comp, options)\n  }\n\n  debug('comparator', comp, options)\n  this.options = options\n  this.loose = !!options.loose\n  this.parse(comp)\n\n  if (this.semver === ANY) {\n    this.value = ''\n  } else {\n    this.value = this.operator + this.semver.version\n  }\n\n  debug('comp', this)\n}\n\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n  var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n  var m = comp.match(r)\n\n  if (!m) {\n    throw new TypeError('Invalid comparator: ' + comp)\n  }\n\n  this.operator = m[1]\n  if (this.operator === '=') {\n    this.operator = ''\n  }\n\n  // if it literally is just '>' or '' then allow anything.\n  if (!m[2]) {\n    this.semver = ANY\n  } else {\n    this.semver = new SemVer(m[2], this.options.loose)\n  }\n}\n\nComparator.prototype.toString = function () {\n  return this.value\n}\n\nComparator.prototype.test = function (version) {\n  debug('Comparator.test', version, this.options.loose)\n\n  if (this.semver === ANY) {\n    return true\n  }\n\n  if (typeof version === 'string') {\n    version = new SemVer(version, this.options)\n  }\n\n  return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n  if (!(comp instanceof Comparator)) {\n    throw new TypeError('a Comparator is required')\n  }\n\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  var rangeTmp\n\n  if (this.operator === '') {\n    rangeTmp = new Range(comp.value, options)\n    return satisfies(this.value, rangeTmp, options)\n  } else if (comp.operator === '') {\n    rangeTmp = new Range(this.value, options)\n    return satisfies(comp.semver, rangeTmp, options)\n  }\n\n  var sameDirectionIncreasing =\n    (this.operator === '>=' || this.operator === '>') &&\n    (comp.operator === '>=' || comp.operator === '>')\n  var sameDirectionDecreasing =\n    (this.operator === '<=' || this.operator === '<') &&\n    (comp.operator === '<=' || comp.operator === '<')\n  var sameSemVer = this.semver.version === comp.semver.version\n  var differentDirectionsInclusive =\n    (this.operator === '>=' || this.operator === '<=') &&\n    (comp.operator === '>=' || comp.operator === '<=')\n  var oppositeDirectionsLessThan =\n    cmp(this.semver, '<', comp.semver, options) &&\n    ((this.operator === '>=' || this.operator === '>') &&\n    (comp.operator === '<=' || comp.operator === '<'))\n  var oppositeDirectionsGreaterThan =\n    cmp(this.semver, '>', comp.semver, options) &&\n    ((this.operator === '<=' || this.operator === '<') &&\n    (comp.operator === '>=' || comp.operator === '>'))\n\n  return sameDirectionIncreasing || sameDirectionDecreasing ||\n    (sameSemVer && differentDirectionsInclusive) ||\n    oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (range instanceof Range) {\n    if (range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease) {\n      return range\n    } else {\n      return new Range(range.raw, options)\n    }\n  }\n\n  if (range instanceof Comparator) {\n    return new Range(range.value, options)\n  }\n\n  if (!(this instanceof Range)) {\n    return new Range(range, options)\n  }\n\n  this.options = options\n  this.loose = !!options.loose\n  this.includePrerelease = !!options.includePrerelease\n\n  // First, split based on boolean or ||\n  this.raw = range\n  this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n    return this.parseRange(range.trim())\n  }, this).filter(function (c) {\n    // throw out any that are not relevant for whatever reason\n    return c.length\n  })\n\n  if (!this.set.length) {\n    throw new TypeError('Invalid SemVer Range: ' + range)\n  }\n\n  this.format()\n}\n\nRange.prototype.format = function () {\n  this.range = this.set.map(function (comps) {\n    return comps.join(' ').trim()\n  }).join('||').trim()\n  return this.range\n}\n\nRange.prototype.toString = function () {\n  return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n  var loose = this.options.loose\n  range = range.trim()\n  // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n  var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]\n  range = range.replace(hr, hyphenReplace)\n  debug('hyphen replace', range)\n  // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n  range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)\n  debug('comparator trim', range, re[COMPARATORTRIM])\n\n  // `~ 1.2.3` => `~1.2.3`\n  range = range.replace(re[TILDETRIM], tildeTrimReplace)\n\n  // `^ 1.2.3` => `^1.2.3`\n  range = range.replace(re[CARETTRIM], caretTrimReplace)\n\n  // normalize spaces\n  range = range.split(/\\s+/).join(' ')\n\n  // At this point, the range is completely trimmed and\n  // ready to be split into comparators.\n\n  var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n  var set = range.split(' ').map(function (comp) {\n    return parseComparator(comp, this.options)\n  }, this).join(' ').split(/\\s+/)\n  if (this.options.loose) {\n    // in loose mode, throw out any that are not valid comparators\n    set = set.filter(function (comp) {\n      return !!comp.match(compRe)\n    })\n  }\n  set = set.map(function (comp) {\n    return new Comparator(comp, this.options)\n  }, this)\n\n  return set\n}\n\nRange.prototype.intersects = function (range, options) {\n  if (!(range instanceof Range)) {\n    throw new TypeError('a Range is required')\n  }\n\n  return this.set.some(function (thisComparators) {\n    return thisComparators.every(function (thisComparator) {\n      return range.set.some(function (rangeComparators) {\n        return rangeComparators.every(function (rangeComparator) {\n          return thisComparator.intersects(rangeComparator, options)\n        })\n      })\n    })\n  })\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n  return new Range(range, options).set.map(function (comp) {\n    return comp.map(function (c) {\n      return c.value\n    }).join(' ').trim().split(' ')\n  })\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nfunction parseComparator (comp, options) {\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nfunction isX (id) {\n  return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n  return comp.trim().split(/\\s+/).map(function (comp) {\n    return replaceTilde(comp, options)\n  }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n  var r = options.loose ? re[TILDELOOSE] : re[TILDE]\n  return comp.replace(r, function (_, M, m, p, pr) {\n    debug('tilde', comp, _, M, m, p, pr)\n    var ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0\n      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n            ' <' + M + '.' + (+m + 1) + '.0'\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0\n      ret = '>=' + M + '.' + m + '.' + p +\n            ' <' + M + '.' + (+m + 1) + '.0'\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n  return comp.trim().split(/\\s+/).map(function (comp) {\n    return replaceCaret(comp, options)\n  }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n  debug('caret', comp, options)\n  var r = options.loose ? re[CARETLOOSE] : re[CARET]\n  return comp.replace(r, function (_, M, m, p, pr) {\n    debug('caret', comp, _, M, m, p, pr)\n    var ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n      } else {\n        ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n                ' <' + M + '.' + m + '.' + (+p + 1)\n        } else {\n          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n                ' <' + M + '.' + (+m + 1) + '.0'\n        }\n      } else {\n        ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n              ' <' + (+M + 1) + '.0.0'\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = '>=' + M + '.' + m + '.' + p +\n                ' <' + M + '.' + m + '.' + (+p + 1)\n        } else {\n          ret = '>=' + M + '.' + m + '.' + p +\n                ' <' + M + '.' + (+m + 1) + '.0'\n        }\n      } else {\n        ret = '>=' + M + '.' + m + '.' + p +\n              ' <' + (+M + 1) + '.0.0'\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nfunction replaceXRanges (comp, options) {\n  debug('replaceXRanges', comp, options)\n  return comp.split(/\\s+/).map(function (comp) {\n    return replaceXRange(comp, options)\n  }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n  comp = comp.trim()\n  var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]\n  return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    var xM = isX(M)\n    var xm = xM || isX(m)\n    var xp = xm || isX(p)\n    var anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        // >1.2.3 => >= 1.2.4\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      ret = gtlt + M + '.' + m + '.' + p\n    } else if (xm) {\n      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n    } else if (xp) {\n      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp.trim().replace(re[STAR], '')\n}\n\n// This function is passed to string.replace(re[HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr, tb) {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = '>=' + fM + '.0.0'\n  } else if (isX(fp)) {\n    from = '>=' + fM + '.' + fm + '.0'\n  } else {\n    from = '>=' + from\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = '<' + (+tM + 1) + '.0.0'\n  } else if (isX(tp)) {\n    to = '<' + tM + '.' + (+tm + 1) + '.0'\n  } else if (tpr) {\n    to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n  } else {\n    to = '<=' + to\n  }\n\n  return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n  if (!version) {\n    return false\n  }\n\n  if (typeof version === 'string') {\n    version = new SemVer(version, this.options)\n  }\n\n  for (var i = 0; i < this.set.length; i++) {\n    if (testSet(this.set[i], version, this.options)) {\n      return true\n    }\n  }\n  return false\n}\n\nfunction testSet (set, version, options) {\n  for (var i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        var allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n  var max = null\n  var maxSV = null\n  try {\n    var rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach(function (v) {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!max || maxSV.compare(v) === -1) {\n        // compare(max, v, true)\n        max = v\n        maxSV = new SemVer(max, options)\n      }\n    }\n  })\n  return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n  var min = null\n  var minSV = null\n  try {\n    var rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach(function (v) {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!min || minSV.compare(v) === 1) {\n        // compare(min, v, true)\n        min = v\n        minSV = new SemVer(min, options)\n      }\n    }\n  })\n  return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n  range = new Range(range, loose)\n\n  var minver = new SemVer('0.0.0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = new SemVer('0.0.0-0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = null\n  for (var i = 0; i < range.set.length; ++i) {\n    var comparators = range.set[i]\n\n    comparators.forEach(function (comparator) {\n      // Clone to avoid manipulating the comparator's semver object.\n      var compver = new SemVer(comparator.semver.version)\n      switch (comparator.operator) {\n        case '>':\n          if (compver.prerelease.length === 0) {\n            compver.patch++\n          } else {\n            compver.prerelease.push(0)\n          }\n          compver.raw = compver.format()\n          /* fallthrough */\n        case '':\n        case '>=':\n          if (!minver || gt(minver, compver)) {\n            minver = compver\n          }\n          break\n        case '<':\n        case '<=':\n          /* Ignore maximum versions */\n          break\n        /* istanbul ignore next */\n        default:\n          throw new Error('Unexpected operation: ' + comparator.operator)\n      }\n    })\n  }\n\n  if (minver && range.test(minver)) {\n    return minver\n  }\n\n  return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, options).range || '*'\n  } catch (er) {\n    return null\n  }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n  return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n  return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n  version = new SemVer(version, options)\n  range = new Range(range, options)\n\n  var gtfn, ltefn, ltfn, comp, ecomp\n  switch (hilo) {\n    case '>':\n      gtfn = gt\n      ltefn = lte\n      ltfn = lt\n      comp = '>'\n      ecomp = '>='\n      break\n    case '<':\n      gtfn = lt\n      ltefn = gte\n      ltfn = gt\n      comp = '<'\n      ecomp = '<='\n      break\n    default:\n      throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n  }\n\n  // If it satisifes the range it is not outside\n  if (satisfies(version, range, options)) {\n    return false\n  }\n\n  // From now on, variable terms are as if we're in \"gtr\" mode.\n  // but note that everything is flipped for the \"ltr\" function.\n\n  for (var i = 0; i < range.set.length; ++i) {\n    var comparators = range.set[i]\n\n    var high = null\n    var low = null\n\n    comparators.forEach(function (comparator) {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator\n      low = low || comparator\n      if (gtfn(comparator.semver, high.semver, options)) {\n        high = comparator\n      } else if (ltfn(comparator.semver, low.semver, options)) {\n        low = comparator\n      }\n    })\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false\n    }\n  }\n  return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n  var parsed = parse(version, options)\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n  r1 = new Range(r1, options)\n  r2 = new Range(r2, options)\n  return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version) {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  var match = version.match(re[COERCE])\n\n  if (match == null) {\n    return null\n  }\n\n  return parse(match[1] +\n    '.' + (match[2] || '0') +\n    '.' + (match[3] || '0'))\n}\n","var semver = require('semver');\n\nmodule.exports = semver.satisfies(process.version, '^6.12.0 || >=8.0.0');\n","var JsonWebTokenError = require('./lib/JsonWebTokenError');\nvar NotBeforeError    = require('./lib/NotBeforeError');\nvar TokenExpiredError = require('./lib/TokenExpiredError');\nvar decode            = require('./decode');\nvar timespan          = require('./lib/timespan');\nvar PS_SUPPORTED      = require('./lib/psSupported');\nvar jws               = require('jws');\n\nvar PUB_KEY_ALGS = ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512'];\nvar RSA_KEY_ALGS = ['RS256', 'RS384', 'RS512'];\nvar HS_ALGS = ['HS256', 'HS384', 'HS512'];\n\nif (PS_SUPPORTED) {\n  PUB_KEY_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512');\n  RSA_KEY_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512');\n}\n\nmodule.exports = function (jwtString, secretOrPublicKey, options, callback) {\n  if ((typeof options === 'function') && !callback) {\n    callback = options;\n    options = {};\n  }\n\n  if (!options) {\n    options = {};\n  }\n\n  //clone this object since we are going to mutate it.\n  options = Object.assign({}, options);\n\n  var done;\n\n  if (callback) {\n    done = callback;\n  } else {\n    done = function(err, data) {\n      if (err) throw err;\n      return data;\n    };\n  }\n\n  if (options.clockTimestamp && typeof options.clockTimestamp !== 'number') {\n    return done(new JsonWebTokenError('clockTimestamp must be a number'));\n  }\n\n  if (options.nonce !== undefined && (typeof options.nonce !== 'string' || options.nonce.trim() === '')) {\n    return done(new JsonWebTokenError('nonce must be a non-empty string'));\n  }\n\n  var clockTimestamp = options.clockTimestamp || Math.floor(Date.now() / 1000);\n\n  if (!jwtString){\n    return done(new JsonWebTokenError('jwt must be provided'));\n  }\n\n  if (typeof jwtString !== 'string') {\n    return done(new JsonWebTokenError('jwt must be a string'));\n  }\n\n  var parts = jwtString.split('.');\n\n  if (parts.length !== 3){\n    return done(new JsonWebTokenError('jwt malformed'));\n  }\n\n  var decodedToken;\n\n  try {\n    decodedToken = decode(jwtString, { complete: true });\n  } catch(err) {\n    return done(err);\n  }\n\n  if (!decodedToken) {\n    return done(new JsonWebTokenError('invalid token'));\n  }\n\n  var header = decodedToken.header;\n  var getSecret;\n\n  if(typeof secretOrPublicKey === 'function') {\n    if(!callback) {\n      return done(new JsonWebTokenError('verify must be called asynchronous if secret or public key is provided as a callback'));\n    }\n\n    getSecret = secretOrPublicKey;\n  }\n  else {\n    getSecret = function(header, secretCallback) {\n      return secretCallback(null, secretOrPublicKey);\n    };\n  }\n\n  return getSecret(header, function(err, secretOrPublicKey) {\n    if(err) {\n      return done(new JsonWebTokenError('error in secret or public key callback: ' + err.message));\n    }\n\n    var hasSignature = parts[2].trim() !== '';\n\n    if (!hasSignature && secretOrPublicKey){\n      return done(new JsonWebTokenError('jwt signature is required'));\n    }\n\n    if (hasSignature && !secretOrPublicKey) {\n      return done(new JsonWebTokenError('secret or public key must be provided'));\n    }\n\n    if (!hasSignature && !options.algorithms) {\n      options.algorithms = ['none'];\n    }\n\n    if (!options.algorithms) {\n      options.algorithms = ~secretOrPublicKey.toString().indexOf('BEGIN CERTIFICATE') ||\n        ~secretOrPublicKey.toString().indexOf('BEGIN PUBLIC KEY') ? PUB_KEY_ALGS :\n        ~secretOrPublicKey.toString().indexOf('BEGIN RSA PUBLIC KEY') ? RSA_KEY_ALGS : HS_ALGS;\n\n    }\n\n    if (!~options.algorithms.indexOf(decodedToken.header.alg)) {\n      return done(new JsonWebTokenError('invalid algorithm'));\n    }\n\n    var valid;\n\n    try {\n      valid = jws.verify(jwtString, decodedToken.header.alg, secretOrPublicKey);\n    } catch (e) {\n      return done(e);\n    }\n\n    if (!valid) {\n      return done(new JsonWebTokenError('invalid signature'));\n    }\n\n    var payload = decodedToken.payload;\n\n    if (typeof payload.nbf !== 'undefined' && !options.ignoreNotBefore) {\n      if (typeof payload.nbf !== 'number') {\n        return done(new JsonWebTokenError('invalid nbf value'));\n      }\n      if (payload.nbf > clockTimestamp + (options.clockTolerance || 0)) {\n        return done(new NotBeforeError('jwt not active', new Date(payload.nbf * 1000)));\n      }\n    }\n\n    if (typeof payload.exp !== 'undefined' && !options.ignoreExpiration) {\n      if (typeof payload.exp !== 'number') {\n        return done(new JsonWebTokenError('invalid exp value'));\n      }\n      if (clockTimestamp >= payload.exp + (options.clockTolerance || 0)) {\n        return done(new TokenExpiredError('jwt expired', new Date(payload.exp * 1000)));\n      }\n    }\n\n    if (options.audience) {\n      var audiences = Array.isArray(options.audience) ? options.audience : [options.audience];\n      var target = Array.isArray(payload.aud) ? payload.aud : [payload.aud];\n\n      var match = target.some(function (targetAudience) {\n        return audiences.some(function (audience) {\n          return audience instanceof RegExp ? audience.test(targetAudience) : audience === targetAudience;\n        });\n      });\n\n      if (!match) {\n        return done(new JsonWebTokenError('jwt audience invalid. expected: ' + audiences.join(' or ')));\n      }\n    }\n\n    if (options.issuer) {\n      var invalid_issuer =\n              (typeof options.issuer === 'string' && payload.iss !== options.issuer) ||\n              (Array.isArray(options.issuer) && options.issuer.indexOf(payload.iss) === -1);\n\n      if (invalid_issuer) {\n        return done(new JsonWebTokenError('jwt issuer invalid. expected: ' + options.issuer));\n      }\n    }\n\n    if (options.subject) {\n      if (payload.sub !== options.subject) {\n        return done(new JsonWebTokenError('jwt subject invalid. expected: ' + options.subject));\n      }\n    }\n\n    if (options.jwtid) {\n      if (payload.jti !== options.jwtid) {\n        return done(new JsonWebTokenError('jwt jwtid invalid. expected: ' + options.jwtid));\n      }\n    }\n\n    if (options.nonce) {\n      if (payload.nonce !== options.nonce) {\n        return done(new JsonWebTokenError('jwt nonce invalid. expected: ' + options.nonce));\n      }\n    }\n\n    if (options.maxAge) {\n      if (typeof payload.iat !== 'number') {\n        return done(new JsonWebTokenError('iat required when maxAge is specified'));\n      }\n\n      var maxAgeTimestamp = timespan(options.maxAge, payload.iat);\n      if (typeof maxAgeTimestamp === 'undefined') {\n        return done(new JsonWebTokenError('\"maxAge\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n      }\n      if (clockTimestamp >= maxAgeTimestamp + (options.clockTolerance || 0)) {\n        return done(new TokenExpiredError('maxAge exceeded', new Date(maxAgeTimestamp * 1000)));\n      }\n    }\n\n    if (options.complete === true) {\n      var signature = decodedToken.signature;\n\n      return done(null, {\n        header: header,\n        payload: payload,\n        signature: signature\n      });\n    }\n\n    return done(null, payload);\n  });\n};\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_SAFE_INTEGER = 9007199254740991,\n    MAX_INTEGER = 1.7976931348623157e+308,\n    NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array ? array.length : 0,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  if (value !== value) {\n    return baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n  return arrayMap(props, function(key) {\n    return object[key];\n  });\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object),\n    nativeMax = Math.max;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  // Safari 9 makes `arguments.length` enumerable in strict mode.\n  var result = (isArray(value) || isArguments(value))\n    ? baseTimes(value.length, String)\n    : [];\n\n  var length = result.length,\n      skipIndexes = !!length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n  collection = isArrayLike(collection) ? collection : values(collection);\n  fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n  var length = collection.length;\n  if (fromIndex < 0) {\n    fromIndex = nativeMax(length + fromIndex, 0);\n  }\n  return isString(collection)\n    ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n    : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 8-9 which returns 'object' for typed array and other constructors.\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n  return object ? baseValues(object, keys(object)) : [];\n}\n\nmodule.exports = includes;\n","/**\n * lodash 3.0.3 (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n  return value === true || value === false ||\n    (isObjectLike(value) && objectToString.call(value) == boolTag);\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\nmodule.exports = isBoolean;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308,\n    NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\nfunction isInteger(value) {\n  return typeof value == 'number' && value == toInteger(value);\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = isInteger;\n","/**\n * lodash 3.0.3 (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified\n * as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n  return typeof value == 'number' ||\n    (isObjectLike(value) && objectToString.call(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n  // Many host objects are `Object` objects that can coerce to strings\n  // despite having improperly defined `toString` methods.\n  var result = false;\n  if (value != null && typeof value.toString != 'function') {\n    try {\n      result = !!(value + '');\n    } catch (e) {}\n  }\n  return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) ||\n      objectToString.call(value) != objectTag || isHostObject(value)) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return (typeof Ctor == 'function' &&\n    Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nmodule.exports = isPlainObject;\n","/**\n * lodash 4.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308,\n    NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\nfunction before(n, func) {\n  var result;\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  n = toInteger(n);\n  return function() {\n    if (--n > 0) {\n      result = func.apply(this, arguments);\n    }\n    if (n <= 1) {\n      func = undefined;\n    }\n    return result;\n  };\n}\n\n/**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\nfunction once(func) {\n  return before(2, func);\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = once;\n","var timespan = require('./lib/timespan');\nvar PS_SUPPORTED = require('./lib/psSupported');\nvar jws = require('jws');\nvar includes = require('lodash.includes');\nvar isBoolean = require('lodash.isboolean');\nvar isInteger = require('lodash.isinteger');\nvar isNumber = require('lodash.isnumber');\nvar isPlainObject = require('lodash.isplainobject');\nvar isString = require('lodash.isstring');\nvar once = require('lodash.once');\n\nvar SUPPORTED_ALGS = ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512', 'HS256', 'HS384', 'HS512', 'none']\nif (PS_SUPPORTED) {\n  SUPPORTED_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512');\n}\n\nvar sign_options_schema = {\n  expiresIn: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '\"expiresIn\" should be a number of seconds or string representing a timespan' },\n  notBefore: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '\"notBefore\" should be a number of seconds or string representing a timespan' },\n  audience: { isValid: function(value) { return isString(value) || Array.isArray(value); }, message: '\"audience\" must be a string or array' },\n  algorithm: { isValid: includes.bind(null, SUPPORTED_ALGS), message: '\"algorithm\" must be a valid string enum value' },\n  header: { isValid: isPlainObject, message: '\"header\" must be an object' },\n  encoding: { isValid: isString, message: '\"encoding\" must be a string' },\n  issuer: { isValid: isString, message: '\"issuer\" must be a string' },\n  subject: { isValid: isString, message: '\"subject\" must be a string' },\n  jwtid: { isValid: isString, message: '\"jwtid\" must be a string' },\n  noTimestamp: { isValid: isBoolean, message: '\"noTimestamp\" must be a boolean' },\n  keyid: { isValid: isString, message: '\"keyid\" must be a string' },\n  mutatePayload: { isValid: isBoolean, message: '\"mutatePayload\" must be a boolean' }\n};\n\nvar registered_claims_schema = {\n  iat: { isValid: isNumber, message: '\"iat\" should be a number of seconds' },\n  exp: { isValid: isNumber, message: '\"exp\" should be a number of seconds' },\n  nbf: { isValid: isNumber, message: '\"nbf\" should be a number of seconds' }\n};\n\nfunction validate(schema, allowUnknown, object, parameterName) {\n  if (!isPlainObject(object)) {\n    throw new Error('Expected \"' + parameterName + '\" to be a plain object.');\n  }\n  Object.keys(object)\n    .forEach(function(key) {\n      var validator = schema[key];\n      if (!validator) {\n        if (!allowUnknown) {\n          throw new Error('\"' + key + '\" is not allowed in \"' + parameterName + '\"');\n        }\n        return;\n      }\n      if (!validator.isValid(object[key])) {\n        throw new Error(validator.message);\n      }\n    });\n}\n\nfunction validateOptions(options) {\n  return validate(sign_options_schema, false, options, 'options');\n}\n\nfunction validatePayload(payload) {\n  return validate(registered_claims_schema, true, payload, 'payload');\n}\n\nvar options_to_payload = {\n  'audience': 'aud',\n  'issuer': 'iss',\n  'subject': 'sub',\n  'jwtid': 'jti'\n};\n\nvar options_for_objects = [\n  'expiresIn',\n  'notBefore',\n  'noTimestamp',\n  'audience',\n  'issuer',\n  'subject',\n  'jwtid',\n];\n\nmodule.exports = function (payload, secretOrPrivateKey, options, callback) {\n  if (typeof options === 'function') {\n    callback = options;\n    options = {};\n  } else {\n    options = options || {};\n  }\n\n  var isObjectPayload = typeof payload === 'object' &&\n                        !Buffer.isBuffer(payload);\n\n  var header = Object.assign({\n    alg: options.algorithm || 'HS256',\n    typ: isObjectPayload ? 'JWT' : undefined,\n    kid: options.keyid\n  }, options.header);\n\n  function failure(err) {\n    if (callback) {\n      return callback(err);\n    }\n    throw err;\n  }\n\n  if (!secretOrPrivateKey && options.algorithm !== 'none') {\n    return failure(new Error('secretOrPrivateKey must have a value'));\n  }\n\n  if (typeof payload === 'undefined') {\n    return failure(new Error('payload is required'));\n  } else if (isObjectPayload) {\n    try {\n      validatePayload(payload);\n    }\n    catch (error) {\n      return failure(error);\n    }\n    if (!options.mutatePayload) {\n      payload = Object.assign({},payload);\n    }\n  } else {\n    var invalid_options = options_for_objects.filter(function (opt) {\n      return typeof options[opt] !== 'undefined';\n    });\n\n    if (invalid_options.length > 0) {\n      return failure(new Error('invalid ' + invalid_options.join(',') + ' option for ' + (typeof payload ) + ' payload'));\n    }\n  }\n\n  if (typeof payload.exp !== 'undefined' && typeof options.expiresIn !== 'undefined') {\n    return failure(new Error('Bad \"options.expiresIn\" option the payload already has an \"exp\" property.'));\n  }\n\n  if (typeof payload.nbf !== 'undefined' && typeof options.notBefore !== 'undefined') {\n    return failure(new Error('Bad \"options.notBefore\" option the payload already has an \"nbf\" property.'));\n  }\n\n  try {\n    validateOptions(options);\n  }\n  catch (error) {\n    return failure(error);\n  }\n\n  var timestamp = payload.iat || Math.floor(Date.now() / 1000);\n\n  if (options.noTimestamp) {\n    delete payload.iat;\n  } else if (isObjectPayload) {\n    payload.iat = timestamp;\n  }\n\n  if (typeof options.notBefore !== 'undefined') {\n    try {\n      payload.nbf = timespan(options.notBefore, timestamp);\n    }\n    catch (err) {\n      return failure(err);\n    }\n    if (typeof payload.nbf === 'undefined') {\n      return failure(new Error('\"notBefore\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n    }\n  }\n\n  if (typeof options.expiresIn !== 'undefined' && typeof payload === 'object') {\n    try {\n      payload.exp = timespan(options.expiresIn, timestamp);\n    }\n    catch (err) {\n      return failure(err);\n    }\n    if (typeof payload.exp === 'undefined') {\n      return failure(new Error('\"expiresIn\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n    }\n  }\n\n  Object.keys(options_to_payload).forEach(function (key) {\n    var claim = options_to_payload[key];\n    if (typeof options[key] !== 'undefined') {\n      if (typeof payload[claim] !== 'undefined') {\n        return failure(new Error('Bad \"options.' + key + '\" option. The payload already has an \"' + claim + '\" property.'));\n      }\n      payload[claim] = options[key];\n    }\n  });\n\n  var encoding = options.encoding || 'utf8';\n\n  if (typeof callback === 'function') {\n    callback = callback && once(callback);\n\n    jws.createSign({\n      header: header,\n      privateKey: secretOrPrivateKey,\n      payload: payload,\n      encoding: encoding\n    }).once('error', callback)\n      .once('done', function (signature) {\n        callback(null, signature);\n      });\n  } else {\n    return jws.sign({header: header, payload: payload, secret: secretOrPrivateKey, encoding: encoding});\n  }\n};\n","module.exports = {\n  decode: require('./decode'),\n  verify: require('./verify'),\n  sign: require('./sign'),\n  JsonWebTokenError: require('./lib/JsonWebTokenError'),\n  NotBeforeError: require('./lib/NotBeforeError'),\n  TokenExpiredError: require('./lib/TokenExpiredError'),\n};\n","export * from './submit';\nexport * from './init';\nexport { InlineConfig } from './config';\n\nexport * from './firefox';\nexport * from './edge';\nexport * from './chrome';\n","import { Listr } from 'listr2';\nimport { ChromeWebStore } from './chrome';\nimport { InlineConfig, resolveConfig, validateConfig } from './config';\nimport { EdgeAddonStore } from './edge';\nimport { FirefoxAddonStore } from './firefox';\nimport { Store, SubmitResult } from './utils/store';\nimport consola from 'consola';\n\nexport async function submit(config: InlineConfig): Promise<SubmitResults> {\n  // Setup\n\n  const internalConfig = validateConfig(resolveConfig(config));\n\n  console.log('');\n  consola.info('Publishing Extension');\n  if (internalConfig.dryRun) {\n    consola.warn('Dry run, skipping submission');\n  }\n\n  if (\n    internalConfig.edge?.clientSecret ||\n    internalConfig.edge?.accessTokenUrl\n  ) {\n    consola.warn(\n      [\n        'Edge API v1.0 was deprecated Jan 1, 2025. v1.1 of the API requires different authentication. To upgrade:',\n        '  1. Remove the `--edge-client-secret` or `EDGE_CLIENT_SECRET` environment variable',\n        '  2. Remove the `--edge-access-token-url` or `EDGE_ACCESS_TOKEN_URL` environment variable',\n        '  3. Follow the instructions below to add the `--edge-api-key` flag or `EDGE_API_KEY` environment variable',\n        'Or run `publish-extension init` and re-initialize the edge store.',\n        '',\n        'To generate an API key:',\n        '  1. Visit https://partner.microsoft.com/en-us/dashboard/microsoftedge/publishapi',\n        '  2. Enable the v1.1 API if necessary',\n        '  3. Create an new API key',\n        '',\n        'Refer to Microsoft API reference for more details: https://learn.microsoft.com/en-us/microsoft-edge/extensions-chromium/publish/api/using-addons-api?tabs=v1-1#overview-of-using-the-update-rest-api',\n      ].join('\\n'),\n    );\n  }\n\n  // Get list of stores that need released\n\n  const stores: Array<{\n    id: keyof SubmitResults;\n    name: string;\n    getStore: (setStatus: (text: string) => void) => Store;\n  }> = [];\n  if (internalConfig.chrome) {\n    stores.push({\n      id: 'chrome',\n      name: 'Chrome Web Store',\n      getStore: setStatus =>\n        new ChromeWebStore(internalConfig.chrome!, setStatus),\n    });\n  }\n  if (internalConfig.firefox) {\n    stores.push({\n      id: 'firefox',\n      name: 'Firefox Addon Store',\n      getStore: setStatus =>\n        new FirefoxAddonStore(internalConfig.firefox!, setStatus),\n    });\n  }\n  if (internalConfig.edge) {\n    stores.push({\n      id: 'edge',\n      name: 'Edge Addon Store',\n      getStore: setStatus =>\n        new EdgeAddonStore(internalConfig.edge!, setStatus),\n    });\n  }\n\n  if (stores.length === 0) {\n    throw Error('No ZIP files detected to upload');\n  }\n\n  // Execute the tasks\n\n  const results: SubmitResults = {};\n  const tasks = new Listr(\n    stores.map(({ id, name, getStore }) => ({\n      title: name,\n      async task(_ctx, task) {\n        try {\n          const setStatus = (text: string) => {\n            task.output = `[${id}] ${text}`;\n          };\n          const store = getStore(setStatus);\n\n          setStatus('Checking ZIP files exist');\n          await store.ensureZipsExist();\n          await store.submit(internalConfig.dryRun);\n          results[id] = { success: true };\n        } catch (err) {\n          consola.error(err);\n          results[id] = { success: false, err: err };\n          throw err;\n        }\n      },\n    })),\n    {\n      exitOnError: false,\n      collectErrors: 'minimal',\n      concurrent: true,\n    },\n  );\n  await tasks.run();\n\n  // Check for errors\n\n  const errors = Object.entries(results).filter(([_id, result]) => {\n    return !result.success;\n  });\n  if (errors.length > 0) {\n    throw Error(`Submissions failed: ${errors.length}`, { cause: errors });\n  }\n\n  // Return the results\n\n  return results;\n}\n\nexport type SubmitResults = Partial<\n  Record<keyof Omit<InlineConfig, 'dryRun'>, SubmitResult>\n>;\n","import { FormData } from 'formdata-node';\nimport { fileFromPath } from 'formdata-node/file-from-path';\nimport { fetch } from '../utils/fetch';\n\nexport interface CwsApiOptions {\n  clientId: string;\n  clientSecret: string;\n  refreshToken: string;\n}\n\nexport interface CwsTokenDetails {\n  access_token: string;\n  expires_in: number;\n  refresh_token: string;\n  scope: string;\n  token_type: string;\n}\n\nexport class CwsApi {\n  constructor(readonly options: CwsApiOptions) {}\n\n  private tokenEndpoint() {\n    return new URL('https://oauth2.googleapis.com/token');\n  }\n\n  private uploadEndpoint(extensionId: string) {\n    return new URL(\n      `https://www.googleapis.com/upload/chromewebstore/v1.1/items/${extensionId}`,\n    );\n  }\n\n  private publishEndpoint(extensionId: string) {\n    return new URL(\n      `https://www.googleapis.com/chromewebstore/v1.1/items/${extensionId}/publish`,\n    );\n  }\n\n  async uploadZip(params: {\n    extensionId: string;\n    zipFile: string;\n    token: CwsTokenDetails;\n  }) {\n    const Authorization = await this.getAuthHeader(params.token);\n\n    const endpoint = this.uploadEndpoint(params.extensionId);\n    const form = new FormData();\n    form.append('image', await fileFromPath(params.zipFile));\n    await fetch(endpoint.href, {\n      method: 'PUT',\n      body: form,\n      headers: {\n        Authorization,\n        'x-goog-api-version': '2',\n      },\n    });\n  }\n\n  async submitForReview(params: {\n    extensionId: string;\n    publishTarget: 'default' | 'trustedTesters';\n    token: CwsTokenDetails;\n    deployPercentage?: number;\n    reviewExemption?: boolean;\n  }) {\n    const Authorization = await this.getAuthHeader(params.token);\n\n    const endpoint = this.publishEndpoint(params.extensionId);\n    if (params.publishTarget)\n      endpoint.searchParams.append('publishTarget', params.publishTarget);\n    if (params.deployPercentage != null)\n      endpoint.searchParams.set(\n        'deployPercentage',\n        String(params.deployPercentage),\n      );\n    if (params.reviewExemption != null)\n      endpoint.searchParams.set(\n        'reviewExemption',\n        String(params.reviewExemption),\n      );\n\n    await fetch(endpoint.href, {\n      method: 'POST',\n      headers: {\n        Authorization,\n        'x-goog-api-version': '2',\n        'Content-Length': '0',\n      },\n    });\n  }\n\n  getToken(): Promise<CwsTokenDetails> {\n    const endpoint = this.tokenEndpoint();\n\n    return fetch(endpoint.href, {\n      method: 'POST',\n      body: JSON.stringify({\n        client_id: this.options.clientId,\n        client_secret: this.options.clientSecret,\n        refresh_token: this.options.refreshToken,\n        grant_type: 'refresh_token',\n        redirect_uri: 'urn:ietf:wg:oauth:2.0:oob',\n      }),\n    });\n  }\n\n  private async getAuthHeader(token: CwsTokenDetails) {\n    return `${token.token_type} ${token.access_token}`;\n  }\n}\n","import { createFetch } from 'ofetch';\n\nexport const fetch = createFetch({\n  defaults: {\n    onResponseError: ctx => {\n      console.log('Request:', ctx.request);\n      console.log('Response:', JSON.stringify(ctx.response, null, 2));\n    },\n  },\n});\n","import { CwsApi } from './chrome-api';\nimport { Store } from '../utils/store';\nimport { z } from 'zod';\nimport consola from 'consola';\nimport { ensureZipExists } from '../utils/fs';\n\nexport const ChromeWebStoreOptions = z.object({\n  zip: z.string().min(1),\n  extensionId: z.string().min(1).trim(),\n  clientId: z.string().min(1).trim(),\n  clientSecret: z.string().min(1).trim(),\n  refreshToken: z.string().min(1).trim(),\n  publishTarget: z.enum(['default', 'trustedTesters']).default('default'),\n  deployPercentage: z.number().int().min(1).max(100).optional(),\n  reviewExemption: z.boolean().default(false),\n  skipSubmitReview: z.boolean().default(false),\n});\nexport type ChromeWebStoreOptions = z.infer<typeof ChromeWebStoreOptions>;\n\nexport class ChromeWebStore implements Store {\n  constructor(\n    readonly options: ChromeWebStoreOptions,\n    readonly setStatus: (text: string) => void,\n  ) {}\n\n  async submit(dryRun?: boolean): Promise<void> {\n    const api = new CwsApi(this.options);\n\n    this.setStatus('Getting an access token');\n    const token = await api.getToken();\n\n    if (dryRun) {\n      this.setStatus('DRY RUN: Skipped upload and publishing');\n      return;\n    }\n\n    this.setStatus('Uploading new ZIP file');\n    await api.uploadZip({\n      extensionId: this.options.extensionId,\n      zipFile: this.options.zip,\n      token,\n    });\n\n    if (this.options.skipSubmitReview) {\n      this.setStatus('Skipping submission (skipSubmitReview=true)');\n      return;\n    }\n\n    this.setStatus('Submitting for review');\n    await api.submitForReview({\n      extensionId: this.options.extensionId,\n      publishTarget: this.options.publishTarget,\n      token,\n    });\n  }\n\n  async ensureZipsExist(): Promise<void> {\n    await ensureZipExists(this.options.zip);\n  }\n}\n","import fs from 'node:fs/promises';\n\nexport async function ensureZipExists(path: string) {\n  try {\n    await fs.lstat(path);\n  } catch {\n    throw Error('ZIP file does not exist: ' + path);\n  }\n}\n","import { z } from 'zod';\nimport { ChromeWebStoreOptions } from './chrome';\nimport { EdgeAddonStoreOptions } from './edge';\nimport { FirefoxAddonStoreOptions } from './firefox';\nimport { DeepPartial } from './utils/types';\n\n/**\n * Given inline config, read environment variables and apply defaults. Throws an error if any config\n * is missing.\n */\nexport function resolveConfig(\n  config: InlineConfig,\n): DeepPartial<InternalConfig> {\n  const dryRun = config.dryRun ?? booleanEnv('DRY_RUN') ?? false;\n\n  const chromeZip = config.chrome?.zip ?? stringEnv('CHROME_ZIP');\n  const firefoxZip = config.firefox?.zip ?? stringEnv('FIREFOX_ZIP');\n  const edgeZip = config.edge?.zip ?? stringEnv('EDGE_ZIP');\n\n  return {\n    dryRun,\n    chrome:\n      chromeZip == null\n        ? undefined\n        : {\n            zip: chromeZip,\n            extensionId:\n              config.chrome?.extensionId ?? stringEnv('CHROME_EXTENSION_ID'),\n            clientId: config.chrome?.clientId ?? stringEnv('CHROME_CLIENT_ID'),\n            clientSecret:\n              config.chrome?.clientSecret ?? stringEnv('CHROME_CLIENT_SECRET'),\n            refreshToken:\n              config.chrome?.refreshToken ?? stringEnv('CHROME_REFRESH_TOKEN'),\n            publishTarget:\n              config.chrome?.publishTarget ??\n              stringEnv('CHROME_PUBLISH_TARGET') ??\n              'default',\n            deployPercentage:\n              config.chrome?.deployPercentage ??\n              intEnv('CHROME_DEPLOY_PERCENTAGE'),\n            reviewExemption:\n              config.chrome?.reviewExemption ??\n              booleanEnv('CHROME_REVIEW_EXEMPTION') ??\n              false,\n            skipSubmitReview:\n              config.chrome?.skipSubmitReview ??\n              booleanEnv('CHROME_SKIP_SUBMIT_REVIEW') ??\n              false,\n          },\n    firefox:\n      firefoxZip == null\n        ? undefined\n        : {\n            zip: firefoxZip,\n            sourcesZip:\n              config.firefox?.sourcesZip ?? stringEnv('FIREFOX_SOURCES_ZIP'),\n            extensionId:\n              config.firefox?.extensionId ?? stringEnv('FIREFOX_EXTENSION_ID'),\n            jwtIssuer:\n              config.firefox?.jwtIssuer ?? stringEnv('FIREFOX_JWT_ISSUER'),\n            jwtSecret:\n              config.firefox?.jwtSecret ?? stringEnv('FIREFOX_JWT_SECRET'),\n            channel:\n              config.firefox?.channel ??\n              stringEnv('FIREFOX_CHANNEL') ??\n              'listed',\n          },\n    edge:\n      edgeZip == null\n        ? undefined\n        : {\n            zip: edgeZip,\n            productId: config.edge?.productId ?? stringEnv('EDGE_PRODUCT_ID'),\n            clientId: config.edge?.clientId ?? stringEnv('EDGE_CLIENT_ID'),\n            apiKey: config.edge?.apiKey ?? stringEnv('EDGE_API_KEY'),\n            clientSecret:\n              config.edge?.clientSecret ?? stringEnv('EDGE_CLIENT_SECRET'),\n            accessTokenUrl:\n              config.edge?.accessTokenUrl ?? stringEnv('EDGE_ACCESS_TOKEN_URL'),\n            skipSubmitReview:\n              config.edge?.skipSubmitReview ??\n              booleanEnv('EDGE_SKIP_SUBMIT_REVIEW') ??\n              false,\n          },\n  };\n}\n\nfunction toScreamingSnakeCase(str: string): string {\n  return str\n    .replace(/([A-Z])/g, '_$1')\n    .replace(/-/g, '_')\n    .toUpperCase();\n}\n\nexport function validateConfig(config: any): InternalConfig {\n  const result = InternalConfig.safeParse(config);\n\n  if (!result.success) {\n    throw Error(\n      'Missing required config: ' +\n        result.error.errors\n          .map(i => i.path.map(j => toScreamingSnakeCase(String(j))).join('_'))\n          .join(', '),\n      { cause: result.error },\n    );\n  }\n  return result.data;\n}\n\nfunction booleanEnv(name: keyof CustomEnv): boolean | undefined {\n  return !process.env[name] ? undefined : process.env[name] === 'true';\n}\n\nfunction stringEnv<T extends string = string>(\n  name: keyof CustomEnv,\n): T | undefined {\n  return !process.env[name] ? undefined : (process.env[name] as T);\n}\n\nfunction intEnv(name: keyof CustomEnv): number | undefined {\n  return !process.env[name] ? undefined : parseInt(process.env[name]!);\n}\n\nexport const InlineConfig = z.object({\n  /**\n   * When true, just check authentication, don't upload any zip files or submit any updates.\n   */\n  dryRun: z.boolean().optional(),\n  /**\n   * Options for publishing to chrome.\n   */\n  chrome: ChromeWebStoreOptions.partial().optional(),\n  /**\n   * Options for publishing to Firefox.\n   */\n  firefox: FirefoxAddonStoreOptions.partial().optional(),\n  /**\n   * Options for publishing to Edge.\n   */\n  edge: EdgeAddonStoreOptions.partial().optional(),\n});\nexport type InlineConfig = z.infer<typeof InlineConfig>;\n\nexport const InternalConfig = z.object({\n  dryRun: z.boolean(),\n  chrome: ChromeWebStoreOptions.optional(),\n  firefox: FirefoxAddonStoreOptions.optional(),\n  edge: EdgeAddonStoreOptions.optional(),\n});\nexport type InternalConfig = z.infer<typeof InternalConfig>;\n\ninterface CustomEnv {\n  DRY_RUN: string | undefined;\n\n  CHROME_CLIENT_ID: string | undefined;\n  CHROME_CLIENT_SECRET: string | undefined;\n  CHROME_DEPLOY_PERCENTAGE: string | undefined;\n  CHROME_EXTENSION_ID: string | undefined;\n  CHROME_PUBLISH_TARGET: string | undefined;\n  CHROME_REFRESH_TOKEN: string | undefined;\n  CHROME_REVIEW_EXEMPTION: string | undefined;\n  CHROME_SKIP_SUBMIT_REVIEW: string | undefined;\n  CHROME_ZIP: string | undefined;\n\n  FIREFOX_ZIP: string | undefined;\n  FIREFOX_SOURCES_ZIP: string | undefined;\n  FIREFOX_EXTENSION_ID: string | undefined;\n  FIREFOX_JWT_ISSUER: string | undefined;\n  FIREFOX_JWT_SECRET: string | undefined;\n  FIREFOX_CHANNEL: string | undefined;\n\n  EDGE_ZIP: string | undefined;\n  EDGE_PRODUCT_ID: string | undefined;\n  EDGE_CLIENT_ID: string | undefined;\n  /** @deprecated since Edge API v1.1 release */\n  EDGE_CLIENT_SECRET: string | undefined;\n  /** @deprecated since Edge API v1.1 release */\n  EDGE_ACCESS_TOKEN_URL: string | undefined;\n  EDGE_API_KEY: string | undefined;\n  EDGE_SKIP_SUBMIT_REVIEW: string | undefined;\n}\n\ndeclare global {\n  namespace NodeJS {\n    interface ProcessEnv extends CustomEnv {}\n  }\n}\n","import fs from 'fs';\nimport { fetch } from '../utils/fetch';\n\nexport type EdgeApiOptions = {\n  productId: string;\n  clientId: string;\n  apiKey: string;\n};\n\nexport interface EdgeTokenDetails {\n  access_token: string;\n  expires_in: number;\n  token_type: string;\n}\n\nexport interface DraftResponse {\n  operationId: string;\n}\n\n/**\n * Docs: https://learn.microsoft.com/en-us/microsoft-edge/extensions-chromium/publish/api/addons-api-reference#response-1\n */\nexport interface DraftOperation {\n  id: string;\n  createdTime: string;\n  lastUpdatedTime: string;\n  status: 'InProgress' | 'Succeeded' | 'Failed';\n  message: string | null;\n  errorCode: string | null;\n  errors: string[] | null;\n}\n\nexport class EdgeApi {\n  constructor(readonly options: EdgeApiOptions) {}\n\n  /**\n   * Docs: https://learn.microsoft.com/en-us/microsoft-edge/extensions-chromium/publish/api/using-addons-api#sample-request\n   */\n  getToken(): Promise<EdgeTokenDetails> {\n    return Promise.resolve({\n      access_token: this.options.apiKey,\n      expires_in: 0,\n      token_type: 'ApiKey',\n    });\n  }\n\n  /**\n   * Docs: https://learn.microsoft.com/en-us/microsoft-edge/extensions-chromium/publish/api/using-addons-api#uploading-a-package-to-update-an-existing-submission\n   */\n  async uploadDraft(params: {\n    token: EdgeTokenDetails;\n    productId: string;\n    zipFile: string;\n  }): Promise<DraftResponse> {\n    const endpoint = `https://api.addons.microsoftedge.microsoft.com/v1/products/${params.productId}/submissions/draft/package`;\n    const file = fs.createReadStream(params.zipFile);\n    const res = await fetch.raw(endpoint, {\n      method: 'POST',\n      body: file,\n      headers: {\n        ...this.getAuthHeaders(params.token),\n        'Content-Type': 'application/zip',\n      },\n    });\n    const operationId = res.headers.get('Location');\n    if (!operationId)\n      throw Error(\n        'Edge API did not return an operation ID in the Location header.',\n      );\n    return { operationId };\n  }\n\n  /**\n   * Docs: https://learn.microsoft.com/en-us/microsoft-edge/extensions-chromium/publish/api/using-addons-api#checking-the-status-of-a-package-upload\n   */\n  uploadDraftOperation(params: {\n    token: EdgeTokenDetails;\n    productId: string;\n    operationId: string;\n  }): Promise<DraftOperation> {\n    const endpoint = `https://api.addons.microsoftedge.microsoft.com/v1/products/${params.productId}/submissions/draft/package/operations/${params.operationId}`;\n    return fetch(endpoint, {\n      headers: this.getAuthHeaders(params.token),\n    });\n  }\n\n  /**\n   * Docs: https://learn.microsoft.com/en-us/microsoft-edge/extensions-chromium/publish/api/using-addons-api#publishing-the-submission\n   */\n  async publish(params: {\n    productId: string;\n    token: EdgeTokenDetails;\n  }): Promise<void> {\n    const endpoint = `https://api.addons.microsoftedge.microsoft.com/v1/products/${params.productId}/submissions`;\n    const res = await fetch(endpoint, {\n      method: 'POST',\n      body: JSON.stringify({}),\n      headers: this.getAuthHeaders(params.token),\n    });\n  }\n\n  private getAuthHeaders(token: EdgeTokenDetails): Record<string, string> {\n    return {\n      Authorization: `${token.token_type} ${token.access_token}`,\n      ...(token.token_type === 'ApiKey'\n        ? { 'X-ClientID': this.options.clientId }\n        : {}),\n    };\n  }\n}\n","export function sleep(ms: number): Promise<void> {\n  return new Promise(res => setTimeout(res, ms));\n}\n","export function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {\n  return new Promise((res, rej) => {\n    const timeout = setTimeout(() => rej(`Timed out after ${ms}ms`), ms);\n    promise.then(res, rej).finally(() => clearTimeout(timeout));\n  });\n}\n","import { DraftOperation, EdgeApi, EdgeTokenDetails } from './edge-api';\nimport { sleep } from '../utils/sleep';\nimport { withTimeout } from '../utils/withTimeout';\nimport { Store } from '../utils/store';\nimport { z } from 'zod';\nimport { ensureZipExists } from '../utils/fs';\n\nexport const EdgeAddonStoreOptions = z.object({\n  zip: z.string().min(1),\n  productId: z.string().min(1).trim(),\n  clientId: z.string().min(1).trim(),\n  skipSubmitReview: z.boolean().default(false),\n  apiKey: z.string().min(1).trim(),\n  /** @deprecated: API v1.0 authorization field no longer in use. */\n  clientSecret: z.string().optional(),\n  /** @deprecated: API v1.0 authorization field no longer in use. */\n  accessTokenUrl: z.string().optional(),\n});\n\nexport type EdgeAddonStoreOptions = z.infer<typeof EdgeAddonStoreOptions>;\n\nexport class EdgeAddonStore implements Store {\n  private api: EdgeApi;\n\n  constructor(\n    private readonly options: EdgeAddonStoreOptions,\n    readonly setStatus: (text: string) => void,\n  ) {\n    this.api = new EdgeApi(options);\n  }\n\n  async ensureZipsExist(): Promise<void> {\n    await ensureZipExists(this.options.zip);\n  }\n\n  async submit(dryRun?: boolean | undefined): Promise<void> {\n    this.setStatus('Getting authorization token');\n    const token = await this.api.getToken();\n\n    if (dryRun) {\n      // TODO: Validate v1.1 API key before returning. v1.0 token is validated inside `this.api.getToken()` above.\n      this.setStatus('DRY RUN: Skipped upload and publishing');\n      return;\n    }\n\n    const pollInterval = 5e3; // 5 seconds\n    const timeout = 10 * 60e3; // 10 minutes\n    const uploadPromise = this.uploadAndPollValidation(token, pollInterval);\n    await withTimeout(uploadPromise, timeout);\n\n    if (this.options.skipSubmitReview) {\n      this.setStatus('Skipping submission (skipSubmitReview=true)');\n      return;\n    }\n\n    this.setStatus('Submitting new version');\n    await this.api.publish({\n      token,\n      productId: this.options.productId,\n    });\n  }\n\n  private async uploadAndPollValidation(\n    token: EdgeTokenDetails,\n    pollIntervalMs: number,\n  ): Promise<void> {\n    this.setStatus('Uploading new ZIP file');\n    const { operationId } = await this.api.uploadDraft({\n      token,\n      productId: this.options.productId,\n      zipFile: this.options.zip,\n    });\n\n    this.setStatus('Waiting for validation results');\n    let operation: DraftOperation;\n    do {\n      await sleep(pollIntervalMs);\n      operation = await this.api.uploadDraftOperation({\n        token,\n        operationId,\n        productId: this.options.productId,\n      });\n    } while (operation.status === 'InProgress');\n\n    if (operation.status === 'Failed') {\n      throw Error(`Validation failed: ${JSON.stringify(operation, null, 2)}`);\n    } else {\n      this.setStatus('Extension is valid');\n    }\n  }\n}\n","import { FormData } from 'formdata-node';\nimport { fileFromPath } from 'formdata-node/file-from-path';\nimport jwt from 'jsonwebtoken';\nimport { fetch } from '../utils/fetch';\n\nexport interface AddonsApiOptions {\n  jwtIssuer: string;\n  jwtSecret: string;\n}\n\nexport interface AddonPagination<T> {\n  page_size: number;\n  page_count: number;\n  count: number;\n  next?: string;\n  previous?: string;\n  results: T[];\n}\n\nexport interface AddonDetails {\n  id: string;\n}\n\nexport interface AddonVersion {\n  id: number;\n}\n\nexport interface UploadDetails {\n  uuid: string;\n  channel: AddonChannel;\n  processed: boolean;\n  submitted: boolean;\n  url: string;\n  valid: boolean;\n  validation: {\n    errors: number;\n    warnings: number;\n    notices: number;\n  };\n  version: string;\n}\n\nexport interface AddonVersion {\n  id: number;\n  file: {\n    id: number;\n  };\n}\n\nexport type AddonChannel = 'listed' | 'unlisted';\n\nexport class AddonsApi {\n  constructor(readonly options: AddonsApiOptions) {}\n\n  private addonDetailEndpoint(extensionId: string) {\n    return new URL(\n      `https://addons.mozilla.org/api/v5/addons/addon/${extensionId}`,\n    );\n  }\n\n  private addonsUploadCreateEndpoint() {\n    return new URL(`https://addons.mozilla.org/api/v5/addons/upload/`);\n  }\n\n  private addonsUploadDetailsEndpoint(uploadUuid: string) {\n    return new URL(\n      `https://addons.mozilla.org/api/v5/addons/upload/${uploadUuid}`,\n    );\n  }\n\n  private addonVersionCreateEndpoint(extensionId: string) {\n    return new URL(\n      `https://addons.mozilla.org/api/v5/addons/addon/${extensionId}/versions/`,\n    );\n  }\n\n  /**\n   * Docs: https://addons-server.readthedocs.io/en/latest/topics/api/addons.html#detail\n   */\n  details(params: { extensionId: string }): Promise<AddonDetails> {\n    const endpoint = this.addonDetailEndpoint(params.extensionId);\n    return fetch(endpoint.href, {\n      headers: {\n        Authorization: this.getAuthHeader(),\n      },\n    });\n  }\n\n  /**\n   * Docs: https://addons-server.readthedocs.io/en/latest/topics/api/addons.html#upload-create\n   */\n  async uploadCreate(params: {\n    file: string;\n    channel: AddonChannel;\n  }): Promise<UploadDetails> {\n    const endpoint = this.addonsUploadCreateEndpoint();\n    const form = new FormData();\n\n    form.append('channel', params.channel);\n    form.append('upload', await fileFromPath(params.file));\n\n    return await fetch(endpoint.href, {\n      method: 'POST',\n      body: form,\n      headers: {\n        Authorization: this.getAuthHeader(),\n      },\n    });\n  }\n\n  /**\n   * Docs: https://addons-server.readthedocs.io/en/latest/topics/api/addons.html#upload-detail\n   */\n  uploadDetail(params: { uuid: string }): Promise<UploadDetails> {\n    const endpoint = this.addonsUploadDetailsEndpoint(params.uuid);\n    return fetch(endpoint.href, {\n      headers: {\n        Authorization: this.getAuthHeader(),\n      },\n    });\n  }\n\n  async versionCreate(params: {\n    extensionId: string;\n    uploadUuid: string;\n    sourceFile?: string;\n  }): Promise<AddonVersion> {\n    const endpoint = this.addonVersionCreateEndpoint(params.extensionId);\n    const form = new FormData();\n    form.append('upload', params.uploadUuid);\n    if (params.sourceFile) {\n      form.append('source', await fileFromPath(params.sourceFile));\n    } else {\n      form.append('source', '');\n    }\n\n    return await fetch(endpoint.href, {\n      method: 'POST',\n      body: form,\n      headers: {\n        Authorization: this.getAuthHeader(),\n      },\n    });\n  }\n\n  /**\n   * See https://addons-server.readthedocs.io/en/latest/topics/api/auth.html\n   */\n  private createJwt(timeoutInS = 30): string {\n    const issuedAt = Math.floor(Date.now() / 1000);\n    const payload = {\n      iss: this.options.jwtIssuer,\n      jti: Math.random().toString(),\n      iat: issuedAt,\n      exp: issuedAt + timeoutInS,\n    };\n    const secret = this.options.jwtSecret ?? '';\n    return jwt.sign(payload, secret, { algorithm: 'HS256' });\n  }\n\n  private getAuthHeader(): string {\n    return `JWT ${this.createJwt()}`;\n  }\n}\n","export function plural(\n  count: number,\n  word: string,\n  pluralForm?: string,\n): string {\n  if (count === 1) return `${count} ${word}`;\n  return `${count} ${pluralForm ?? `${word}s`}`;\n}\n","import { AddonsApi, UploadDetails } from './firefox-api';\nimport { sleep } from '../utils/sleep';\nimport { withTimeout } from '../utils/withTimeout';\nimport { plural } from '../utils/plural';\nimport { Store } from '../utils/store';\nimport { z } from 'zod';\nimport { ensureZipExists } from '../utils/fs';\nimport consola from 'consola';\n\nexport const FirefoxAddonStoreOptions = z.object({\n  zip: z.string().min(1),\n  sourcesZip: z.string().min(1).optional(),\n  extensionId: z.string().min(1).trim(),\n  jwtIssuer: z.string().min(1).trim(),\n  jwtSecret: z.string().min(1).trim(),\n  channel: z.enum(['listed', 'unlisted']).default('listed'),\n});\nexport type FirefoxAddonStoreOptions = z.infer<typeof FirefoxAddonStoreOptions>;\n\nexport class FirefoxAddonStore implements Store {\n  private api: AddonsApi;\n\n  constructor(\n    readonly options: FirefoxAddonStoreOptions,\n    readonly setStatus: (text: string) => void,\n  ) {\n    this.api = new AddonsApi(options);\n  }\n\n  async ensureZipsExist(): Promise<void> {\n    await ensureZipExists(this.options.zip);\n    if (this.options.sourcesZip) {\n      await ensureZipExists(this.options.sourcesZip);\n    }\n  }\n\n  async submit(dryRun?: boolean): Promise<void> {\n    this.setStatus('Getting addon details');\n    const addon = await this.api.details({\n      extensionId: this.wrappedExtensionId,\n    });\n    if (dryRun) {\n      this.setStatus('DRY RUN: Skipped upload and publishing');\n      return;\n    }\n\n    // Firefox recommends 5-10s polling and a 10 minute timeout\n    const pollInterval = 5e3; // 5 seconds\n    const timeout = 10 * 60e3; // 10 minutes\n    const uploadPromise = this.uploadAndPollValidation(pollInterval);\n    const upload = await withTimeout(uploadPromise, timeout);\n\n    this.setStatus('Submitting new version');\n    const version = await this.api.versionCreate({\n      extensionId: this.wrappedExtensionId,\n      sourceFile: this.options.sourcesZip,\n      uploadUuid: upload.uuid,\n    });\n\n    const validationUrl = `https://addons.mozilla.org/en-US/developers/addon/${addon.id}/file/${version.file.id}/validation`;\n    const { errors, notices, warnings } = upload.validation;\n    this.setStatus(\n      `Validation results: ${plural(errors, 'error')}, ${plural(\n        warnings,\n        'warning',\n      )}, ${plural(notices, 'notice')}`,\n    );\n    if (!upload.valid) throw Error(`Extension is invalid: ${validationUrl}`);\n    else console.log('Firefox validation results: ' + validationUrl);\n  }\n\n  private async uploadAndPollValidation(\n    pollIntervalMs: number,\n  ): Promise<UploadDetails> {\n    this.setStatus('Uploading new ZIP file');\n    let details = await this.api.uploadCreate({\n      file: this.options.zip,\n      channel: this.options.channel,\n    });\n\n    this.setStatus('Waiting for validation results');\n    while (!details.processed) {\n      await sleep(pollIntervalMs);\n      details = await this.api.uploadDetail(details);\n    }\n\n    return details;\n  }\n\n  /**\n   * Ensure the extension id is wrapped in curly braces, that's what the addon store API is expecting\n   * @example\n   * \"test\" -> \"{test}\"\n   */\n  private get wrappedExtensionId(): string {\n    let id = this.options.extensionId;\n    if (id.includes('@')) return id;\n    if (!id.startsWith('{')) id = '{' + id;\n    if (!id.endsWith('}')) id += '}';\n    return id;\n  }\n}\n","import consola from 'consola';\nimport { InlineConfig, resolveConfig } from './config';\nimport { copyFile, writeFile, readFile } from 'node:fs/promises';\nimport { ChromeWebStoreOptions } from './chrome';\nimport { FirefoxAddonStoreOptions } from './firefox';\nimport { EdgeAddonStoreOptions } from './edge';\nimport { ofetch } from 'ofetch';\n\ntype Entry = [key: string, value: any];\n\nconst envFile = '.env.submit';\n\nexport async function init(config: InlineConfig) {\n  consola.info(`Initialize or update an existing \\`${envFile}\\` file.`);\n\n  const previousConfig = resolveConfig(config);\n\n  // Types are wrong? This actually returns a Promise<string[]>\n  const stores = await prompt<string[]>(\n    'What stores do you want to configure?',\n    {\n      type: 'multiselect',\n      options: [\n        { value: 'chrome', label: 'Chrome Web Store' },\n        { value: 'firefox', label: 'Firefox Addon Store' },\n        { value: 'edge', label: 'Edge Addon Store' },\n      ],\n      required: false,\n    },\n  );\n\n  const replacements: Entry[] = [];\n  if (stores?.includes('chrome')) {\n    replacements.push(...(await initChrome(previousConfig.chrome)));\n  }\n  if (stores?.includes('firefox')) {\n    replacements.push(...(await initFirefox(previousConfig.firefox)));\n  }\n  if (stores?.includes('edge')) {\n    replacements.push(...(await initEdge(previousConfig.edge)));\n  }\n\n  await updateEnvFile(replacements);\n  console.log();\n  consola.log(\n    'To submit an update, run:\\n\\n  `publish-extension --chrome-zip path/to/extension.zip \\\\`\\n    `--firefox-zip path/to/extension.zip \\\\`\\n    `--edge-zip path/to/extension.zip`',\n  );\n}\n\nasync function prompt<T>(\n  message: Parameters<typeof consola.prompt>[0],\n  options: Parameters<typeof consola.prompt>[1],\n  previousValue?: any,\n): Promise<T> {\n  let result = await consola.prompt(message, {\n    default: previousValue,\n    placeholder: previousValue,\n    ...options,\n  });\n  // When canceling, a symbol is returned instead of the value.\n  if (typeof result === 'symbol') {\n    throw Error('Canceled');\n  }\n  if (typeof result === 'string') {\n    result = result.trim();\n  }\n  return result as T;\n}\n\nasync function initChrome(\n  previousOptions: Partial<ChromeWebStoreOptions> | undefined,\n): Promise<Entry[]> {\n  const entries: Entry[] = [];\n\n  console.log();\n  consola.start('Chrome Web Store\\n');\n\n  consola.log('`--chrome-extension-id` can be found:');\n  consola.log('  1. Under the extension name in the CWS developer console');\n  consola.log('  2. In the URL of the CWS page for the item');\n  consola.log('Example: `ocfdgncpifmegplaglcnglhioflaimkd`');\n  const extensionId = await prompt<string>(\n    'Enter the extension ID:',\n    {\n      type: 'text',\n    },\n    previousOptions?.extensionId,\n  );\n  entries.push(['CHROME_EXTENSION_ID', extensionId]);\n\n  console.log();\n  consola.log(\n    '`--chrome-client-id` and `--chrome-client-secret` are generated by following the \"Initial Setup\" from:',\n  );\n  console.log('https://developer.chrome.com/docs/webstore/using-api#setup');\n  const clientId = await prompt<string>(\n    'Enter your client ID:',\n    { type: 'text' },\n    previousOptions?.clientId,\n  );\n  entries.push(['CHROME_CLIENT_ID', clientId]);\n  const clientSecret = await prompt<string>(\n    'Enter your client secret:',\n    { type: 'text' },\n    previousOptions?.clientSecret,\n  );\n  entries.push(['CHROME_CLIENT_SECRET', clientSecret]);\n\n  const generateRefreshToken = await prompt<boolean>(\n    'Generate new refresh token?',\n    { type: 'confirm' },\n  );\n  if (generateRefreshToken) {\n    const authCodeUrl = `https://accounts.google.com/o/oauth2/auth?response_type=code&scope=https://www.googleapis.com/auth/chromewebstore&client_id=${clientId}&redirect_uri=urn:ietf:wg:oauth:2.0:oob`;\n    consola.log(authCodeUrl);\n    const authCode = await consola.prompt(\n      'Open the above URL, login, and enter the auth code:',\n      {\n        type: 'text',\n        required: true,\n      },\n    );\n    const data = new URLSearchParams();\n    data.set('client_id', clientId);\n    data.set('client_secret', clientSecret);\n    data.set('code', authCode);\n    data.set('grant_type', 'authorization_code');\n    data.set('redirect_uri', 'urn:ietf:wg:oauth:2.0:oob');\n    const tokenUrl = `https://accounts.google.com/o/oauth2/token`;\n    const res = await ofetch<{ refresh_token: string }>(tokenUrl, {\n      method: 'POST',\n      body: data,\n    });\n    const refreshToken = res.refresh_token;\n    consola.info(`Refresh token: \\`${refreshToken}\\``);\n    entries.push(['CHROME_REFRESH_TOKEN', refreshToken]);\n  }\n\n  const publishTarget = await prompt<string>(\n    '`--chrome-publish-target`: Where do you want to release to?',\n    {\n      type: 'select',\n      options: [\n        {\n          label: 'Default',\n          value: 'default',\n          hint: 'Public release channel',\n        },\n        {\n          label: 'Trusted Testers',\n          value: 'trustedTesters',\n          hint: 'Prerelease, internal channel',\n        },\n      ],\n      initial: previousOptions?.publishTarget,\n    },\n    previousOptions?.publishTarget,\n  );\n  entries.push(['CHROME_PUBLISH_TARGET', publishTarget]);\n\n  const submitForReview = await prompt<boolean>(\n    'When uploading, automatically submit new update for review?',\n    { type: 'confirm' },\n    !previousOptions?.skipSubmitReview,\n  );\n  entries.push(['CHROME_SKIP_SUBMIT_REVIEW', !submitForReview]);\n\n  return entries;\n}\n\nasync function initFirefox(\n  previousOptions: Partial<FirefoxAddonStoreOptions> | undefined,\n): Promise<Entry[]> {\n  const entries: Entry[] = [];\n\n  console.log();\n  consola.start('Firefox Addon Store\\n');\n\n  consola.info(\n    'Your `--firefox-extension-id` is listed at the bottom of the details page on:',\n  );\n  console.log('https://addons.mozilla.org/en-US/developers/');\n  const extensionId = await prompt(\n    'Enter extension ID:',\n    {\n      type: 'text',\n    },\n    previousOptions?.extensionId,\n  );\n  entries.push(['FIREFOX_EXTENSION_ID', extensionId]);\n\n  console.log();\n  consola.log(\n    '`--firefox-jwt-issuer` and `--firefox-jwt-secret` are available at:',\n  );\n  console.log('https://addons.mozilla.org/developers/addon/api/key/');\n  const jwtIssuer = await prompt<string>(\n    'Enter your JWT issuer:',\n    { type: 'text' },\n    previousOptions?.jwtIssuer,\n  );\n  entries.push(['FIREFOX_JWT_ISSUER', jwtIssuer]);\n  const jwtSecret = await prompt<string>(\n    'Enter your JWT secret:',\n    { type: 'text' },\n    previousOptions?.jwtSecret,\n  );\n  entries.push(['FIREFOX_JWT_SECRET', jwtSecret]);\n\n  const channel = await prompt<string>(\n    '`--firefox-channel`: Which channel do you want to release to?',\n    {\n      type: 'select',\n      options: [\n        {\n          label: 'Listed',\n          value: 'listed',\n          hint: 'Hosted on addons.mozilla.com',\n        },\n        { label: 'Unlisted', value: 'unlisted', hint: 'For self-hosting' },\n      ],\n      initial: previousOptions?.channel,\n    },\n    previousOptions?.channel,\n  );\n  entries.push(['FIREFOX_CHANNEL', channel]);\n\n  return entries;\n}\n\nasync function initEdge(\n  previousOptions: Partial<EdgeAddonStoreOptions> | undefined,\n): Promise<Entry[]> {\n  const entries: Entry[] = [];\n\n  console.log();\n  consola.start('Edge Addon Store\\n');\n\n  consola.info(\n    'Your `--edge-product-id` is listed On the developer dashboard, at the top of the page under the extension name',\n  );\n  console.log('https://partner.microsoft.com/dashboard/microsoftedge/overview');\n  const productId = await prompt(\n    'Enter product ID:',\n    {\n      type: 'text',\n    },\n    previousOptions?.productId,\n  );\n  entries.push(['EDGE_PRODUCT_ID', productId]);\n\n  console.log();\n  consola.log(\n    '`--edge-client-id` and either `--edge-api-key` (API v1.1) or `--edge-client-secret` and `--edge-access-token-url` (API v1.0) can be created following:',\n  );\n  console.log(\n    'https://learn.microsoft.com/en-us/microsoft-edge/extensions-chromium/publish/api/using-addons-api#before-you-begin',\n  );\n  const clientId = await prompt<string>(\n    'Enter your client ID:',\n    { type: 'text' },\n    previousOptions?.clientId,\n  );\n  entries.push(['EDGE_CLIENT_ID', clientId]);\n\n  const apiKey = await prompt<string>(\n    'Enter your API key:',\n    { type: 'text' },\n    previousOptions?.apiKey,\n  );\n  entries.push(['EDGE_API_KEY', apiKey]);\n\n  const submitForReview = await prompt<boolean>(\n    'When uploading, automatically submit new update for review?',\n    { type: 'confirm' },\n    !previousOptions?.skipSubmitReview,\n  );\n  entries.push(['EDGE_SKIP_SUBMIT_REVIEW', !submitForReview]);\n\n  return entries;\n}\n\nasync function updateEnvFile(entries: Entry[]) {\n  consola.start(`Writing to \\`${envFile}\\`...`);\n  let template = await readFile(envFile, 'utf-8').catch(() => '');\n\n  for (const [name, value] of entries) {\n    const formattedValue = typeof value === 'string' ? `\"${value}\"` : value;\n    const replacement = `${name}=${formattedValue}`;\n    const pattern = new RegExp(`^${name}=.*$`, 'm');\n    const existing = template.match(pattern);\n    if (existing) {\n      template = template.replace(existing[0], replacement);\n    } else {\n      template += `\\n${replacement}`;\n    }\n  }\n\n  const backupFilename = `${envFile}.backup-${Date.now()}`;\n  await copyFile(envFile, backupFilename)\n    .then(() => {\n      consola.info(`Backed up old \\`${envFile}\\` to \\`${backupFilename}\\``);\n    })\n    .catch(() => {\n      // If the file doesn't exist, continue\n    });\n\n  await writeFile(envFile, template, 'utf-8');\n\n  console.log();\n  consola.success('Wrote config to `.env.submit`');\n}\n"],"mappings":"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","names":["exports","module","Buffer","exports","module","Buffer","exports","module","Buffer","exports","module","exports","module","Buffer","exports","module","Buffer","exports","module","Buffer","exports","module","Buffer","exports","module","Buffer","exports","exports","module","jwt","exports","module","exports","module","exports","module","exports","module","plural","exports","module","exports","module","i","range","comp","exports","module","exports","module","header","secretOrPublicKey","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","require_lodash","exports","module","exports","module","exports","module","fs","import_zod","import_fs","fs","import_zod","import_formdata_node","import_file_from_path","jwt","import_zod","consola","import_consola","import_promises","import_ofetch","consola"]}