From aac797cc940642f148f7a13eeaaa4fb704873b43 Mon Sep 17 00:00:00 2001 From: lilong Date: Mon, 18 May 2020 18:04:02 +0900 Subject: [PATCH 01/33] add "@babel/plugin-proposal-object-rest-spread" plugin --- .babelrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.babelrc b/.babelrc index 2fdda15..8fdaafd 100644 --- a/.babelrc +++ b/.babelrc @@ -1,4 +1,4 @@ { "presets": ["@babel/preset-env"], - "plugins": ["@babel/plugin-transform-runtime"] + "plugins": ["@babel/plugin-transform-runtime", "@babel/plugin-proposal-object-rest-spread"] } From 973a9de4e321aac8153a1fd407b8ada24cc890f9 Mon Sep 17 00:00:00 2001 From: lilong Date: Mon, 18 May 2020 18:17:11 +0900 Subject: [PATCH 02/33] support import from github repo --- .gitignore | 2 +- dist/paymail-client.cjs.js | 656 +++ dist/paymail-client.cjs.js.map | 1 + dist/paymail-client.esm.js | 644 +++ dist/paymail-client.esm.js.map | 1 + package-lock.json | 8318 ++++++++++++++++++++++++++++++++ 6 files changed, 9621 insertions(+), 1 deletion(-) create mode 100644 dist/paymail-client.cjs.js create mode 100644 dist/paymail-client.cjs.js.map create mode 100644 dist/paymail-client.esm.js create mode 100644 dist/paymail-client.esm.js.map create mode 100644 package-lock.json diff --git a/.gitignore b/.gitignore index 9ad5440..4ef2717 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -dist/ + *.log diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js new file mode 100644 index 0000000..7ae6581 --- /dev/null +++ b/dist/paymail-client.cjs.js @@ -0,0 +1,656 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var brfc = require('@moneybutton/brfc'); +var _defineProperty = _interopDefault(require('@babel/runtime/helpers/defineProperty')); +var AbortController = _interopDefault(require('abort-controller')); +var moment = _interopDefault(require('moment')); +var fetch = _interopDefault(require('isomorphic-fetch')); + +const CapabilityCodes = { + pki: 'pki', + paymentDestination: 'paymentDestination', + requestSenderValidation: brfc.brfc('bsvalias Payment Addressing (Payer Validation)', ['andy (nChain)'], ''), + verifyPublicKeyOwner: brfc.brfc('bsvalias public key verify (Verify Public Key Owner)', [], ''), + publicProfile: brfc.brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), + receiveTransaction: brfc.brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), + p2pPaymentDestination: brfc.brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') +}; + +// import { DnsOverHttps } from "./dns-over-https" +class DnsClient { + constructor(dns, doh) { + this.dns = dns; + this.doh = doh; + } + + async checkSrv(aDomain) { + return new Promise((resolve, reject) => { + this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { + try { + if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) { + return resolve({ + domain: aDomain, + port: 443, + isSecure: true + }); + } + + if (err) { + return reject(err); + } + + const { + name: domainFromDns, + port, + isSecure + } = result[0]; + resolve({ + domain: domainFromDns, + port, + isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure + }); + } catch (err) { + return reject(err); + } + }); + }).then(result => { + if (result.isSecure) { + return result; + } else { + return this.validateDnssec(aDomain); + } + }, err => { + console.error(err); + return err; + }); + } + + checkDomainIsSecure(srvResponseDomain, originalDomain) { + if (this.domainsAreEqual(srvResponseDomain, originalDomain)) { + return true; + } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) { + return true; + } else if (this.isHandcashDomain(originalDomain)) { + // tell rafa to fix handcash and we can remove the special case :) + return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain); + } else if (this.isHandcashInternalDomain(originalDomain)) { + return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain); + } else if (this.domainsAreEqual('localhost', srvResponseDomain)) { + return true; + } else if (this.isMoneyButtonDomain(srvResponseDomain)) { + return true; + } else { + return false; + } + } + + isMoneyButtonDomain(aDomain) { + return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com'); + } + + responseIsWwwSubdomain(srvResponseDomain, originalDomain) { + return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`); + } + + isHandcashDomain(aDomain) { + return this.domainsAreEqual('handcash.io', aDomain); + } + + isHandcashInternalDomain(aDomain) { + return this.domainsAreEqual('internal.handcash.io', aDomain); + } + + async validateDnssec(aDomain) { + const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); + + if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { + throw new Error(`Insecure domain.`); + } + + const data = dnsResponse.Answer[0].data.split(' '); + const port = data[2]; + const responseDomain = data[3]; + + if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) { + throw new Error(`Insecure domain.`); + } + + return { + port, + domain: responseDomain, + isSecure: dnsResponse.AD + }; + } + + domainsAreEqual(domain1, domain2) { + return domain1.replace(/\.$/, '') === domain2.replace(/\.$/, ''); + } + +} + +class DnsOverHttps { + constructor(fetch, config) { + this.fetch = fetch; + this.config = config; + } + + async resolveSrv(aDomain) { + const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); + const body = await response.json(); + return body; + } + + async queryBsvaliasDomain(aDomain) { + return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); + } + +} + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +class Http { + constructor(fetch) { + this.fetch = fetch; + } + + async get(url) { + return this._basicRequest(url); + } + + async postJson(url, body) { + return this._basicRequest(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(body) + }); + } + + async _basicRequest(url, options = {}) { + var controller = new AbortController(); + const timer = setTimeout(() => controller.abort(), 30000); + return this.fetch(url, _objectSpread({}, options, { + credentials: 'omit', + signal: controller.signal + })).then(result => { + clearTimeout(timer); + return result; + }); + } + +} + +class EndpointResolver { + constructor(dns = null, fetch) { + this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { + baseUrl: 'https://dns.google.com/resolve' + })); + this.http = new Http(fetch); + this._cache = {}; + } + + static create(dnsClient, fetch) { + const instance = new EndpointResolver(null, fetch); + instance.dnsClient = dnsClient; + return instance; + } + + async getIdentityUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.pki); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain); + return identityUrl; + } + + async getAddressUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain); + return addressUrl; + } + + async getVerifyUrlFor(aPaymail, aPubkey) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey); + return url; + } + + async getPublicProfileUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; + } + + async getSendTxUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; + } + + async getP2pPatmentDestinationUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; + } + + async domainHasCapability(aDomain, capability) { + const apiDescriptor = await this.getApiDescriptionFor(aDomain); + return !!apiDescriptor.capabilities[capability]; + } + + async getApiDescriptionFor(aDomain) { + if (this._cache[aDomain]) { + return this._cache[aDomain]; + } + + const { + domain, + port + } = await this.getWellKnownBaseUrl(aDomain); + const apiDescriptor = this.fetchApiDescriptor(domain, port); + this._cache[aDomain] = apiDescriptor; + return apiDescriptor; + } + + async fetchApiDescriptor(domain, port) { + const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https'; + const requestPort = port.toString() === '443' ? '' : `:${port}`; + const requestDomain = /^(.*?)\.?$/.exec(domain)[1]; // Get value from capture group + + if (!requestDomain) { + throw new Error(`Invalid domain: ${domain}`); + } + + const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`); + const apiDescriptor = await wellKnown.json(); + return apiDescriptor; + } + + async getWellKnownBaseUrl(aDomain) { + return this.dnsClient.checkSrv(aDomain); + } + + async ensureCapabilityFor(aDomain, aCapability) { + if (!(await this.domainHasCapability(aDomain, aCapability))) { + throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`); + } + } + +} + +class VerifiableMessage { + constructor(parts, bsv = null) { + if (bsv === null) { + bsv = require('bsv'); + bsv.Message = require('bsv/message'); + } + + this.bsv = bsv; + const concatenated = Buffer.from(parts.join('')); + this.message = new this.bsv.Message(concatenated); + } + + static forBasicAddressResolution({ + senderHandle, + amount, + dt, + purpose + }) { + if (dt.toISOString) { + dt = dt.toISOString(); + } + + return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]); + } + + sign(wifPrivateKey) { + return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)); + } + + verify(keyAddress, signature) { + return this.message.verify(keyAddress, signature); + } + +} + +class RequestBodyFactory { + constructor(clock) { + this.clock = clock; + } + + buildBodyToRequestAddress(senderInfo, privateKey = null) { + const { + senderHandle, + amount, + senderName, + purpose, + pubkey, + signature: providedSignature + } = senderInfo; + + if (!providedSignature && privateKey === null) { + throw new Error('Missing private key or signature'); + } + + let dt, signature; + + if (providedSignature) { + if (!senderInfo.dt) { + throw new Error('missing datetime for given signature'); + } + + dt = senderInfo.dt; + signature = providedSignature; + } else { + dt = this.clock.now(); + signature = VerifiableMessage.forBasicAddressResolution({ + senderHandle, + amount, + dt, + purpose + }).sign(privateKey); + } + + return { + senderHandle, + senderName, + purpose, + dt, + amount: amount || null, + pubkey, + signature + }; + } + + buildBodySendTx(hexTransaction, reference, metadata) { + return { + hex: hexTransaction, + metadata, + reference + }; + } + + buildBodyP2pPaymentDestination(satoshis) { + return { + satoshis + }; + } + +} + +class Clock { + now() { + return moment(); + } + +} + +class PaymailNotFound extends Error { + constructor(message, paymail) { + super(message); + this.paymail = paymail; + } + +} + +class BrowserDns { + constructor(fetch) { + this.doh = new DnsOverHttps(fetch, { + baseUrl: 'https://dns.google.com/resolve' + }); + } + + async resolveSrv(aDomain, aCallback) { + try { + const response = await this.doh.resolveSrv(aDomain); + + if (response.Status === 0 && response.Answer) { + const data = response.Answer.map(record => { + const [priority, weight, port, name] = record.data.split(' '); + return { + priority, + weight, + port, + name, + isSecure: response.AD + }; + }); + aCallback(null, data); + } else if (response.Status === 0 && !response.Answer) { + aCallback({ + code: 'ENODATA' + }); + } else { + aCallback(new Error('error during dns query')); + } + } catch (e) { + aCallback(e); + } + } + +} + +class PaymailClient { + constructor(dns = null, fetch2 = null, clock = null, bsv = null) { + if (fetch2 === null) { + fetch2 = fetch; + } + + if (dns === null) { + dns = new BrowserDns(fetch2); + } + + if (bsv === null) { + bsv = require('bsv'); + } + + this.bsv = bsv; + this.resolver = new EndpointResolver(dns, fetch2); + this.http = new Http(fetch2); + this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); + } + /** + * Uses pki flow to query for an identity key for a given paymail address. + * + * @param {String} paymail - a paymail address + */ + + + async getPublicKey(paymail) { + const identityUrl = await this.resolver.getIdentityUrlFor(paymail); + const response = await this.http.get(identityUrl); + const { + pubkey + } = await response.json(); + return pubkey; + } + /** + * Uses `Basic Address Resolution` flow to query for a payment for output for the + * given paymail address. + * + * @param {String} aPaymail - a paymail address + * @param {Object} senderInfo - Object containing sender info + * @param {String} senderInfo.senderHandle - Sender paymail address + * @param {String} senderInfo.amount - Optional. Required amount. + * @param {String} senderInfo.senderName - Optional. Sender name. + * @param {String} senderInfo.purpose - Optional. Purpose of the payment. + * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message. + * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification. + * @param {String} privateKey - Optional. private key to sign the request. + */ + + + async getOutputFor(aPaymail, senderInfo, privateKey = null) { + const addressUrl = await this.resolver.getAddressUrlFor(aPaymail); + const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)); + + if (!response.ok) { + throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail); + } + + const { + output + } = await response.json(); + return output; + } + /** + * Verify if the given public address belongs to the given + * paymail address. + * + * @param {String} pubkey - Public key to check. + * @param {String} paymail - a paymail address + */ + + + async verifyPubkeyOwner(pubkey, paymail) { + const url = await this.resolver.getVerifyUrlFor(paymail, pubkey); + const response = await this.http.get(url); + const body = await response.json(); + const { + match + } = body; + return match; + } + /** + * Verifies if a given signature is valid for a given message. It uses + * different strategies depending on the capabilities of the server + * and the parameters Given. The priority order is. + * - If paymail is not provided, then normal signature verification is performed. + * - Use provided key (and check that belongs to given paymail address). + * - Get a new pubkey for given paymail address using pki. + * - If there is no way to intereact with the owner of the domain to verify the public key it returns false. + * + * @param {Message} message - Message to verify + * @param {String} signature - Signature + * @param {String} paymail - Signature owner paymail + * @param {String} pubkey - Optional. Public key that validates the signature. + */ + + + async isValidSignature(message, signature, paymail = null, pubkey = null) { + if (paymail == null && pubkey === null) { + throw new Error('Must specify either paymail or pubkey'); + } + + let senderPublicKey; + + if (paymail) { + if (pubkey && (await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner))) { + if (await this.verifyPubkeyOwner(pubkey, paymail)) { + senderPublicKey = this.bsv.PublicKey.fromString(pubkey); + } else { + return false; + } + } else { + const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki); + + if (hasPki) { + const identityKey = await this.getPublicKey(paymail); + senderPublicKey = this.bsv.PublicKey.fromString(identityKey); + } else { + return false; + } + } + } + + const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey); + + try { + const verified = message.verify(senderKeyAddress.toString(), signature); + return verified; + } catch (err) { + return false; + } + } + /** + * Gets the public profile information using the "Public Profile" protocol. + * + * @param {String} paymail - a paymail address + * @param {String} s - the preferred size of the image + */ + + + async getPublicProfile(paymail) { + let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail); + const response = await this.http.get(publicProfileUrl); + + if (!response.ok) { + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); + } + + const { + avatar, + name + } = await response.json(); + return { + avatar, + name + }; + } + + async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { + if (!hexTransaction) { + throw new Error('transaction hex cannot be empty'); + } + + let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail); + const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)); + + if (!response.ok) { + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); + } + + return response.json(); + } + + async getP2pPaymentDestination(targetPaymail, satoshis) { + if (!satoshis) { + throw new Error('Amount in satohis needs to be specified'); + } + + let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail); + const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)); + + if (!response.ok) { + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); + } + + const body = await response.json(); + + if (!body.outputs) { + throw new Error('Server answered with a wrong format. Missing outputs'); + } + + return body; + } + +} + +exports.BrowserDns = BrowserDns; +exports.CapabilityCodes = CapabilityCodes; +exports.Clock = Clock; +exports.PaymailClient = PaymailClient; +exports.PaymailNotFound = PaymailNotFound; +exports.RequestBodyFactory = RequestBodyFactory; +exports.VerifiableMessage = VerifiableMessage; +//# sourceMappingURL=paymail-client.cjs.js.map diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map new file mode 100644 index 0000000..2ed38b9 --- /dev/null +++ b/dist/paymail-client.cjs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.replace(/\\.$/, '') === domain2.replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js new file mode 100644 index 0000000..edf864f --- /dev/null +++ b/dist/paymail-client.esm.js @@ -0,0 +1,644 @@ +import { brfc } from '@moneybutton/brfc'; +import _defineProperty from '@babel/runtime/helpers/defineProperty'; +import AbortController from 'abort-controller'; +import moment from 'moment'; +import fetch from 'isomorphic-fetch'; + +const CapabilityCodes = { + pki: 'pki', + paymentDestination: 'paymentDestination', + requestSenderValidation: brfc('bsvalias Payment Addressing (Payer Validation)', ['andy (nChain)'], ''), + verifyPublicKeyOwner: brfc('bsvalias public key verify (Verify Public Key Owner)', [], ''), + publicProfile: brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), + receiveTransaction: brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), + p2pPaymentDestination: brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') +}; + +// import { DnsOverHttps } from "./dns-over-https" +class DnsClient { + constructor(dns, doh) { + this.dns = dns; + this.doh = doh; + } + + async checkSrv(aDomain) { + return new Promise((resolve, reject) => { + this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { + try { + if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) { + return resolve({ + domain: aDomain, + port: 443, + isSecure: true + }); + } + + if (err) { + return reject(err); + } + + const { + name: domainFromDns, + port, + isSecure + } = result[0]; + resolve({ + domain: domainFromDns, + port, + isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure + }); + } catch (err) { + return reject(err); + } + }); + }).then(result => { + if (result.isSecure) { + return result; + } else { + return this.validateDnssec(aDomain); + } + }, err => { + console.error(err); + return err; + }); + } + + checkDomainIsSecure(srvResponseDomain, originalDomain) { + if (this.domainsAreEqual(srvResponseDomain, originalDomain)) { + return true; + } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) { + return true; + } else if (this.isHandcashDomain(originalDomain)) { + // tell rafa to fix handcash and we can remove the special case :) + return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain); + } else if (this.isHandcashInternalDomain(originalDomain)) { + return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain); + } else if (this.domainsAreEqual('localhost', srvResponseDomain)) { + return true; + } else if (this.isMoneyButtonDomain(srvResponseDomain)) { + return true; + } else { + return false; + } + } + + isMoneyButtonDomain(aDomain) { + return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com'); + } + + responseIsWwwSubdomain(srvResponseDomain, originalDomain) { + return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`); + } + + isHandcashDomain(aDomain) { + return this.domainsAreEqual('handcash.io', aDomain); + } + + isHandcashInternalDomain(aDomain) { + return this.domainsAreEqual('internal.handcash.io', aDomain); + } + + async validateDnssec(aDomain) { + const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); + + if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { + throw new Error(`Insecure domain.`); + } + + const data = dnsResponse.Answer[0].data.split(' '); + const port = data[2]; + const responseDomain = data[3]; + + if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) { + throw new Error(`Insecure domain.`); + } + + return { + port, + domain: responseDomain, + isSecure: dnsResponse.AD + }; + } + + domainsAreEqual(domain1, domain2) { + return domain1.replace(/\.$/, '') === domain2.replace(/\.$/, ''); + } + +} + +class DnsOverHttps { + constructor(fetch, config) { + this.fetch = fetch; + this.config = config; + } + + async resolveSrv(aDomain) { + const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); + const body = await response.json(); + return body; + } + + async queryBsvaliasDomain(aDomain) { + return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); + } + +} + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +class Http { + constructor(fetch) { + this.fetch = fetch; + } + + async get(url) { + return this._basicRequest(url); + } + + async postJson(url, body) { + return this._basicRequest(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(body) + }); + } + + async _basicRequest(url, options = {}) { + var controller = new AbortController(); + const timer = setTimeout(() => controller.abort(), 30000); + return this.fetch(url, _objectSpread({}, options, { + credentials: 'omit', + signal: controller.signal + })).then(result => { + clearTimeout(timer); + return result; + }); + } + +} + +class EndpointResolver { + constructor(dns = null, fetch) { + this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { + baseUrl: 'https://dns.google.com/resolve' + })); + this.http = new Http(fetch); + this._cache = {}; + } + + static create(dnsClient, fetch) { + const instance = new EndpointResolver(null, fetch); + instance.dnsClient = dnsClient; + return instance; + } + + async getIdentityUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.pki); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain); + return identityUrl; + } + + async getAddressUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain); + return addressUrl; + } + + async getVerifyUrlFor(aPaymail, aPubkey) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey); + return url; + } + + async getPublicProfileUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; + } + + async getSendTxUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; + } + + async getP2pPatmentDestinationUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; + } + + async domainHasCapability(aDomain, capability) { + const apiDescriptor = await this.getApiDescriptionFor(aDomain); + return !!apiDescriptor.capabilities[capability]; + } + + async getApiDescriptionFor(aDomain) { + if (this._cache[aDomain]) { + return this._cache[aDomain]; + } + + const { + domain, + port + } = await this.getWellKnownBaseUrl(aDomain); + const apiDescriptor = this.fetchApiDescriptor(domain, port); + this._cache[aDomain] = apiDescriptor; + return apiDescriptor; + } + + async fetchApiDescriptor(domain, port) { + const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https'; + const requestPort = port.toString() === '443' ? '' : `:${port}`; + const requestDomain = /^(.*?)\.?$/.exec(domain)[1]; // Get value from capture group + + if (!requestDomain) { + throw new Error(`Invalid domain: ${domain}`); + } + + const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`); + const apiDescriptor = await wellKnown.json(); + return apiDescriptor; + } + + async getWellKnownBaseUrl(aDomain) { + return this.dnsClient.checkSrv(aDomain); + } + + async ensureCapabilityFor(aDomain, aCapability) { + if (!(await this.domainHasCapability(aDomain, aCapability))) { + throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`); + } + } + +} + +class VerifiableMessage { + constructor(parts, bsv = null) { + if (bsv === null) { + bsv = require('bsv'); + bsv.Message = require('bsv/message'); + } + + this.bsv = bsv; + const concatenated = Buffer.from(parts.join('')); + this.message = new this.bsv.Message(concatenated); + } + + static forBasicAddressResolution({ + senderHandle, + amount, + dt, + purpose + }) { + if (dt.toISOString) { + dt = dt.toISOString(); + } + + return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]); + } + + sign(wifPrivateKey) { + return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)); + } + + verify(keyAddress, signature) { + return this.message.verify(keyAddress, signature); + } + +} + +class RequestBodyFactory { + constructor(clock) { + this.clock = clock; + } + + buildBodyToRequestAddress(senderInfo, privateKey = null) { + const { + senderHandle, + amount, + senderName, + purpose, + pubkey, + signature: providedSignature + } = senderInfo; + + if (!providedSignature && privateKey === null) { + throw new Error('Missing private key or signature'); + } + + let dt, signature; + + if (providedSignature) { + if (!senderInfo.dt) { + throw new Error('missing datetime for given signature'); + } + + dt = senderInfo.dt; + signature = providedSignature; + } else { + dt = this.clock.now(); + signature = VerifiableMessage.forBasicAddressResolution({ + senderHandle, + amount, + dt, + purpose + }).sign(privateKey); + } + + return { + senderHandle, + senderName, + purpose, + dt, + amount: amount || null, + pubkey, + signature + }; + } + + buildBodySendTx(hexTransaction, reference, metadata) { + return { + hex: hexTransaction, + metadata, + reference + }; + } + + buildBodyP2pPaymentDestination(satoshis) { + return { + satoshis + }; + } + +} + +class Clock { + now() { + return moment(); + } + +} + +class PaymailNotFound extends Error { + constructor(message, paymail) { + super(message); + this.paymail = paymail; + } + +} + +class BrowserDns { + constructor(fetch) { + this.doh = new DnsOverHttps(fetch, { + baseUrl: 'https://dns.google.com/resolve' + }); + } + + async resolveSrv(aDomain, aCallback) { + try { + const response = await this.doh.resolveSrv(aDomain); + + if (response.Status === 0 && response.Answer) { + const data = response.Answer.map(record => { + const [priority, weight, port, name] = record.data.split(' '); + return { + priority, + weight, + port, + name, + isSecure: response.AD + }; + }); + aCallback(null, data); + } else if (response.Status === 0 && !response.Answer) { + aCallback({ + code: 'ENODATA' + }); + } else { + aCallback(new Error('error during dns query')); + } + } catch (e) { + aCallback(e); + } + } + +} + +class PaymailClient { + constructor(dns = null, fetch2 = null, clock = null, bsv = null) { + if (fetch2 === null) { + fetch2 = fetch; + } + + if (dns === null) { + dns = new BrowserDns(fetch2); + } + + if (bsv === null) { + bsv = require('bsv'); + } + + this.bsv = bsv; + this.resolver = new EndpointResolver(dns, fetch2); + this.http = new Http(fetch2); + this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); + } + /** + * Uses pki flow to query for an identity key for a given paymail address. + * + * @param {String} paymail - a paymail address + */ + + + async getPublicKey(paymail) { + const identityUrl = await this.resolver.getIdentityUrlFor(paymail); + const response = await this.http.get(identityUrl); + const { + pubkey + } = await response.json(); + return pubkey; + } + /** + * Uses `Basic Address Resolution` flow to query for a payment for output for the + * given paymail address. + * + * @param {String} aPaymail - a paymail address + * @param {Object} senderInfo - Object containing sender info + * @param {String} senderInfo.senderHandle - Sender paymail address + * @param {String} senderInfo.amount - Optional. Required amount. + * @param {String} senderInfo.senderName - Optional. Sender name. + * @param {String} senderInfo.purpose - Optional. Purpose of the payment. + * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message. + * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification. + * @param {String} privateKey - Optional. private key to sign the request. + */ + + + async getOutputFor(aPaymail, senderInfo, privateKey = null) { + const addressUrl = await this.resolver.getAddressUrlFor(aPaymail); + const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)); + + if (!response.ok) { + throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail); + } + + const { + output + } = await response.json(); + return output; + } + /** + * Verify if the given public address belongs to the given + * paymail address. + * + * @param {String} pubkey - Public key to check. + * @param {String} paymail - a paymail address + */ + + + async verifyPubkeyOwner(pubkey, paymail) { + const url = await this.resolver.getVerifyUrlFor(paymail, pubkey); + const response = await this.http.get(url); + const body = await response.json(); + const { + match + } = body; + return match; + } + /** + * Verifies if a given signature is valid for a given message. It uses + * different strategies depending on the capabilities of the server + * and the parameters Given. The priority order is. + * - If paymail is not provided, then normal signature verification is performed. + * - Use provided key (and check that belongs to given paymail address). + * - Get a new pubkey for given paymail address using pki. + * - If there is no way to intereact with the owner of the domain to verify the public key it returns false. + * + * @param {Message} message - Message to verify + * @param {String} signature - Signature + * @param {String} paymail - Signature owner paymail + * @param {String} pubkey - Optional. Public key that validates the signature. + */ + + + async isValidSignature(message, signature, paymail = null, pubkey = null) { + if (paymail == null && pubkey === null) { + throw new Error('Must specify either paymail or pubkey'); + } + + let senderPublicKey; + + if (paymail) { + if (pubkey && (await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner))) { + if (await this.verifyPubkeyOwner(pubkey, paymail)) { + senderPublicKey = this.bsv.PublicKey.fromString(pubkey); + } else { + return false; + } + } else { + const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki); + + if (hasPki) { + const identityKey = await this.getPublicKey(paymail); + senderPublicKey = this.bsv.PublicKey.fromString(identityKey); + } else { + return false; + } + } + } + + const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey); + + try { + const verified = message.verify(senderKeyAddress.toString(), signature); + return verified; + } catch (err) { + return false; + } + } + /** + * Gets the public profile information using the "Public Profile" protocol. + * + * @param {String} paymail - a paymail address + * @param {String} s - the preferred size of the image + */ + + + async getPublicProfile(paymail) { + let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail); + const response = await this.http.get(publicProfileUrl); + + if (!response.ok) { + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); + } + + const { + avatar, + name + } = await response.json(); + return { + avatar, + name + }; + } + + async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { + if (!hexTransaction) { + throw new Error('transaction hex cannot be empty'); + } + + let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail); + const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)); + + if (!response.ok) { + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); + } + + return response.json(); + } + + async getP2pPaymentDestination(targetPaymail, satoshis) { + if (!satoshis) { + throw new Error('Amount in satohis needs to be specified'); + } + + let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail); + const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)); + + if (!response.ok) { + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); + } + + const body = await response.json(); + + if (!body.outputs) { + throw new Error('Server answered with a wrong format. Missing outputs'); + } + + return body; + } + +} + +export { BrowserDns, CapabilityCodes, Clock, PaymailClient, PaymailNotFound, RequestBodyFactory, VerifiableMessage }; +//# sourceMappingURL=paymail-client.esm.js.map diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map new file mode 100644 index 0000000..d84713e --- /dev/null +++ b/dist/paymail-client.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.replace(/\\.$/, '') === domain2.replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..95b20bb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8318 @@ +{ + "name": "@moneybutton/paymail-client", + "version": "0.38.3", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/cli": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.5.5.tgz", + "integrity": "sha512-UHI+7pHv/tk9g6WXQKYz+kmXTI77YtuY3vqC59KIqcoWEjsJJSG6rAxKaLsgj3LDyadsPrCB929gVOKM6Hui0w==", + "dev": true, + "requires": { + "chokidar": "^2.0.4", + "commander": "^2.8.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "lodash": "^4.17.13", + "mkdirp": "^0.5.1", + "output-file-sync": "^2.0.0", + "slash": "^2.0.0", + "source-map": "^0.5.0" + } + }, + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/core": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", + "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helpers": "^7.5.5", + "@babel/parser": "^7.5.5", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", + "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", + "dev": true, + "requires": { + "@babel/types": "^7.9.6", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", + "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", + "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", + "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-regex": "^7.8.3", + "regexpu-core": "^4.7.0" + } + }, + "@babel/helper-define-map": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", + "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/types": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", + "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-function-name": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", + "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.9.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", + "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", + "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", + "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-wrap-function": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-replace-supers": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", + "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" + } + }, + "@babel/helper-simple-access": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", + "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helpers": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", + "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" + } + }, + "@babel/highlight": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", + "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", + "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", + "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", + "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", + "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", + "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.8", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", + "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", + "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", + "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", + "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz", + "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-define-map": "^7.8.3", + "@babel/helper-function-name": "^7.9.5", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-split-export-declaration": "^7.8.3", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", + "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz", + "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", + "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", + "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", + "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", + "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", + "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", + "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz", + "integrity": "sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz", + "integrity": "sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz", + "integrity": "sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", + "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", + "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", + "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz", + "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", + "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", + "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", + "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz", + "integrity": "sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", + "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", + "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", + "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-regex": "^7.8.3" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", + "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", + "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", + "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/preset-env": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz", + "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.5.5", + "@babel/plugin-transform-classes": "^7.5.5", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.4", + "@babel/plugin-transform-function-name": "^7.4.4", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.5.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", + "@babel/plugin-transform-new-target": "^7.4.4", + "@babel/plugin-transform-object-super": "^7.5.5", + "@babel/plugin-transform-parameters": "^7.4.4", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.4.5", + "@babel/plugin-transform-reserved-words": "^7.2.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.4.4", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.4.4", + "@babel/types": "^7.5.5", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + } + }, + "@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", + "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.6", + "@babel/helper-function-name": "^7.9.5", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", + "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.5", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/core": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", + "dev": true, + "optional": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "slash": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/reporters": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "dev": true, + "optional": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.4.2", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@moneybutton/brfc": { + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/@moneybutton/brfc/-/brfc-0.38.3.tgz", + "integrity": "sha512-XR/mtB/PWVOU5MfVBMKPxmzc0Taz992u6nOigt9bkjcHHBgrAFxVi7sKRe8G1C17+5ExXVCHXRAanBFziqkjzA==", + "requires": { + "@babel/runtime": "7.5.5", + "isomorphic-fetch": "2.2.1", + "moment": "2.24.0" + } + }, + "@rollup/plugin-commonjs": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.1.tgz", + "integrity": "sha512-SaVUoaLDg3KnIXC5IBNIspr1APTYDzk05VaYcI6qz+0XX3ZlSCwAkfAhNSOxfd5GAdcm/63Noi4TowOY9MpcDg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.0", + "estree-walker": "^0.6.1", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.0.0.tgz", + "integrity": "sha512-+vOx2+WMBMFotYKM3yYeDGZxIvcQ7yO4g+SuKDFsjKaq8Lw3EPgfB6qNlp8Z/3ceDCEhHvC9/b+PgBGwDQGbzQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.0", + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.11.1" + } + }, + "@rollup/plugin-replace": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.0.tgz", + "integrity": "sha512-rzWAMqXAHC1w3eKpK6LxRqiF4f3qVFaa1sGii6Bp3rluKcwHNOpPt+hWRCmAH6SDEPtbPiLFf0pfNQyHs6Btlg==", + "dev": true, + "requires": { + "magic-string": "^0.25.2", + "rollup-pluginutils": "^2.6.0" + } + }, + "@rollup/pluginutils": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.10.tgz", + "integrity": "sha512-d44M7t+PjmMrASHbhgpSbVgtL6EFyX7J4mYxwQ/c5eoaE6N2VgCgEcWVzNnwycIloti+/MpwFr8qfw+nRw00sw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + } + } + }, + "@types/babel__core": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz", + "integrity": "sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", + "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.11.tgz", + "integrity": "sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.2.tgz", + "integrity": "sha512-rsZg7eL+Xcxsxk2XlBt9KcG8nOp9iYdKCOikY9x2RFJCyOdNj4MKPQty0e8oZr29vVAzKXr1BmR+kZauti3o1w==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/node": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.1.tgz", + "integrity": "sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA==", + "dev": true + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/yargs": { + "version": "13.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz", + "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", + "dev": true + }, + "abab": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", + "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "abstract-leveldown": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", + "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=", + "dev": true, + "requires": { + "xtend": "~3.0.0" + }, + "dependencies": { + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true + } + } + }, + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + }, + "aes-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" + }, + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + } + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "optional": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true, + "optional": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-eslint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz", + "integrity": "sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "^1.0.0" + } + }, + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", + "dev": true, + "requires": { + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base-x": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bdd-lazy-var": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/bdd-lazy-var/-/bdd-lazy-var-2.5.1.tgz", + "integrity": "sha512-SPF43iKRF2Q1QlzsTQKbNoCk/byBeuirEytFnxCpIgNrWGZigunboyZdh2mFjfWcKsl2jN38Ie7E+OVKzPonmg==", + "dev": true, + "requires": { + "jasmine-core": "^2.0.0 || ^3.0.0", + "jest": "^20.0.0 || ^22.0.0 || ^23.0.0 || ^24.0.0", + "mocha": "^4.0.0 || ^3.0.0 || ^2.3.0 || ^5.0.0 || ^6.0.0" + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", + "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=", + "dev": true, + "requires": { + "readable-stream": "~1.0.26" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", + "integrity": "sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8=", + "dev": true, + "requires": { + "level-filesystem": "^1.0.1", + "level-js": "^2.1.3", + "levelup": "^0.18.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.1.0.tgz", + "integrity": "sha512-VYxo7cDCeYUoBZ0ZCy4UyEUCP3smyBd4DRQM5nrFS1jJjPJjX7rP3oLRpPoWfkhQfyJ0I9ZbHbKafrFD/SGlrg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.2", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA==", + "dev": true + }, + "elliptic": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + } + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "browserslist": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", + "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001043", + "electron-to-chromium": "^1.3.413", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "^3.0.2" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "bsv": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bsv/-/bsv-1.5.0.tgz", + "integrity": "sha512-kW98WfxqNmEcNlfnOZQtorHdQNnQOEL0Nx2TASQgfbLexn9ZlLmtIewjmmMdETtnE9EZjn7cFOw2Bh7yiavwbg==", + "requires": { + "aes-js": "^3.1.2", + "bn.js": "=4.11.8", + "bs58": "=4.0.1", + "clone-deep": "^4.0.1", + "elliptic": "6.4.1", + "hash.js": "^1.1.7", + "inherits": "2.0.3", + "unorm": "1.4.1" + } + }, + "buffer-es6": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz", + "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + }, + "dependencies": { + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + } + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001061", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001061.tgz", + "integrity": "sha512-SMICCeiNvMZnyXpuoO+ot7FHpMVPlrsR+HmfByj6nY4xYDHXLqMTbgH7ecEkDNXWkH1vaip+ZS0D7VTXwM1KYQ==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "clone": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", + "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "dev": true, + "requires": { + "browserslist": "^4.8.5", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", + "dev": true + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "debug-log": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", + "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deferred-leveldown": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", + "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=", + "dev": true, + "requires": { + "abstract-leveldown": "~0.12.1" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "deglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz", + "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", + "dev": true, + "requires": { + "find-root": "^1.0.0", + "glob": "^7.0.5", + "ignore": "^3.0.9", + "pkg-config": "^1.1.0", + "run-parallel": "^1.1.2", + "uniq": "^1.0.1" + }, + "dependencies": { + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true + }, + "dotenv-cli": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-2.0.1.tgz", + "integrity": "sha512-RnjvnE+r27ni9j93w1ddMs9mQgxWlRozSfby7M4xVDJ5/DgLOFFAP92JrmXHkpn8dXCy+OObRx+w5wx0Dc3yww==", + "dev": true, + "requires": { + "cross-spawn": "^4.0.0", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.0.0", + "minimist": "^1.1.3" + }, + "dependencies": { + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + } + } + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecstatic": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", + "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", + "dev": true, + "requires": { + "he": "^1.1.1", + "mime": "^1.6.0", + "minimist": "^1.1.0", + "url-join": "^2.0.5" + } + }, + "electron-to-chromium": { + "version": "1.3.441", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.441.tgz", + "integrity": "sha512-leBfJwLuyGs1jEei2QioI+PjVMavmUIvPYidE8dCCYWLAq0uefhN3NYgDNb8WxD3uiUNnJ3ScMXg0upSlwySzQ==", + "dev": true + }, + "elliptic": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", + "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.4.0.tgz", + "integrity": "sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==", + "dev": true, + "requires": { + "ajv": "^6.5.0", + "babel-code-frame": "^6.26.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.2", + "imurmurhash": "^0.1.4", + "inquirer": "^5.2.0", + "is-resolvable": "^1.1.0", + "js-yaml": "^3.11.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^2.0.0", + "require-uncached": "^1.0.3", + "semver": "^5.5.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^4.0.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "eslint-config-standard": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", + "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", + "dev": true + }, + "eslint-config-standard-jsx": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz", + "integrity": "sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz", + "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + } + }, + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-es": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz", + "integrity": "sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==", + "dev": true, + "requires": { + "eslint-utils": "^1.4.2", + "regexpp": "^2.0.1" + } + }, + "eslint-plugin-import": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", + "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", + "dev": true, + "requires": { + "contains-path": "^0.1.0", + "debug": "^2.6.8", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.2.0", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0", + "resolve": "^1.6.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + } + } + }, + "eslint-plugin-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz", + "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==", + "dev": true, + "requires": { + "eslint-plugin-es": "^1.3.1", + "eslint-utils": "^1.3.1", + "ignore": "^4.0.2", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "semver": "^5.5.0" + } + }, + "eslint-plugin-promise": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", + "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", + "dev": true + }, + "eslint-plugin-react": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", + "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1", + "prop-types": "^15.6.2" + } + }, + "eslint-plugin-standard": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz", + "integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==", + "dev": true + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "espree": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", + "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "dev": true, + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + }, + "dependencies": { + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", + "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expect": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + } + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "follow-redirects": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz", + "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==", + "dev": true, + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "fwd-stream": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", + "integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=", + "dev": true, + "requires": { + "readable-stream": "~1.0.26-4" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true, + "optional": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "optional": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-server": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.11.1.tgz", + "integrity": "sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w==", + "dev": true, + "requires": { + "colors": "1.0.3", + "corser": "~2.0.0", + "ecstatic": "^3.0.0", + "http-proxy": "^1.8.1", + "opener": "~1.4.0", + "optimist": "0.6.x", + "portfinder": "^1.0.13", + "union": "~0.4.3" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "idb-wrapper": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", + "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "optional": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inquirer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "is": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", + "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-object": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", + "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-reference": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", + "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39" + } + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbuffer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", + "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "optional": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "istanbul-reports": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", + "dev": true, + "optional": true, + "requires": { + "html-escaper": "^2.0.0" + } + }, + "jasmine-core": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.5.0.tgz", + "integrity": "sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA==", + "dev": true, + "optional": true + }, + "jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", + "dev": true, + "optional": true, + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.9.0" + }, + "dependencies": { + "jest-cli": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", + "dev": true, + "optional": true, + "requires": { + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^13.3.0" + } + } + } + }, + "jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", + "dev": true, + "optional": true, + "requires": { + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.9.0", + "realpath-native": "^1.1.0" + } + }, + "jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-docblock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-environment-jsdom": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" + } + }, + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", + "dev": true + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.9.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", + "throat": "^4.0.0" + } + }, + "jest-leak-detector": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", + "dev": true, + "requires": { + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "dev": true + }, + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true + }, + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, + "jest-resolve-dependencies": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", + "dev": true, + "optional": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.9.0" + } + }, + "jest-runner": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^13.3.0" + } + }, + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true + }, + "jest-snapshot": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" + } + }, + "jest-watcher": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", + "dev": true, + "optional": true, + "requires": { + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.9.0", + "string-length": "^2.0.0" + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jsx-ast-utils": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", + "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "object.assign": "^4.1.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "optional": true + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "level-blobs": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", + "integrity": "sha1-mrm5e7mfHtv594o0M+Ie1WOGva8=", + "dev": true, + "requires": { + "level-peek": "1.0.6", + "once": "^1.3.0", + "readable-stream": "^1.0.26-4" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "level-filesystem": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", + "integrity": "sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M=", + "dev": true, + "requires": { + "concat-stream": "^1.4.4", + "errno": "^0.1.1", + "fwd-stream": "^1.0.4", + "level-blobs": "^0.1.7", + "level-peek": "^1.0.6", + "level-sublevel": "^5.2.0", + "octal": "^1.0.0", + "once": "^1.3.0", + "xtend": "^2.2.0" + } + }, + "level-fix-range": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", + "integrity": "sha1-vxW5Fa422EcMgh6IPd95zRZCCCg=", + "dev": true + }, + "level-hooks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", + "integrity": "sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM=", + "dev": true, + "requires": { + "string-range": "~1.2" + } + }, + "level-js": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", + "integrity": "sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=", + "dev": true, + "requires": { + "abstract-leveldown": "~0.12.0", + "idb-wrapper": "^1.5.0", + "isbuffer": "~0.0.0", + "ltgt": "^2.1.2", + "typedarray-to-buffer": "~1.0.0", + "xtend": "~2.1.2" + }, + "dependencies": { + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "level-peek": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", + "integrity": "sha1-vsUccqgu5GTTNkNMfIdsP8vM538=", + "dev": true, + "requires": { + "level-fix-range": "~1.0.2" + } + }, + "level-sublevel": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", + "integrity": "sha1-dEwSxy0ucr543eO5tc2E1iGRQTo=", + "dev": true, + "requires": { + "level-fix-range": "2.0", + "level-hooks": ">=4.4.0 <5", + "string-range": "~1.2.1", + "xtend": "~2.0.4" + }, + "dependencies": { + "level-fix-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", + "integrity": "sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug=", + "dev": true, + "requires": { + "clone": "~0.1.9" + } + }, + "object-keys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", + "integrity": "sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=", + "dev": true, + "requires": { + "foreach": "~2.0.1", + "indexof": "~0.0.1", + "is": "~0.2.6" + } + }, + "xtend": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", + "integrity": "sha1-XqZXptukRwacLlnFihE4ywxebO4=", + "dev": true, + "requires": { + "is-object": "~0.1.2", + "object-keys": "~0.2.0" + } + } + } + }, + "levelup": { + "version": "0.18.6", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", + "integrity": "sha1-5qAcsIlhbI7MApHCqb0/DETj5es=", + "dev": true, + "requires": { + "bl": "~0.8.1", + "deferred-leveldown": "~0.2.0", + "errno": "~0.1.1", + "prr": "~0.0.0", + "readable-stream": "~1.0.26", + "semver": "~2.3.1", + "xtend": "~3.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true + } + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", + "dev": true + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", + "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", + "dev": true, + "requires": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.4", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "dev": true, + "optional": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node-releases": { + "version": "1.1.55", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.55.tgz", + "integrity": "sha512-H3R3YR/8TjT5WPin/wOoHOUPHgvj8leuU/Keta/rwelEQN9pA/S2Dx8/se4pZ2LBxSd0nAGzsNzhqwa77v7F1w==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "optional": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "octal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", + "integrity": "sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "opener": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", + "dev": true + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "output-file-sync": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", + "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "is-plain-obj": "^1.1.0", + "mkdirp": "^0.5.1" + } + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "optional": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true, + "optional": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true, + "optional": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + } + }, + "pkg-config": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", + "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", + "dev": true, + "requires": { + "debug-log": "^1.0.0", + "find-root": "^1.0.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "optional": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "optional": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "optional": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "optional": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "optional": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "optional": true + } + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "portfinder": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", + "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process-es6": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz", + "integrity": "sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prompts": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", + "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", + "dev": true, + "optional": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.4" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" + }, + "regenerator-transform": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4", + "private": "^0.1.8" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", + "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "regexpu-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", + "dev": true + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "request-promise-core": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "request-promise-native": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", + "dev": true, + "requires": { + "request-promise-core": "1.1.3", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + } + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "optional": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true, + "optional": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rollup": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.29.0.tgz", + "integrity": "sha512-V63Iz0dSdI5qPPN5HmCN6OBRzBFhMqNWcvwgq863JtSCTU6Vdvqq6S2fYle/dSCyoPrBkIP3EIr1RVs3HTRqqg==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + }, + "dependencies": { + "acorn": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", + "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==", + "dev": true + } + } + }, + "rollup-plugin-babel": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.3.3.tgz", + "integrity": "sha512-tKzWOCmIJD/6aKNz0H1GMM+lW1q9KyFubbWzGiOG540zxPPifnEAHTZwjo0g991Y+DyOZcLqBgqOdqazYE5fkw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-node-builtins": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz", + "integrity": "sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k=", + "dev": true, + "requires": { + "browserify-fs": "^1.0.0", + "buffer-es6": "^4.9.2", + "crypto-browserify": "^3.11.0", + "process-es6": "^0.11.2" + } + }, + "rollup-plugin-node-globals": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz", + "integrity": "sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==", + "dev": true, + "requires": { + "acorn": "^5.7.3", + "buffer-es6": "^4.9.3", + "estree-walker": "^0.5.2", + "magic-string": "^0.22.5", + "process-es6": "^0.11.6", + "rollup-pluginutils": "^2.3.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, + "magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "requires": { + "vlq": "^0.2.2" + } + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, + "should": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.1.tgz", + "integrity": "sha512-l+/NwEMO+DcstsHEwPHRHzC9j4UOE3VQwJGcMWSsD/vqpqHbnQ+1iSHy64Ihmmjx1uiRPD9pFadTSc3MJtXAgw==", + "dev": true, + "requires": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "requires": { + "should-type": "^1.4.0" + } + }, + "should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "dev": true, + "requires": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "dev": true + }, + "should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "requires": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "optional": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "dev": true + }, + "standard": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/standard/-/standard-12.0.1.tgz", + "integrity": "sha512-UqdHjh87OG2gUrNCSM4QRLF5n9h3TFPwrCNyVlkqu31Hej0L/rc8hzKqVvkb2W3x0WMq7PzZdkLfEcBhVOR6lg==", + "dev": true, + "requires": { + "eslint": "~5.4.0", + "eslint-config-standard": "12.0.0", + "eslint-config-standard-jsx": "6.0.2", + "eslint-plugin-import": "~2.14.0", + "eslint-plugin-node": "~7.0.1", + "eslint-plugin-promise": "~4.0.0", + "eslint-plugin-react": "~7.11.1", + "eslint-plugin-standard": "~4.0.0", + "standard-engine": "~9.0.0" + } + }, + "standard-engine": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-9.0.0.tgz", + "integrity": "sha512-ZfNfCWZ2Xq67VNvKMPiVMKHnMdvxYzvZkf1AH8/cw2NLDBm5LRsxMqvEJpsjLI/dUosZ3Z1d6JlHDp5rAvvk2w==", + "dev": true, + "requires": { + "deglob": "^2.1.0", + "get-stdin": "^6.0.0", + "minimist": "^1.1.0", + "pkg-conf": "^2.0.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "optional": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string-range": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", + "integrity": "sha1-qJPtNH5yKZvIO++78qaSqNI51d0=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" + } + }, + "string.prototype.trimright": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "table": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", + "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", + "dev": true, + "requires": { + "ajv": "^6.0.1", + "ajv-keywords": "^3.0.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", + "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, + "union": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz", + "integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=", + "dev": true, + "requires": { + "qs": "~2.3.3" + }, + "dependencies": { + "qs": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", + "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=", + "dev": true + } + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "unorm": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", + "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url-join": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + } + } + } +} From 4d063a9e9b4384d3b15bf668b1c5cb4a93032b78 Mon Sep 17 00:00:00 2001 From: lilong Date: Mon, 18 May 2020 19:07:27 +0900 Subject: [PATCH 03/33] miss dt in README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 16cfb6d..b842e09 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ const preMadeSignature = VerifiableMessage.forBasicAddressResolution({ client.getOutputFor(somePaymailAddress, { senderHandle: 'sender@moneybutton.com', amount: 10000, // Amount in satoshis + dt: timestamp, senderName: 'Mr. Sender', purpose: 'Pay for your services.', pubkey: '03aa44757af33e7c9c9ceb1d5655741867ef8efea00bbc3f498424c91a16c85779', From fd75aadd2f21ed79e97f798ccba4ece0123b4e08 Mon Sep 17 00:00:00 2001 From: lilong Date: Mon, 18 May 2020 19:22:08 +0900 Subject: [PATCH 04/33] remove dist --- dist/paymail-client.cjs.js | 656 --------------------------------- dist/paymail-client.cjs.js.map | 1 - dist/paymail-client.esm.js | 644 -------------------------------- dist/paymail-client.esm.js.map | 1 - package.json | 1 + 5 files changed, 1 insertion(+), 1302 deletions(-) delete mode 100644 dist/paymail-client.cjs.js delete mode 100644 dist/paymail-client.cjs.js.map delete mode 100644 dist/paymail-client.esm.js delete mode 100644 dist/paymail-client.esm.js.map diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js deleted file mode 100644 index 7ae6581..0000000 --- a/dist/paymail-client.cjs.js +++ /dev/null @@ -1,656 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var brfc = require('@moneybutton/brfc'); -var _defineProperty = _interopDefault(require('@babel/runtime/helpers/defineProperty')); -var AbortController = _interopDefault(require('abort-controller')); -var moment = _interopDefault(require('moment')); -var fetch = _interopDefault(require('isomorphic-fetch')); - -const CapabilityCodes = { - pki: 'pki', - paymentDestination: 'paymentDestination', - requestSenderValidation: brfc.brfc('bsvalias Payment Addressing (Payer Validation)', ['andy (nChain)'], ''), - verifyPublicKeyOwner: brfc.brfc('bsvalias public key verify (Verify Public Key Owner)', [], ''), - publicProfile: brfc.brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), - receiveTransaction: brfc.brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), - p2pPaymentDestination: brfc.brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') -}; - -// import { DnsOverHttps } from "./dns-over-https" -class DnsClient { - constructor(dns, doh) { - this.dns = dns; - this.doh = doh; - } - - async checkSrv(aDomain) { - return new Promise((resolve, reject) => { - this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { - try { - if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) { - return resolve({ - domain: aDomain, - port: 443, - isSecure: true - }); - } - - if (err) { - return reject(err); - } - - const { - name: domainFromDns, - port, - isSecure - } = result[0]; - resolve({ - domain: domainFromDns, - port, - isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure - }); - } catch (err) { - return reject(err); - } - }); - }).then(result => { - if (result.isSecure) { - return result; - } else { - return this.validateDnssec(aDomain); - } - }, err => { - console.error(err); - return err; - }); - } - - checkDomainIsSecure(srvResponseDomain, originalDomain) { - if (this.domainsAreEqual(srvResponseDomain, originalDomain)) { - return true; - } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) { - return true; - } else if (this.isHandcashDomain(originalDomain)) { - // tell rafa to fix handcash and we can remove the special case :) - return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain); - } else if (this.isHandcashInternalDomain(originalDomain)) { - return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain); - } else if (this.domainsAreEqual('localhost', srvResponseDomain)) { - return true; - } else if (this.isMoneyButtonDomain(srvResponseDomain)) { - return true; - } else { - return false; - } - } - - isMoneyButtonDomain(aDomain) { - return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com'); - } - - responseIsWwwSubdomain(srvResponseDomain, originalDomain) { - return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`); - } - - isHandcashDomain(aDomain) { - return this.domainsAreEqual('handcash.io', aDomain); - } - - isHandcashInternalDomain(aDomain) { - return this.domainsAreEqual('internal.handcash.io', aDomain); - } - - async validateDnssec(aDomain) { - const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); - - if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { - throw new Error(`Insecure domain.`); - } - - const data = dnsResponse.Answer[0].data.split(' '); - const port = data[2]; - const responseDomain = data[3]; - - if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) { - throw new Error(`Insecure domain.`); - } - - return { - port, - domain: responseDomain, - isSecure: dnsResponse.AD - }; - } - - domainsAreEqual(domain1, domain2) { - return domain1.replace(/\.$/, '') === domain2.replace(/\.$/, ''); - } - -} - -class DnsOverHttps { - constructor(fetch, config) { - this.fetch = fetch; - this.config = config; - } - - async resolveSrv(aDomain) { - const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); - const body = await response.json(); - return body; - } - - async queryBsvaliasDomain(aDomain) { - return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); - } - -} - -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } - -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } - -class Http { - constructor(fetch) { - this.fetch = fetch; - } - - async get(url) { - return this._basicRequest(url); - } - - async postJson(url, body) { - return this._basicRequest(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(body) - }); - } - - async _basicRequest(url, options = {}) { - var controller = new AbortController(); - const timer = setTimeout(() => controller.abort(), 30000); - return this.fetch(url, _objectSpread({}, options, { - credentials: 'omit', - signal: controller.signal - })).then(result => { - clearTimeout(timer); - return result; - }); - } - -} - -class EndpointResolver { - constructor(dns = null, fetch) { - this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { - baseUrl: 'https://dns.google.com/resolve' - })); - this.http = new Http(fetch); - this._cache = {}; - } - - static create(dnsClient, fetch) { - const instance = new EndpointResolver(null, fetch); - instance.dnsClient = dnsClient; - return instance; - } - - async getIdentityUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.pki); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain); - return identityUrl; - } - - async getAddressUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain); - return addressUrl; - } - - async getVerifyUrlFor(aPaymail, aPubkey) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey); - return url; - } - - async getPublicProfileUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; - } - - async getSendTxUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; - } - - async getP2pPatmentDestinationUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; - } - - async domainHasCapability(aDomain, capability) { - const apiDescriptor = await this.getApiDescriptionFor(aDomain); - return !!apiDescriptor.capabilities[capability]; - } - - async getApiDescriptionFor(aDomain) { - if (this._cache[aDomain]) { - return this._cache[aDomain]; - } - - const { - domain, - port - } = await this.getWellKnownBaseUrl(aDomain); - const apiDescriptor = this.fetchApiDescriptor(domain, port); - this._cache[aDomain] = apiDescriptor; - return apiDescriptor; - } - - async fetchApiDescriptor(domain, port) { - const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https'; - const requestPort = port.toString() === '443' ? '' : `:${port}`; - const requestDomain = /^(.*?)\.?$/.exec(domain)[1]; // Get value from capture group - - if (!requestDomain) { - throw new Error(`Invalid domain: ${domain}`); - } - - const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`); - const apiDescriptor = await wellKnown.json(); - return apiDescriptor; - } - - async getWellKnownBaseUrl(aDomain) { - return this.dnsClient.checkSrv(aDomain); - } - - async ensureCapabilityFor(aDomain, aCapability) { - if (!(await this.domainHasCapability(aDomain, aCapability))) { - throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`); - } - } - -} - -class VerifiableMessage { - constructor(parts, bsv = null) { - if (bsv === null) { - bsv = require('bsv'); - bsv.Message = require('bsv/message'); - } - - this.bsv = bsv; - const concatenated = Buffer.from(parts.join('')); - this.message = new this.bsv.Message(concatenated); - } - - static forBasicAddressResolution({ - senderHandle, - amount, - dt, - purpose - }) { - if (dt.toISOString) { - dt = dt.toISOString(); - } - - return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]); - } - - sign(wifPrivateKey) { - return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)); - } - - verify(keyAddress, signature) { - return this.message.verify(keyAddress, signature); - } - -} - -class RequestBodyFactory { - constructor(clock) { - this.clock = clock; - } - - buildBodyToRequestAddress(senderInfo, privateKey = null) { - const { - senderHandle, - amount, - senderName, - purpose, - pubkey, - signature: providedSignature - } = senderInfo; - - if (!providedSignature && privateKey === null) { - throw new Error('Missing private key or signature'); - } - - let dt, signature; - - if (providedSignature) { - if (!senderInfo.dt) { - throw new Error('missing datetime for given signature'); - } - - dt = senderInfo.dt; - signature = providedSignature; - } else { - dt = this.clock.now(); - signature = VerifiableMessage.forBasicAddressResolution({ - senderHandle, - amount, - dt, - purpose - }).sign(privateKey); - } - - return { - senderHandle, - senderName, - purpose, - dt, - amount: amount || null, - pubkey, - signature - }; - } - - buildBodySendTx(hexTransaction, reference, metadata) { - return { - hex: hexTransaction, - metadata, - reference - }; - } - - buildBodyP2pPaymentDestination(satoshis) { - return { - satoshis - }; - } - -} - -class Clock { - now() { - return moment(); - } - -} - -class PaymailNotFound extends Error { - constructor(message, paymail) { - super(message); - this.paymail = paymail; - } - -} - -class BrowserDns { - constructor(fetch) { - this.doh = new DnsOverHttps(fetch, { - baseUrl: 'https://dns.google.com/resolve' - }); - } - - async resolveSrv(aDomain, aCallback) { - try { - const response = await this.doh.resolveSrv(aDomain); - - if (response.Status === 0 && response.Answer) { - const data = response.Answer.map(record => { - const [priority, weight, port, name] = record.data.split(' '); - return { - priority, - weight, - port, - name, - isSecure: response.AD - }; - }); - aCallback(null, data); - } else if (response.Status === 0 && !response.Answer) { - aCallback({ - code: 'ENODATA' - }); - } else { - aCallback(new Error('error during dns query')); - } - } catch (e) { - aCallback(e); - } - } - -} - -class PaymailClient { - constructor(dns = null, fetch2 = null, clock = null, bsv = null) { - if (fetch2 === null) { - fetch2 = fetch; - } - - if (dns === null) { - dns = new BrowserDns(fetch2); - } - - if (bsv === null) { - bsv = require('bsv'); - } - - this.bsv = bsv; - this.resolver = new EndpointResolver(dns, fetch2); - this.http = new Http(fetch2); - this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); - } - /** - * Uses pki flow to query for an identity key for a given paymail address. - * - * @param {String} paymail - a paymail address - */ - - - async getPublicKey(paymail) { - const identityUrl = await this.resolver.getIdentityUrlFor(paymail); - const response = await this.http.get(identityUrl); - const { - pubkey - } = await response.json(); - return pubkey; - } - /** - * Uses `Basic Address Resolution` flow to query for a payment for output for the - * given paymail address. - * - * @param {String} aPaymail - a paymail address - * @param {Object} senderInfo - Object containing sender info - * @param {String} senderInfo.senderHandle - Sender paymail address - * @param {String} senderInfo.amount - Optional. Required amount. - * @param {String} senderInfo.senderName - Optional. Sender name. - * @param {String} senderInfo.purpose - Optional. Purpose of the payment. - * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message. - * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification. - * @param {String} privateKey - Optional. private key to sign the request. - */ - - - async getOutputFor(aPaymail, senderInfo, privateKey = null) { - const addressUrl = await this.resolver.getAddressUrlFor(aPaymail); - const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)); - - if (!response.ok) { - throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail); - } - - const { - output - } = await response.json(); - return output; - } - /** - * Verify if the given public address belongs to the given - * paymail address. - * - * @param {String} pubkey - Public key to check. - * @param {String} paymail - a paymail address - */ - - - async verifyPubkeyOwner(pubkey, paymail) { - const url = await this.resolver.getVerifyUrlFor(paymail, pubkey); - const response = await this.http.get(url); - const body = await response.json(); - const { - match - } = body; - return match; - } - /** - * Verifies if a given signature is valid for a given message. It uses - * different strategies depending on the capabilities of the server - * and the parameters Given. The priority order is. - * - If paymail is not provided, then normal signature verification is performed. - * - Use provided key (and check that belongs to given paymail address). - * - Get a new pubkey for given paymail address using pki. - * - If there is no way to intereact with the owner of the domain to verify the public key it returns false. - * - * @param {Message} message - Message to verify - * @param {String} signature - Signature - * @param {String} paymail - Signature owner paymail - * @param {String} pubkey - Optional. Public key that validates the signature. - */ - - - async isValidSignature(message, signature, paymail = null, pubkey = null) { - if (paymail == null && pubkey === null) { - throw new Error('Must specify either paymail or pubkey'); - } - - let senderPublicKey; - - if (paymail) { - if (pubkey && (await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner))) { - if (await this.verifyPubkeyOwner(pubkey, paymail)) { - senderPublicKey = this.bsv.PublicKey.fromString(pubkey); - } else { - return false; - } - } else { - const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki); - - if (hasPki) { - const identityKey = await this.getPublicKey(paymail); - senderPublicKey = this.bsv.PublicKey.fromString(identityKey); - } else { - return false; - } - } - } - - const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey); - - try { - const verified = message.verify(senderKeyAddress.toString(), signature); - return verified; - } catch (err) { - return false; - } - } - /** - * Gets the public profile information using the "Public Profile" protocol. - * - * @param {String} paymail - a paymail address - * @param {String} s - the preferred size of the image - */ - - - async getPublicProfile(paymail) { - let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail); - const response = await this.http.get(publicProfileUrl); - - if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); - } - - const { - avatar, - name - } = await response.json(); - return { - avatar, - name - }; - } - - async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { - if (!hexTransaction) { - throw new Error('transaction hex cannot be empty'); - } - - let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail); - const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)); - - if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); - } - - return response.json(); - } - - async getP2pPaymentDestination(targetPaymail, satoshis) { - if (!satoshis) { - throw new Error('Amount in satohis needs to be specified'); - } - - let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail); - const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)); - - if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); - } - - const body = await response.json(); - - if (!body.outputs) { - throw new Error('Server answered with a wrong format. Missing outputs'); - } - - return body; - } - -} - -exports.BrowserDns = BrowserDns; -exports.CapabilityCodes = CapabilityCodes; -exports.Clock = Clock; -exports.PaymailClient = PaymailClient; -exports.PaymailNotFound = PaymailNotFound; -exports.RequestBodyFactory = RequestBodyFactory; -exports.VerifiableMessage = VerifiableMessage; -//# sourceMappingURL=paymail-client.cjs.js.map diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map deleted file mode 100644 index 2ed38b9..0000000 --- a/dist/paymail-client.cjs.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.replace(/\\.$/, '') === domain2.replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js deleted file mode 100644 index edf864f..0000000 --- a/dist/paymail-client.esm.js +++ /dev/null @@ -1,644 +0,0 @@ -import { brfc } from '@moneybutton/brfc'; -import _defineProperty from '@babel/runtime/helpers/defineProperty'; -import AbortController from 'abort-controller'; -import moment from 'moment'; -import fetch from 'isomorphic-fetch'; - -const CapabilityCodes = { - pki: 'pki', - paymentDestination: 'paymentDestination', - requestSenderValidation: brfc('bsvalias Payment Addressing (Payer Validation)', ['andy (nChain)'], ''), - verifyPublicKeyOwner: brfc('bsvalias public key verify (Verify Public Key Owner)', [], ''), - publicProfile: brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), - receiveTransaction: brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), - p2pPaymentDestination: brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') -}; - -// import { DnsOverHttps } from "./dns-over-https" -class DnsClient { - constructor(dns, doh) { - this.dns = dns; - this.doh = doh; - } - - async checkSrv(aDomain) { - return new Promise((resolve, reject) => { - this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { - try { - if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) { - return resolve({ - domain: aDomain, - port: 443, - isSecure: true - }); - } - - if (err) { - return reject(err); - } - - const { - name: domainFromDns, - port, - isSecure - } = result[0]; - resolve({ - domain: domainFromDns, - port, - isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure - }); - } catch (err) { - return reject(err); - } - }); - }).then(result => { - if (result.isSecure) { - return result; - } else { - return this.validateDnssec(aDomain); - } - }, err => { - console.error(err); - return err; - }); - } - - checkDomainIsSecure(srvResponseDomain, originalDomain) { - if (this.domainsAreEqual(srvResponseDomain, originalDomain)) { - return true; - } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) { - return true; - } else if (this.isHandcashDomain(originalDomain)) { - // tell rafa to fix handcash and we can remove the special case :) - return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain); - } else if (this.isHandcashInternalDomain(originalDomain)) { - return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain); - } else if (this.domainsAreEqual('localhost', srvResponseDomain)) { - return true; - } else if (this.isMoneyButtonDomain(srvResponseDomain)) { - return true; - } else { - return false; - } - } - - isMoneyButtonDomain(aDomain) { - return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com'); - } - - responseIsWwwSubdomain(srvResponseDomain, originalDomain) { - return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`); - } - - isHandcashDomain(aDomain) { - return this.domainsAreEqual('handcash.io', aDomain); - } - - isHandcashInternalDomain(aDomain) { - return this.domainsAreEqual('internal.handcash.io', aDomain); - } - - async validateDnssec(aDomain) { - const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); - - if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { - throw new Error(`Insecure domain.`); - } - - const data = dnsResponse.Answer[0].data.split(' '); - const port = data[2]; - const responseDomain = data[3]; - - if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) { - throw new Error(`Insecure domain.`); - } - - return { - port, - domain: responseDomain, - isSecure: dnsResponse.AD - }; - } - - domainsAreEqual(domain1, domain2) { - return domain1.replace(/\.$/, '') === domain2.replace(/\.$/, ''); - } - -} - -class DnsOverHttps { - constructor(fetch, config) { - this.fetch = fetch; - this.config = config; - } - - async resolveSrv(aDomain) { - const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); - const body = await response.json(); - return body; - } - - async queryBsvaliasDomain(aDomain) { - return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); - } - -} - -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } - -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } - -class Http { - constructor(fetch) { - this.fetch = fetch; - } - - async get(url) { - return this._basicRequest(url); - } - - async postJson(url, body) { - return this._basicRequest(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify(body) - }); - } - - async _basicRequest(url, options = {}) { - var controller = new AbortController(); - const timer = setTimeout(() => controller.abort(), 30000); - return this.fetch(url, _objectSpread({}, options, { - credentials: 'omit', - signal: controller.signal - })).then(result => { - clearTimeout(timer); - return result; - }); - } - -} - -class EndpointResolver { - constructor(dns = null, fetch) { - this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { - baseUrl: 'https://dns.google.com/resolve' - })); - this.http = new Http(fetch); - this._cache = {}; - } - - static create(dnsClient, fetch) { - const instance = new EndpointResolver(null, fetch); - instance.dnsClient = dnsClient; - return instance; - } - - async getIdentityUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.pki); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain); - return identityUrl; - } - - async getAddressUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain); - return addressUrl; - } - - async getVerifyUrlFor(aPaymail, aPubkey) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey); - return url; - } - - async getPublicProfileUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; - } - - async getSendTxUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; - } - - async getP2pPatmentDestinationUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; - } - - async domainHasCapability(aDomain, capability) { - const apiDescriptor = await this.getApiDescriptionFor(aDomain); - return !!apiDescriptor.capabilities[capability]; - } - - async getApiDescriptionFor(aDomain) { - if (this._cache[aDomain]) { - return this._cache[aDomain]; - } - - const { - domain, - port - } = await this.getWellKnownBaseUrl(aDomain); - const apiDescriptor = this.fetchApiDescriptor(domain, port); - this._cache[aDomain] = apiDescriptor; - return apiDescriptor; - } - - async fetchApiDescriptor(domain, port) { - const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https'; - const requestPort = port.toString() === '443' ? '' : `:${port}`; - const requestDomain = /^(.*?)\.?$/.exec(domain)[1]; // Get value from capture group - - if (!requestDomain) { - throw new Error(`Invalid domain: ${domain}`); - } - - const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`); - const apiDescriptor = await wellKnown.json(); - return apiDescriptor; - } - - async getWellKnownBaseUrl(aDomain) { - return this.dnsClient.checkSrv(aDomain); - } - - async ensureCapabilityFor(aDomain, aCapability) { - if (!(await this.domainHasCapability(aDomain, aCapability))) { - throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`); - } - } - -} - -class VerifiableMessage { - constructor(parts, bsv = null) { - if (bsv === null) { - bsv = require('bsv'); - bsv.Message = require('bsv/message'); - } - - this.bsv = bsv; - const concatenated = Buffer.from(parts.join('')); - this.message = new this.bsv.Message(concatenated); - } - - static forBasicAddressResolution({ - senderHandle, - amount, - dt, - purpose - }) { - if (dt.toISOString) { - dt = dt.toISOString(); - } - - return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]); - } - - sign(wifPrivateKey) { - return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)); - } - - verify(keyAddress, signature) { - return this.message.verify(keyAddress, signature); - } - -} - -class RequestBodyFactory { - constructor(clock) { - this.clock = clock; - } - - buildBodyToRequestAddress(senderInfo, privateKey = null) { - const { - senderHandle, - amount, - senderName, - purpose, - pubkey, - signature: providedSignature - } = senderInfo; - - if (!providedSignature && privateKey === null) { - throw new Error('Missing private key or signature'); - } - - let dt, signature; - - if (providedSignature) { - if (!senderInfo.dt) { - throw new Error('missing datetime for given signature'); - } - - dt = senderInfo.dt; - signature = providedSignature; - } else { - dt = this.clock.now(); - signature = VerifiableMessage.forBasicAddressResolution({ - senderHandle, - amount, - dt, - purpose - }).sign(privateKey); - } - - return { - senderHandle, - senderName, - purpose, - dt, - amount: amount || null, - pubkey, - signature - }; - } - - buildBodySendTx(hexTransaction, reference, metadata) { - return { - hex: hexTransaction, - metadata, - reference - }; - } - - buildBodyP2pPaymentDestination(satoshis) { - return { - satoshis - }; - } - -} - -class Clock { - now() { - return moment(); - } - -} - -class PaymailNotFound extends Error { - constructor(message, paymail) { - super(message); - this.paymail = paymail; - } - -} - -class BrowserDns { - constructor(fetch) { - this.doh = new DnsOverHttps(fetch, { - baseUrl: 'https://dns.google.com/resolve' - }); - } - - async resolveSrv(aDomain, aCallback) { - try { - const response = await this.doh.resolveSrv(aDomain); - - if (response.Status === 0 && response.Answer) { - const data = response.Answer.map(record => { - const [priority, weight, port, name] = record.data.split(' '); - return { - priority, - weight, - port, - name, - isSecure: response.AD - }; - }); - aCallback(null, data); - } else if (response.Status === 0 && !response.Answer) { - aCallback({ - code: 'ENODATA' - }); - } else { - aCallback(new Error('error during dns query')); - } - } catch (e) { - aCallback(e); - } - } - -} - -class PaymailClient { - constructor(dns = null, fetch2 = null, clock = null, bsv = null) { - if (fetch2 === null) { - fetch2 = fetch; - } - - if (dns === null) { - dns = new BrowserDns(fetch2); - } - - if (bsv === null) { - bsv = require('bsv'); - } - - this.bsv = bsv; - this.resolver = new EndpointResolver(dns, fetch2); - this.http = new Http(fetch2); - this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); - } - /** - * Uses pki flow to query for an identity key for a given paymail address. - * - * @param {String} paymail - a paymail address - */ - - - async getPublicKey(paymail) { - const identityUrl = await this.resolver.getIdentityUrlFor(paymail); - const response = await this.http.get(identityUrl); - const { - pubkey - } = await response.json(); - return pubkey; - } - /** - * Uses `Basic Address Resolution` flow to query for a payment for output for the - * given paymail address. - * - * @param {String} aPaymail - a paymail address - * @param {Object} senderInfo - Object containing sender info - * @param {String} senderInfo.senderHandle - Sender paymail address - * @param {String} senderInfo.amount - Optional. Required amount. - * @param {String} senderInfo.senderName - Optional. Sender name. - * @param {String} senderInfo.purpose - Optional. Purpose of the payment. - * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message. - * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification. - * @param {String} privateKey - Optional. private key to sign the request. - */ - - - async getOutputFor(aPaymail, senderInfo, privateKey = null) { - const addressUrl = await this.resolver.getAddressUrlFor(aPaymail); - const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)); - - if (!response.ok) { - throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail); - } - - const { - output - } = await response.json(); - return output; - } - /** - * Verify if the given public address belongs to the given - * paymail address. - * - * @param {String} pubkey - Public key to check. - * @param {String} paymail - a paymail address - */ - - - async verifyPubkeyOwner(pubkey, paymail) { - const url = await this.resolver.getVerifyUrlFor(paymail, pubkey); - const response = await this.http.get(url); - const body = await response.json(); - const { - match - } = body; - return match; - } - /** - * Verifies if a given signature is valid for a given message. It uses - * different strategies depending on the capabilities of the server - * and the parameters Given. The priority order is. - * - If paymail is not provided, then normal signature verification is performed. - * - Use provided key (and check that belongs to given paymail address). - * - Get a new pubkey for given paymail address using pki. - * - If there is no way to intereact with the owner of the domain to verify the public key it returns false. - * - * @param {Message} message - Message to verify - * @param {String} signature - Signature - * @param {String} paymail - Signature owner paymail - * @param {String} pubkey - Optional. Public key that validates the signature. - */ - - - async isValidSignature(message, signature, paymail = null, pubkey = null) { - if (paymail == null && pubkey === null) { - throw new Error('Must specify either paymail or pubkey'); - } - - let senderPublicKey; - - if (paymail) { - if (pubkey && (await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner))) { - if (await this.verifyPubkeyOwner(pubkey, paymail)) { - senderPublicKey = this.bsv.PublicKey.fromString(pubkey); - } else { - return false; - } - } else { - const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki); - - if (hasPki) { - const identityKey = await this.getPublicKey(paymail); - senderPublicKey = this.bsv.PublicKey.fromString(identityKey); - } else { - return false; - } - } - } - - const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey); - - try { - const verified = message.verify(senderKeyAddress.toString(), signature); - return verified; - } catch (err) { - return false; - } - } - /** - * Gets the public profile information using the "Public Profile" protocol. - * - * @param {String} paymail - a paymail address - * @param {String} s - the preferred size of the image - */ - - - async getPublicProfile(paymail) { - let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail); - const response = await this.http.get(publicProfileUrl); - - if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); - } - - const { - avatar, - name - } = await response.json(); - return { - avatar, - name - }; - } - - async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { - if (!hexTransaction) { - throw new Error('transaction hex cannot be empty'); - } - - let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail); - const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)); - - if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); - } - - return response.json(); - } - - async getP2pPaymentDestination(targetPaymail, satoshis) { - if (!satoshis) { - throw new Error('Amount in satohis needs to be specified'); - } - - let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail); - const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)); - - if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); - } - - const body = await response.json(); - - if (!body.outputs) { - throw new Error('Server answered with a wrong format. Missing outputs'); - } - - return body; - } - -} - -export { BrowserDns, CapabilityCodes, Clock, PaymailClient, PaymailNotFound, RequestBodyFactory, VerifiableMessage }; -//# sourceMappingURL=paymail-client.esm.js.map diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map deleted file mode 100644 index d84713e..0000000 --- a/dist/paymail-client.esm.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.replace(/\\.$/, '') === domain2.replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":";;;;;;MAEaA,eAAe,GAAG;AAC7BC,EAAAA,GAAG,EAAE,KADwB;AAE7BC,EAAAA,kBAAkB,EAAE,oBAFS;AAG7BC,EAAAA,uBAAuB,EAAEC,IAAI,CAC3B,gDAD2B,EAE3B,CAAC,eAAD,CAF2B,EAG3B,EAH2B,CAHA;AAQ7BC,EAAAA,oBAAoB,EAAED,IAAI,CACxB,sDADwB,EAExB,EAFwB,EAGxB,EAHwB,CARG;AAa7BE,EAAAA,aAAa,EAAEF,IAAI,CACjB,gCADiB,EAEjB,CAAC,gCAAD,CAFiB,EAGjB,GAHiB,CAbU;AAkB7BG,EAAAA,kBAAkB,EAAEH,IAAI,CACtB,sBADsB,EAEtB,CAAC,8BAAD,EAAiC,gCAAjC,EAAmE,0BAAnE,EAA+F,iBAA/F,CAFsB,EAGtB,KAHsB,CAlBK;AAuB7BI,EAAAA,qBAAqB,EAAEJ,IAAI,CACzB,gEADyB,EAEzB,CAAC,8BAAD,EAAiC,gCAAjC,EAAmE,0BAAnE,EAA+F,iBAA/F,CAFyB,EAGzB,KAHyB;AAvBE;;ACF/B;AAEA,MAAMK,SAAN,CAAgB;AACdC,EAAAA,WAAW,CAAEC,GAAF,EAAOC,GAAP,EAAY;AACrB,SAAKD,GAAL,GAAWA,GAAX;AACA,SAAKC,GAAL,GAAWA,GAAX;AACD;;AAED,QAAMC,QAAN,CAAgBC,OAAhB,EAAyB;AACvB,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,WAAKN,GAAL,CAASO,UAAT,CAAqB,kBAAiBJ,OAAQ,EAA9C,EAAiD,OAAOK,GAAP,EAAYC,MAAZ,KAAuB;AACtE,YAAI;AACF,cAAID,GAAG,KAAKA,GAAG,CAACE,IAAJ,KAAa,SAAb,IAA0BF,GAAG,CAACE,IAAJ,KAAa,WAA5C,CAAP,EAAiE;AAC/D,mBAAOL,OAAO,CAAC;AACbM,cAAAA,MAAM,EAAER,OADK;AAEbS,cAAAA,IAAI,EAAE,GAFO;AAGbC,cAAAA,QAAQ,EAAE;AAHG,aAAD,CAAd;AAKD;;AACD,cAAIL,GAAJ,EAAS;AACP,mBAAOF,MAAM,CAACE,GAAD,CAAb;AACD;;AAED,gBAAM;AAAEM,YAAAA,IAAI,EAAEC,aAAR;AAAuBH,YAAAA,IAAvB;AAA6BC,YAAAA;AAA7B,cAA0CJ,MAAM,CAAC,CAAD,CAAtD;AACAJ,UAAAA,OAAO,CAAC;AACNM,YAAAA,MAAM,EAAEI,aADF;AAENH,YAAAA,IAFM;AAGNC,YAAAA,QAAQ,EAAE,KAAKG,mBAAL,CAAyBD,aAAzB,EAAwCZ,OAAxC,KAAoDU;AAHxD,WAAD,CAAP;AAKD,SAlBD,CAkBE,OAAOL,GAAP,EAAY;AACZ,iBAAOF,MAAM,CAACE,GAAD,CAAb;AACD;AACF,OAtBD;AAuBD,KAxBM,EAwBJS,IAxBI,CAwBCR,MAAM,IAAI;AAChB,UAAIA,MAAM,CAACI,QAAX,EAAqB;AACnB,eAAOJ,MAAP;AACD,OAFD,MAEO;AACL,eAAO,KAAKS,cAAL,CAAoBf,OAApB,CAAP;AACD;AACF,KA9BM,EA8BHK,GAAD,IAAS;AACVW,MAAAA,OAAO,CAACC,KAAR,CAAcZ,GAAd;AACA,aAAOA,GAAP;AACD,KAjCM,CAAP;AAkCD;;AAEDQ,EAAAA,mBAAmB,CAAEK,iBAAF,EAAqBC,cAArB,EAAqC;AACtD,QAAI,KAAKC,eAAL,CAAqBF,iBAArB,EAAwCC,cAAxC,CAAJ,EAA6D;AAC3D,aAAO,IAAP;AACD,KAFD,MAEO,IAAI,KAAKE,sBAAL,CAA4BH,iBAA5B,EAA+CC,cAA/C,CAAJ,EAAoE;AACzE,aAAO,IAAP;AACD,KAFM,MAEA,IAAI,KAAKG,gBAAL,CAAsBH,cAAtB,CAAJ,EAA2C;AAAE;AAClD,aAAO,KAAKC,eAAL,CAAqB,2CAArB,EAAkEF,iBAAlE,KAAwF,KAAKE,eAAL,CAAqB,yCAArB,EAAgEF,iBAAhE,CAA/F;AACD,KAFM,MAEA,IAAI,KAAKK,wBAAL,CAA8BJ,cAA9B,CAAJ,EAAmD;AACxD,aAAO,KAAKC,eAAL,CAAqB,sCAArB,EAA6DF,iBAA7D,CAAP;AACD,KAFM,MAEA,IAAI,KAAKE,eAAL,CAAqB,WAArB,EAAkCF,iBAAlC,CAAJ,EAA0D;AAC/D,aAAO,IAAP;AACD,KAFM,MAEA,IAAI,KAAKM,mBAAL,CAAyBN,iBAAzB,CAAJ,EAAiD;AACtD,aAAO,IAAP;AACD,KAFM,MAEA;AACL,aAAO,KAAP;AACD;AACF;;AAEDM,EAAAA,mBAAmB,CAAExB,OAAF,EAAW;AAC5B,WAAO,KAAKoB,eAAL,CAAqBpB,OAArB,EAA8B,iBAA9B,KAAoD,KAAKoB,eAAL,CAAqBpB,OAArB,EAA8B,qBAA9B,CAA3D;AACD;;AAEDqB,EAAAA,sBAAsB,CAAEH,iBAAF,EAAqBC,cAArB,EAAqC;AACzD,WAAO,KAAKC,eAAL,CAAqBF,iBAArB,EAAyC,OAAMC,cAAe,EAA9D,CAAP;AACD;;AAEDG,EAAAA,gBAAgB,CAAEtB,OAAF,EAAW;AACzB,WAAO,KAAKoB,eAAL,CAAqB,aAArB,EAAoCpB,OAApC,CAAP;AACD;;AAEDuB,EAAAA,wBAAwB,CAAEvB,OAAF,EAAW;AACjC,WAAO,KAAKoB,eAAL,CAAqB,sBAArB,EAA6CpB,OAA7C,CAAP;AACD;;AAED,QAAMe,cAAN,CAAsBf,OAAtB,EAA+B;AAC7B,UAAMyB,WAAW,GAAG,MAAM,KAAK3B,GAAL,CAAS4B,mBAAT,CAA6B1B,OAA7B,CAA1B;;AACA,QAAIyB,WAAW,CAACE,MAAZ,KAAuB,CAAvB,IAA4B,CAACF,WAAW,CAACG,MAA7C,EAAqD;AACnD,YAAM,IAAIC,KAAJ,CAAW,kBAAX,CAAN;AACD;;AACD,UAAMC,IAAI,GAAGL,WAAW,CAACG,MAAZ,CAAmB,CAAnB,EAAsBE,IAAtB,CAA2BC,KAA3B,CAAiC,GAAjC,CAAb;AACA,UAAMtB,IAAI,GAAGqB,IAAI,CAAC,CAAD,CAAjB;AACA,UAAME,cAAc,GAAGF,IAAI,CAAC,CAAD,CAA3B;;AACA,QAAI,CAACL,WAAW,CAACQ,EAAb,IAAmB,CAAC,KAAKb,eAAL,CAAqBpB,OAArB,EAA8BgC,cAA9B,CAAxB,EAAuE;AACrE,YAAM,IAAIH,KAAJ,CAAW,kBAAX,CAAN;AACD;;AACD,WAAO;AACLpB,MAAAA,IADK;AAELD,MAAAA,MAAM,EAAEwB,cAFH;AAGLtB,MAAAA,QAAQ,EAAEe,WAAW,CAACQ;AAHjB,KAAP;AAKD;;AAEDb,EAAAA,eAAe,CAAEc,OAAF,EAAWC,OAAX,EAAoB;AACjC,WAAOD,OAAO,CAACE,OAAR,CAAgB,KAAhB,EAAuB,EAAvB,MAA+BD,OAAO,CAACC,OAAR,CAAgB,KAAhB,EAAuB,EAAvB,CAAtC;AACD;;AAjGa;;ACFhB,MAAMC,YAAN,CAAmB;AACjBzC,EAAAA,WAAW,CAAE0C,KAAF,EAASC,MAAT,EAAiB;AAC1B,SAAKD,KAAL,GAAaA,KAAb;AACA,SAAKC,MAAL,GAAcA,MAAd;AACD;;AAED,QAAMnC,UAAN,CAAkBJ,OAAlB,EAA2B;AACzB,UAAMwC,QAAQ,GAAG,MAAM,KAAKF,KAAL,CAAY,GAAE,KAAKC,MAAL,CAAYE,OAAQ,SAAQzC,OAAQ,gBAAlD,CAAvB;AACA,UAAM0C,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,WAAOD,IAAP;AACD;;AAED,QAAMhB,mBAAN,CAA2B1B,OAA3B,EAAoC;AAClC,WAAO,KAAKI,UAAL,CAAiB,kBAAiBJ,OAAQ,EAA1C,CAAP;AACD;;AAdgB;;;;;;ACEnB,MAAM4C,IAAN,CAAW;AACThD,EAAAA,WAAW,CAAE0C,KAAF,EAAS;AAClB,SAAKA,KAAL,GAAaA,KAAb;AACD;;AAED,QAAMO,GAAN,CAAWC,GAAX,EAAgB;AACd,WAAO,KAAKC,aAAL,CAAmBD,GAAnB,CAAP;AACD;;AAED,QAAME,QAAN,CAAgBF,GAAhB,EAAqBJ,IAArB,EAA2B;AACzB,WAAO,KAAKK,aAAL,CAAmBD,GAAnB,EAAwB;AAC7BG,MAAAA,MAAM,EAAE,MADqB;AAE7BC,MAAAA,OAAO,EAAE;AACP,wBAAgB;AADT,OAFoB;AAK7BR,MAAAA,IAAI,EAAES,IAAI,CAACC,SAAL,CAAeV,IAAf;AALuB,KAAxB,CAAP;AAOD;;AAED,QAAMK,aAAN,CAAqBD,GAArB,EAA0BO,OAAO,GAAG,EAApC,EAAwC;AACtC,QAAIC,UAAU,GAAG,IAAIC,eAAJ,EAAjB;AACA,UAAMC,KAAK,GAAGC,UAAU,CAAC,MAAMH,UAAU,CAACI,KAAX,EAAP,EAA2B,KAA3B,CAAxB;AACA,WAAO,KAAKpB,KAAL,CAAWQ,GAAX,oBACFO,OADE;AAELM,MAAAA,WAAW,EAAE,MAFR;AAGLC,MAAAA,MAAM,EAAEN,UAAU,CAACM;AAHd,QAIJ9C,IAJI,CAICR,MAAM,IAAI;AAChBuD,MAAAA,YAAY,CAACL,KAAD,CAAZ;AACA,aAAOlD,MAAP;AACD,KAPM,CAAP;AAQD;;AA9BQ;;ACGX,MAAMwD,gBAAN,CAAuB;AACrBlE,EAAAA,WAAW,CAAEC,GAAG,GAAG,IAAR,EAAcyC,KAAd,EAAqB;AAC9B,SAAKyB,SAAL,GAAiB,IAAIpE,SAAJ,CAAcE,GAAd,EAAmB,IAAIwC,YAAJ,CAAiBC,KAAjB,EAAwB;AAAEG,MAAAA,OAAO,EAAE;AAAX,KAAxB,CAAnB,CAAjB;AAEA,SAAKuB,IAAL,GAAY,IAAIpB,IAAJ,CAASN,KAAT,CAAZ;AACA,SAAK2B,MAAL,GAAc,EAAd;AACD;;AAED,SAAOC,MAAP,CAAeH,SAAf,EAA0BzB,KAA1B,EAAiC;AAC/B,UAAM6B,QAAQ,GAAG,IAAIL,gBAAJ,CAAqB,IAArB,EAA2BxB,KAA3B,CAAjB;AACA6B,IAAAA,QAAQ,CAACJ,SAAT,GAAqBA,SAArB;AACA,WAAOI,QAAP;AACD;;AAED,QAAMC,iBAAN,CAAyBC,QAAzB,EAAmC;AACjC,UAAM,CAACC,KAAD,EAAQ9D,MAAR,IAAkB6D,QAAQ,CAACtC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKwC,mBAAL,CAAyB/D,MAAzB,EAAiCtB,eAAe,CAACC,GAAjD,CAAN;AACA,UAAMqF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BjE,MAA1B,CAA5B;AACA,UAAMkE,WAAW,GAAGF,aAAa,CAACG,YAAd,CAA2BxF,GAA3B,CACjBiD,OADiB,CACT,SADS,EACEkC,KADF,EACSlC,OADT,CACiB,cADjB,EACiC5B,MADjC,CAApB;AAEA,WAAOkE,WAAP;AACD;;AAED,QAAME,gBAAN,CAAwBP,QAAxB,EAAkC;AAChC,UAAM,CAAEC,KAAF,EAAS9D,MAAT,IAAoB6D,QAAQ,CAACtC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKwC,mBAAL,CAAyB/D,MAAzB,EAAiCtB,eAAe,CAACE,kBAAjD,CAAN;AACA,UAAMoF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BjE,MAA1B,CAA5B;AACA,UAAMqE,UAAU,GAAGL,aAAa,CAACG,YAAd,CAA2BvF,kBAA3B,CAChBgD,OADgB,CACR,SADQ,EACGkC,KADH,EACUlC,OADV,CACkB,cADlB,EACkC5B,MADlC,CAAnB;AAEA,WAAOqE,UAAP;AACD;;AAED,QAAMC,eAAN,CAAuBT,QAAvB,EAAiCU,OAAjC,EAA0C;AACxC,UAAM,CAAET,KAAF,EAAS9D,MAAT,IAAoB6D,QAAQ,CAACtC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKwC,mBAAL,CAAyB/D,MAAzB,EAAiCtB,eAAe,CAACK,oBAAjD,CAAN;AACA,UAAMiF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BjE,MAA1B,CAA5B;AACA,UAAMsC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2BzF,eAAe,CAACK,oBAA3C,EACT6C,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC5B,MADzC,EACiD4B,OADjD,CACyD,UADzD,EACqE2C,OADrE,CAAZ;AAEA,WAAOjC,GAAP;AACD;;AAED,QAAMkC,sBAAN,CAA8BX,QAA9B,EAAwC;AACtC,UAAM,CAAEC,KAAF,EAAS9D,MAAT,IAAoB6D,QAAQ,CAACtC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKwC,mBAAL,CAAyB/D,MAAzB,EAAiCtB,eAAe,CAACM,aAAjD,CAAN;AACA,UAAMgF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BjE,MAA1B,CAA5B;AACA,UAAMsC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2BzF,eAAe,CAACM,aAA3C,EACT4C,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC5B,MADzC,CAAZ;AAEA,WAAOsC,GAAP;AACD;;AAED,QAAMmC,eAAN,CAAuBZ,QAAvB,EAAiC;AAC/B,UAAM,CAAEC,KAAF,EAAS9D,MAAT,IAAoB6D,QAAQ,CAACtC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKwC,mBAAL,CAAyB/D,MAAzB,EAAiCtB,eAAe,CAACO,kBAAjD,CAAN;AACA,UAAM+E,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BjE,MAA1B,CAA5B;AACA,UAAMsC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2BzF,eAAe,CAACO,kBAA3C,EACT2C,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC5B,MADzC,CAAZ;AAEA,WAAOsC,GAAP;AACD;;AAED,QAAMoC,8BAAN,CAAsCb,QAAtC,EAAgD;AAC9C,UAAM,CAAEC,KAAF,EAAS9D,MAAT,IAAoB6D,QAAQ,CAACtC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKwC,mBAAL,CAAyB/D,MAAzB,EAAiCtB,eAAe,CAACQ,qBAAjD,CAAN;AACA,UAAM8E,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BjE,MAA1B,CAA5B;AACA,UAAMsC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2BzF,eAAe,CAACQ,qBAA3C,EACT0C,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC5B,MADzC,CAAZ;AAEA,WAAOsC,GAAP;AACD;;AAED,QAAMqC,mBAAN,CAA2BnF,OAA3B,EAAoCoF,UAApC,EAAgD;AAC9C,UAAMZ,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BzE,OAA1B,CAA5B;AACA,WAAO,CAAC,CAACwE,aAAa,CAACG,YAAd,CAA2BS,UAA3B,CAAT;AACD;;AAED,QAAMX,oBAAN,CAA4BzE,OAA5B,EAAqC;AACnC,QAAI,KAAKiE,MAAL,CAAYjE,OAAZ,CAAJ,EAA0B;AACxB,aAAO,KAAKiE,MAAL,CAAYjE,OAAZ,CAAP;AACD;;AACD,UAAM;AAAEQ,MAAAA,MAAF;AAAUC,MAAAA;AAAV,QAAmB,MAAM,KAAK4E,mBAAL,CAAyBrF,OAAzB,CAA/B;AACA,UAAMwE,aAAa,GAAG,KAAKc,kBAAL,CAAwB9E,MAAxB,EAAgCC,IAAhC,CAAtB;AACA,SAAKwD,MAAL,CAAYjE,OAAZ,IAAuBwE,aAAvB;AACA,WAAOA,aAAP;AACD;;AAED,QAAMc,kBAAN,CAA0B9E,MAA1B,EAAkCC,IAAlC,EAAwC;AACtC,UAAM8E,QAAQ,GAAI/E,MAAM,KAAK,WAAX,IAA0BA,MAAM,KAAK,YAAtC,GAAsD,MAAtD,GAA+D,OAAhF;AACA,UAAMgF,WAAW,GAAG/E,IAAI,CAACgF,QAAL,OAAoB,KAApB,GAA4B,EAA5B,GAAkC,IAAGhF,IAAK,EAA9D;AACA,UAAMiF,aAAa,GAAG,aAAaC,IAAb,CAAkBnF,MAAlB,EAA0B,CAA1B,CAAtB,CAHsC;;AAItC,QAAI,CAACkF,aAAL,EAAoB;AAClB,YAAM,IAAI7D,KAAJ,CAAW,mBAAkBrB,MAAO,EAApC,CAAN;AACD;;AACD,UAAMoF,SAAS,GAAG,MAAM,KAAK5B,IAAL,CAAUnB,GAAV,CAAe,GAAE0C,QAAS,MAAKG,aAAc,GAAEF,WAAY,uBAA3D,CAAxB;AACA,UAAMhB,aAAa,GAAG,MAAMoB,SAAS,CAACjD,IAAV,EAA5B;AACA,WAAO6B,aAAP;AACD;;AAED,QAAMa,mBAAN,CAA2BrF,OAA3B,EAAoC;AAClC,WAAO,KAAK+D,SAAL,CAAehE,QAAf,CAAwBC,OAAxB,CAAP;AACD;;AAED,QAAMuE,mBAAN,CAA2BvE,OAA3B,EAAoC6F,WAApC,EAAiD;AAC/C,QAAI,EAAC,MAAM,KAAKV,mBAAL,CAAyBnF,OAAzB,EAAkC6F,WAAlC,CAAP,CAAJ,EAA2D;AACzD,YAAM,IAAIhE,KAAJ,CAAW,uBAAsBgE,WAAY,UAAS7F,OAAQ,GAA9D,CAAN;AACD;AACF;;AAvGoB;;ACLvB,MAAM8F,iBAAN,CAAwB;AACtBlG,EAAAA,WAAW,CAAEmG,KAAF,EAASC,GAAG,GAAG,IAAf,EAAqB;AAC9B,QAAIA,GAAG,KAAK,IAAZ,EAAkB;AAChBA,MAAAA,GAAG,GAAGC,OAAO,CAAC,KAAD,CAAb;AACAD,MAAAA,GAAG,CAACE,OAAJ,GAAcD,OAAO,CAAC,aAAD,CAArB;AACD;;AACD,SAAKD,GAAL,GAAWA,GAAX;AACA,UAAMG,YAAY,GAAGC,MAAM,CAACC,IAAP,CAAYN,KAAK,CAACO,IAAN,CAAW,EAAX,CAAZ,CAArB;AACA,SAAKC,OAAL,GAAe,IAAI,KAAKP,GAAL,CAASE,OAAb,CAAqBC,YAArB,CAAf;AACD;;AAED,SAAOK,yBAAP,CAAkC;AAChCC,IAAAA,YADgC;AAEhCC,IAAAA,MAFgC;AAGhCC,IAAAA,EAHgC;AAIhCC,IAAAA;AAJgC,GAAlC,EAKG;AACD,QAAID,EAAE,CAACE,WAAP,EAAoB;AAClBF,MAAAA,EAAE,GAAGA,EAAE,CAACE,WAAH,EAAL;AACD;;AAED,WAAO,IAAIf,iBAAJ,CAAsB,CAC3BW,YAD2B,EAE3BC,MAAM,IAAI,GAFiB,EAG3BC,EAH2B,EAI3BC,OAJ2B,CAAtB,CAAP;AAMD;;AAEDE,EAAAA,IAAI,CAAEC,aAAF,EAAiB;AACnB,WAAO,KAAKR,OAAL,CAAaO,IAAb,CAAkB,KAAKd,GAAL,CAASgB,UAAT,CAAoBC,OAApB,CAA4BF,aAA5B,CAAlB,CAAP;AACD;;AAEDG,EAAAA,MAAM,CAAEC,UAAF,EAAcC,SAAd,EAAyB;AAC7B,WAAO,KAAKb,OAAL,CAAaW,MAAb,CAAoBC,UAApB,EAAgCC,SAAhC,CAAP;AACD;;AAnCqB;;ACExB,MAAMC,kBAAN,CAAyB;AACvBzH,EAAAA,WAAW,CAAE0H,KAAF,EAAS;AAClB,SAAKA,KAAL,GAAaA,KAAb;AACD;;AACDC,EAAAA,yBAAyB,CAAEC,UAAF,EAAcC,UAAU,GAAG,IAA3B,EAAiC;AACxD,UAAM;AACJhB,MAAAA,YADI;AAEJC,MAAAA,MAFI;AAGJgB,MAAAA,UAHI;AAIJd,MAAAA,OAJI;AAKJe,MAAAA,MALI;AAMJP,MAAAA,SAAS,EAAEQ;AANP,QAOFJ,UAPJ;;AASA,QAAI,CAACI,iBAAD,IAAsBH,UAAU,KAAK,IAAzC,EAA+C;AAC7C,YAAM,IAAI5F,KAAJ,CAAU,kCAAV,CAAN;AACD;;AAED,QAAI8E,EAAJ,EAAQS,SAAR;;AACA,QAAIQ,iBAAJ,EAAuB;AACrB,UAAI,CAACJ,UAAU,CAACb,EAAhB,EAAoB;AAClB,cAAM,IAAI9E,KAAJ,CAAU,sCAAV,CAAN;AACD;;AACD8E,MAAAA,EAAE,GAAGa,UAAU,CAACb,EAAhB;AACAS,MAAAA,SAAS,GAAGQ,iBAAZ;AACD,KAND,MAMO;AACLjB,MAAAA,EAAE,GAAG,KAAKW,KAAL,CAAWO,GAAX,EAAL;AACAT,MAAAA,SAAS,GAAGtB,iBAAiB,CAACU,yBAAlB,CAA4C;AACtDC,QAAAA,YADsD;AAEtDC,QAAAA,MAFsD;AAGtDC,QAAAA,EAHsD;AAItDC,QAAAA;AAJsD,OAA5C,EAKTE,IALS,CAKJW,UALI,CAAZ;AAMD;;AAED,WAAO;AACLhB,MAAAA,YADK;AAELiB,MAAAA,UAFK;AAGLd,MAAAA,OAHK;AAILD,MAAAA,EAJK;AAKLD,MAAAA,MAAM,EAAEA,MAAM,IAAI,IALb;AAMLiB,MAAAA,MANK;AAOLP,MAAAA;AAPK,KAAP;AASD;;AAEDU,EAAAA,eAAe,CAAEC,cAAF,EAAkBC,SAAlB,EAA6BC,QAA7B,EAAuC;AACpD,WAAO;AAAEC,MAAAA,GAAG,EAAEH,cAAP;AAAuBE,MAAAA,QAAvB;AAAiCD,MAAAA;AAAjC,KAAP;AACD;;AAEDG,EAAAA,8BAA8B,CAAEC,QAAF,EAAY;AACxC,WAAO;AAAEA,MAAAA;AAAF,KAAP;AACD;;AApDsB;;ACAzB,MAAMC,KAAN,CAAY;AACVR,EAAAA,GAAG,GAAI;AACL,WAAOS,MAAM,EAAb;AACD;;AAHS;;ACFZ,MAAMC,eAAN,SAA8B1G,KAA9B,CAAoC;AAClCjC,EAAAA,WAAW,CAAE2G,OAAF,EAAWiC,OAAX,EAAoB;AAC7B,UAAMjC,OAAN;AACA,SAAKiC,OAAL,GAAeA,OAAf;AACD;;AAJiC;;ACEpC,MAAMC,UAAN,CAAiB;AACf7I,EAAAA,WAAW,CAAE0C,KAAF,EAAS;AAClB,SAAKxC,GAAL,GAAW,IAAIuC,YAAJ,CAAiBC,KAAjB,EAAwB;AAAEG,MAAAA,OAAO,EAAE;AAAX,KAAxB,CAAX;AACD;;AAED,QAAMrC,UAAN,CAAkBJ,OAAlB,EAA2B0I,SAA3B,EAAsC;AACpC,QAAI;AACF,YAAMlG,QAAQ,GAAG,MAAM,KAAK1C,GAAL,CAASM,UAAT,CAAoBJ,OAApB,CAAvB;;AACA,UAAIwC,QAAQ,CAACb,MAAT,KAAoB,CAApB,IAAyBa,QAAQ,CAACZ,MAAtC,EAA8C;AAC5C,cAAME,IAAI,GAAGU,QAAQ,CAACZ,MAAT,CAAgB+G,GAAhB,CAAoBC,MAAM,IAAI;AACzC,gBAAM,CAAEC,QAAF,EAAYC,MAAZ,EAAoBrI,IAApB,EAA0BE,IAA1B,IAAmCiI,MAAM,CAAC9G,IAAP,CAAYC,KAAZ,CAAkB,GAAlB,CAAzC;AACA,iBAAO;AACL8G,YAAAA,QADK;AAELC,YAAAA,MAFK;AAGLrI,YAAAA,IAHK;AAILE,YAAAA,IAJK;AAKLD,YAAAA,QAAQ,EAAE8B,QAAQ,CAACP;AALd,WAAP;AAOD,SATY,CAAb;AAUAyG,QAAAA,SAAS,CAAC,IAAD,EAAO5G,IAAP,CAAT;AACD,OAZD,MAYO,IAAIU,QAAQ,CAACb,MAAT,KAAoB,CAApB,IAAyB,CAACa,QAAQ,CAACZ,MAAvC,EAA+C;AACpD8G,QAAAA,SAAS,CAAC;AAAEnI,UAAAA,IAAI,EAAE;AAAR,SAAD,CAAT;AACD,OAFM,MAEA;AACLmI,QAAAA,SAAS,CAAC,IAAI7G,KAAJ,CAAU,wBAAV,CAAD,CAAT;AACD;AACF,KAnBD,CAmBE,OAAOkH,CAAP,EAAU;AACVL,MAAAA,SAAS,CAACK,CAAD,CAAT;AACD;AACF;;AA5Bc;;ACOjB,MAAMC,aAAN,CAAoB;AAClBpJ,EAAAA,WAAW,CAAEC,GAAG,GAAG,IAAR,EAAcoJ,MAAM,GAAG,IAAvB,EAA6B3B,KAAK,GAAG,IAArC,EAA2CtB,GAAG,GAAG,IAAjD,EAAuD;AAChE,QAAIiD,MAAM,KAAK,IAAf,EAAqB;AACnBA,MAAAA,MAAM,GAAG3G,KAAT;AACD;;AACD,QAAIzC,GAAG,KAAK,IAAZ,EAAkB;AAChBA,MAAAA,GAAG,GAAG,IAAI4I,UAAJ,CAAeQ,MAAf,CAAN;AACD;;AACD,QAAIjD,GAAG,KAAK,IAAZ,EAAkB;AAChBA,MAAAA,GAAG,GAAGC,OAAO,CAAC,KAAD,CAAb;AACD;;AACD,SAAKD,GAAL,GAAWA,GAAX;AACA,SAAKkD,QAAL,GAAgB,IAAIpF,gBAAJ,CAAqBjE,GAArB,EAA0BoJ,MAA1B,CAAhB;AACA,SAAKjF,IAAL,GAAY,IAAIpB,IAAJ,CAASqG,MAAT,CAAZ;AACA,SAAKE,kBAAL,GAA0B,IAAI9B,kBAAJ,CAAuBC,KAAK,KAAK,IAAV,GAAiBA,KAAjB,GAAyB,IAAIe,KAAJ,EAAhD,CAA1B;AACD;AAED;;;;;;;AAKA,QAAMe,YAAN,CAAoBZ,OAApB,EAA6B;AAC3B,UAAM9D,WAAW,GAAG,MAAM,KAAKwE,QAAL,CAAc9E,iBAAd,CAAgCoE,OAAhC,CAA1B;AACA,UAAMhG,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAc6B,WAAd,CAAvB;AACA,UAAM;AAAEiD,MAAAA;AAAF,QAAa,MAAMnF,QAAQ,CAACG,IAAT,EAAzB;AACA,WAAOgF,MAAP;AACD;AAED;;;;;;;;;;;;;;;;AAcA,QAAM0B,YAAN,CAAoBhF,QAApB,EAA8BmD,UAA9B,EAA0CC,UAAU,GAAG,IAAvD,EAA6D;AAC3D,UAAM5C,UAAU,GAAG,MAAM,KAAKqE,QAAL,CAActE,gBAAd,CAA+BP,QAA/B,CAAzB;AACA,UAAM7B,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrB6B,UADqB,EAErB,KAAKsE,kBAAL,CAAwB5B,yBAAxB,CAAkDC,UAAlD,EAA8DC,UAA9D,CAFqB,CAAvB;;AAIA,QAAI,CAACjF,QAAQ,CAAC8G,EAAd,EAAkB;AAChB,YAAM,IAAIf,eAAJ,CAAqB,sBAAqBlE,QAAS,EAAnD,EAAsDA,QAAtD,CAAN;AACD;;AACD,UAAM;AAAEkF,MAAAA;AAAF,QAAa,MAAM/G,QAAQ,CAACG,IAAT,EAAzB;AACA,WAAO4G,MAAP;AACD;AAED;;;;;;;;;AAOA,QAAMC,iBAAN,CAAyB7B,MAAzB,EAAiCa,OAAjC,EAA0C;AACxC,UAAM1F,GAAG,GAAG,MAAM,KAAKoG,QAAL,CAAcpE,eAAd,CAA8B0D,OAA9B,EAAuCb,MAAvC,CAAlB;AACA,UAAMnF,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAcC,GAAd,CAAvB;AACA,UAAMJ,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,UAAM;AAAE8G,MAAAA;AAAF,QAAY/G,IAAlB;AACA,WAAO+G,KAAP;AACD;AAED;;;;;;;;;;;;;;;;AAcA,QAAMC,gBAAN,CAAwBnD,OAAxB,EAAiCa,SAAjC,EAA4CoB,OAAO,GAAG,IAAtD,EAA4Db,MAAM,GAAG,IAArE,EAA2E;AACzE,QAAIa,OAAO,IAAI,IAAX,IAAmBb,MAAM,KAAK,IAAlC,EAAwC;AACtC,YAAM,IAAI9F,KAAJ,CAAU,uCAAV,CAAN;AACD;;AACD,QAAI8H,eAAJ;;AACA,QAAInB,OAAJ,EAAa;AACX,UAAIb,MAAM,KAAI,MAAM,KAAKuB,QAAL,CAAc/D,mBAAd,CAAkCqD,OAAO,CAACzG,KAAR,CAAc,GAAd,EAAmB,CAAnB,CAAlC,EAAyD7C,eAAe,CAACK,oBAAzE,CAAV,CAAV,EAAoH;AAClH,YAAI,MAAM,KAAKiK,iBAAL,CAAuB7B,MAAvB,EAA+Ba,OAA/B,CAAV,EAAmD;AACjDmB,UAAAA,eAAe,GAAG,KAAK3D,GAAL,CAAS4D,SAAT,CAAmBC,UAAnB,CAA8BlC,MAA9B,CAAlB;AACD,SAFD,MAEO;AACL,iBAAO,KAAP;AACD;AACF,OAND,MAMO;AACL,cAAMmC,MAAM,GAAG,MAAM,KAAKZ,QAAL,CAAc/D,mBAAd,CAAkCqD,OAAO,CAACzG,KAAR,CAAc,GAAd,EAAmB,CAAnB,CAAlC,EAAyD7C,eAAe,CAACC,GAAzE,CAArB;;AACA,YAAI2K,MAAJ,EAAY;AACV,gBAAMC,WAAW,GAAG,MAAM,KAAKX,YAAL,CAAkBZ,OAAlB,CAA1B;AACAmB,UAAAA,eAAe,GAAG,KAAK3D,GAAL,CAAS4D,SAAT,CAAmBC,UAAnB,CAA8BE,WAA9B,CAAlB;AACD,SAHD,MAGO;AACL,iBAAO,KAAP;AACD;AACF;AACF;;AAED,UAAMC,gBAAgB,GAAG,KAAKhE,GAAL,CAASiE,OAAT,CAAiBC,aAAjB,CAA+BP,eAAe,IAAIhC,MAAlD,CAAzB;;AACA,QAAI;AACF,YAAMwC,QAAQ,GAAG5D,OAAO,CAACW,MAAR,CAAe8C,gBAAgB,CAACvE,QAAjB,EAAf,EAA4C2B,SAA5C,CAAjB;AACA,aAAO+C,QAAP;AACD,KAHD,CAGE,OAAO9J,GAAP,EAAY;AACZ,aAAO,KAAP;AACD;AACF;AAED;;;;;;;;AAMA,QAAM+J,gBAAN,CAAwB5B,OAAxB,EAAiC;AAC/B,QAAI6B,gBAAgB,GAAG,MAAM,KAAKnB,QAAL,CAAclE,sBAAd,CAAqCwD,OAArC,CAA7B;AACA,UAAMhG,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAcwH,gBAAd,CAAvB;;AACA,QAAI,CAAC7H,QAAQ,CAAC8G,EAAd,EAAkB;AAChB,YAAM5G,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAId,KAAJ,CAAW,uBAAsBsB,IAAI,CAACC,SAAL,CAAeV,IAAf,CAAqB,EAAtD,CAAN;AACD;;AACD,UAAM;AAAE4H,MAAAA,MAAF;AAAU3J,MAAAA;AAAV,QAAmB,MAAM6B,QAAQ,CAACG,IAAT,EAA/B;AACA,WAAO;AAAE2H,MAAAA,MAAF;AAAU3J,MAAAA;AAAV,KAAP;AACD;;AAED,QAAM4J,SAAN,CAAiBC,aAAjB,EAAgCzC,cAAhC,EAAgDC,SAAhD,EAA2DC,QAAQ,GAAG,EAAtE,EAA0E;AACxE,QAAI,CAACF,cAAL,EAAqB;AACnB,YAAM,IAAIlG,KAAJ,CAAU,iCAAV,CAAN;AACD;;AACD,QAAI4I,YAAY,GAAG,MAAM,KAAKvB,QAAL,CAAcjE,eAAd,CAA8BuF,aAA9B,CAAzB;AACA,UAAMhI,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrByH,YADqB,EAErB,KAAKtB,kBAAL,CAAwBrB,eAAxB,CAAwCC,cAAxC,EAAwDC,SAAxD,EAAmEC,QAAnE,CAFqB,CAAvB;;AAIA,QAAI,CAACzF,QAAQ,CAAC8G,EAAd,EAAkB;AAChB,YAAM5G,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAId,KAAJ,CAAW,uBAAsBsB,IAAI,CAACC,SAAL,CAAeV,IAAf,CAAqB,EAAtD,CAAN;AACD;;AACD,WAAOF,QAAQ,CAACG,IAAT,EAAP;AACD;;AAED,QAAM+H,wBAAN,CAAgCF,aAAhC,EAA+CpC,QAA/C,EAAyD;AACvD,QAAI,CAACA,QAAL,EAAe;AACb,YAAM,IAAIvG,KAAJ,CAAU,yCAAV,CAAN;AACD;;AACD,QAAI8I,qBAAqB,GAAG,MAAM,KAAKzB,QAAL,CAAchE,8BAAd,CAA6CsF,aAA7C,CAAlC;AACA,UAAMhI,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrB2H,qBADqB,EAErB,KAAKxB,kBAAL,CAAwBhB,8BAAxB,CAAuDC,QAAvD,CAFqB,CAAvB;;AAIA,QAAI,CAAC5F,QAAQ,CAAC8G,EAAd,EAAkB;AAChB,YAAM5G,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAId,KAAJ,CAAW,uBAAsBsB,IAAI,CAACC,SAAL,CAAeV,IAAf,CAAqB,EAAtD,CAAN;AACD;;AAED,UAAMA,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;;AACA,QAAI,CAACD,IAAI,CAACkI,OAAV,EAAmB;AACjB,YAAM,IAAI/I,KAAJ,CAAU,sDAAV,CAAN;AACD;;AAED,WAAOa,IAAP;AACD;;AA1KiB;;;;"} \ No newline at end of file diff --git a/package.json b/package.json index 807c3e4..17dd5c8 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "build:dev": "rollup -c", "build:prod": "NODE_ENV=production yarn build", "build:watch": "yarn build -w", + "prepublish": "npm run build:prod", "dev": "yarn build:watch" }, "repository": "https://github.com/moneybutton/paymail-client", From daf50d2b1851f3efddc392396b95a75f68737ed5 Mon Sep 17 00:00:00 2001 From: lilong Date: Mon, 18 May 2020 19:28:59 +0900 Subject: [PATCH 05/33] Revert "miss dt in README.md" This reverts commit 4d063a9e9b4384d3b15bf668b1c5cb4a93032b78. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index b842e09..16cfb6d 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,6 @@ const preMadeSignature = VerifiableMessage.forBasicAddressResolution({ client.getOutputFor(somePaymailAddress, { senderHandle: 'sender@moneybutton.com', amount: 10000, // Amount in satoshis - dt: timestamp, senderName: 'Mr. Sender', purpose: 'Pay for your services.', pubkey: '03aa44757af33e7c9c9ceb1d5655741867ef8efea00bbc3f498424c91a16c85779', From e2ebd6d259b2ce524691f3cd92ec3e898e3ec3cf Mon Sep 17 00:00:00 2001 From: lilong Date: Mon, 18 May 2020 19:41:15 +0900 Subject: [PATCH 06/33] merge Update domain name equality function to be case insensitive. #4 --- README.md | 1 + src/dns-client.js | 2 +- test/dns.js | 12 ++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 test/dns.js diff --git a/README.md b/README.md index 16cfb6d..b842e09 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ const preMadeSignature = VerifiableMessage.forBasicAddressResolution({ client.getOutputFor(somePaymailAddress, { senderHandle: 'sender@moneybutton.com', amount: 10000, // Amount in satoshis + dt: timestamp, senderName: 'Mr. Sender', purpose: 'Pay for your services.', pubkey: '03aa44757af33e7c9c9ceb1d5655741867ef8efea00bbc3f498424c91a16c85779', diff --git a/src/dns-client.js b/src/dns-client.js index f8ee0a8..d453310 100644 --- a/src/dns-client.js +++ b/src/dns-client.js @@ -96,7 +96,7 @@ class DnsClient { } domainsAreEqual (domain1, domain2) { - return domain1.replace(/\.$/, '') === domain2.replace(/\.$/, '') + return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, '') } } diff --git a/test/dns.js b/test/dns.js new file mode 100644 index 0000000..4d31222 --- /dev/null +++ b/test/dns.js @@ -0,0 +1,12 @@ +import { DnsClient } from '../src/dns-client' +import { expect } from 'chai' + +describe('DNS', () => { + describe('#domainsAreEqual', () => { + it('domain names are case insensitive per RFC1035', () => { + var dns = new DnsClient(null, null) + var b = dns.domainsAreEqual('www.moneyBUTTON.com.', 'www.moneybutton.com') + expect(b).to.be.eql(true) + }) + }) +}) \ No newline at end of file From cf40123047b5d88ae7d89eb2f82f0cf2b39741e3 Mon Sep 17 00:00:00 2001 From: lilong Date: Mon, 18 May 2020 19:43:18 +0900 Subject: [PATCH 07/33] prepublish --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 807c3e4..17dd5c8 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "build:dev": "rollup -c", "build:prod": "NODE_ENV=production yarn build", "build:watch": "yarn build -w", + "prepublish": "npm run build:prod", "dev": "yarn build:watch" }, "repository": "https://github.com/moneybutton/paymail-client", From 4cae03d4cfd2760720e1bfdcc45c8eb307b1bfb1 Mon Sep 17 00:00:00 2001 From: lilong Date: Mon, 25 May 2020 10:05:29 +0900 Subject: [PATCH 08/33] update package.json --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 17dd5c8..b188abd 100644 --- a/package.json +++ b/package.json @@ -30,9 +30,9 @@ "@babel/runtime": "7.5.5", "@moneybutton/brfc": "^0.38.3", "abort-controller": "3.0.0", - "bsv": "1.5.0", - "isomorphic-fetch": "2.2.1", - "moment": "2.24.0" + "bsv": "^1.5.0", + "isomorphic-fetch": "^2.2.1", + "moment": "^2.24.0" }, "devDependencies": { "@babel/cli": "7.5.5", From 9079f578ce71f57689191b1ba9bd49607b742742 Mon Sep 17 00:00:00 2001 From: lilong Date: Thu, 4 Jun 2020 17:05:21 +0900 Subject: [PATCH 09/33] import 'abort-controller/polyfill' --- src/http.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/http.js b/src/http.js index 4ca5f86..00212fb 100644 --- a/src/http.js +++ b/src/http.js @@ -1,4 +1,5 @@ import AbortController from 'abort-controller' +import 'abort-controller/polyfill' class Http { constructor (fetch) { From 3fddba1f0916ac044c30eae5f06f4e2f40c247dc Mon Sep 17 00:00:00 2001 From: lilong Date: Thu, 4 Jun 2020 17:36:34 +0900 Subject: [PATCH 10/33] import 'abort-controller/polyfill'; --- dist/paymail-client.cjs.js | 3 ++- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 3 ++- dist/paymail-client.esm.js.map | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index 7ae6581..c049c72 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -7,6 +7,7 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau var brfc = require('@moneybutton/brfc'); var _defineProperty = _interopDefault(require('@babel/runtime/helpers/defineProperty')); var AbortController = _interopDefault(require('abort-controller')); +require('abort-controller/polyfill'); var moment = _interopDefault(require('moment')); var fetch = _interopDefault(require('isomorphic-fetch')); @@ -127,7 +128,7 @@ class DnsClient { } domainsAreEqual(domain1, domain2) { - return domain1.replace(/\.$/, '') === domain2.replace(/\.$/, ''); + return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, ''); } } diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index 2ed38b9..c024559 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.replace(/\\.$/, '') === domain2.replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":";;;;;;;;;;;;MAEaA,eAAe,GAAG;AAC7BC,EAAAA,GAAG,EAAE,KADwB;AAE7BC,EAAAA,kBAAkB,EAAE,oBAFS;AAG7BC,EAAAA,uBAAuB,EAAEC,SAAI,CAC3B,gDAD2B,EAE3B,CAAC,eAAD,CAF2B,EAG3B,EAH2B,CAHA;AAQ7BC,EAAAA,oBAAoB,EAAED,SAAI,CACxB,sDADwB,EAExB,EAFwB,EAGxB,EAHwB,CARG;AAa7BE,EAAAA,aAAa,EAAEF,SAAI,CACjB,gCADiB,EAEjB,CAAC,gCAAD,CAFiB,EAGjB,GAHiB,CAbU;AAkB7BG,EAAAA,kBAAkB,EAAEH,SAAI,CACtB,sBADsB,EAEtB,CAAC,8BAAD,EAAiC,gCAAjC,EAAmE,0BAAnE,EAA+F,iBAA/F,CAFsB,EAGtB,KAHsB,CAlBK;AAuB7BI,EAAAA,qBAAqB,EAAEJ,SAAI,CACzB,gEADyB,EAEzB,CAAC,8BAAD,EAAiC,gCAAjC,EAAmE,0BAAnE,EAA+F,iBAA/F,CAFyB,EAGzB,KAHyB;AAvBE;;ACF/B;AAEA,MAAMK,SAAN,CAAgB;AACdC,EAAAA,WAAW,CAAEC,GAAF,EAAOC,GAAP,EAAY;AACrB,SAAKD,GAAL,GAAWA,GAAX;AACA,SAAKC,GAAL,GAAWA,GAAX;AACD;;AAED,QAAMC,QAAN,CAAgBC,OAAhB,EAAyB;AACvB,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,WAAKN,GAAL,CAASO,UAAT,CAAqB,kBAAiBJ,OAAQ,EAA9C,EAAiD,OAAOK,GAAP,EAAYC,MAAZ,KAAuB;AACtE,YAAI;AACF,cAAID,GAAG,KAAKA,GAAG,CAACE,IAAJ,KAAa,SAAb,IAA0BF,GAAG,CAACE,IAAJ,KAAa,WAA5C,CAAP,EAAiE;AAC/D,mBAAOL,OAAO,CAAC;AACbM,cAAAA,MAAM,EAAER,OADK;AAEbS,cAAAA,IAAI,EAAE,GAFO;AAGbC,cAAAA,QAAQ,EAAE;AAHG,aAAD,CAAd;AAKD;;AACD,cAAIL,GAAJ,EAAS;AACP,mBAAOF,MAAM,CAACE,GAAD,CAAb;AACD;;AAED,gBAAM;AAAEM,YAAAA,IAAI,EAAEC,aAAR;AAAuBH,YAAAA,IAAvB;AAA6BC,YAAAA;AAA7B,cAA0CJ,MAAM,CAAC,CAAD,CAAtD;AACAJ,UAAAA,OAAO,CAAC;AACNM,YAAAA,MAAM,EAAEI,aADF;AAENH,YAAAA,IAFM;AAGNC,YAAAA,QAAQ,EAAE,KAAKG,mBAAL,CAAyBD,aAAzB,EAAwCZ,OAAxC,KAAoDU;AAHxD,WAAD,CAAP;AAKD,SAlBD,CAkBE,OAAOL,GAAP,EAAY;AACZ,iBAAOF,MAAM,CAACE,GAAD,CAAb;AACD;AACF,OAtBD;AAuBD,KAxBM,EAwBJS,IAxBI,CAwBCR,MAAM,IAAI;AAChB,UAAIA,MAAM,CAACI,QAAX,EAAqB;AACnB,eAAOJ,MAAP;AACD,OAFD,MAEO;AACL,eAAO,KAAKS,cAAL,CAAoBf,OAApB,CAAP;AACD;AACF,KA9BM,EA8BHK,GAAD,IAAS;AACVW,MAAAA,OAAO,CAACC,KAAR,CAAcZ,GAAd;AACA,aAAOA,GAAP;AACD,KAjCM,CAAP;AAkCD;;AAEDQ,EAAAA,mBAAmB,CAAEK,iBAAF,EAAqBC,cAArB,EAAqC;AACtD,QAAI,KAAKC,eAAL,CAAqBF,iBAArB,EAAwCC,cAAxC,CAAJ,EAA6D;AAC3D,aAAO,IAAP;AACD,KAFD,MAEO,IAAI,KAAKE,sBAAL,CAA4BH,iBAA5B,EAA+CC,cAA/C,CAAJ,EAAoE;AACzE,aAAO,IAAP;AACD,KAFM,MAEA,IAAI,KAAKG,gBAAL,CAAsBH,cAAtB,CAAJ,EAA2C;AAAE;AAClD,aAAO,KAAKC,eAAL,CAAqB,2CAArB,EAAkEF,iBAAlE,KAAwF,KAAKE,eAAL,CAAqB,yCAArB,EAAgEF,iBAAhE,CAA/F;AACD,KAFM,MAEA,IAAI,KAAKK,wBAAL,CAA8BJ,cAA9B,CAAJ,EAAmD;AACxD,aAAO,KAAKC,eAAL,CAAqB,sCAArB,EAA6DF,iBAA7D,CAAP;AACD,KAFM,MAEA,IAAI,KAAKE,eAAL,CAAqB,WAArB,EAAkCF,iBAAlC,CAAJ,EAA0D;AAC/D,aAAO,IAAP;AACD,KAFM,MAEA,IAAI,KAAKM,mBAAL,CAAyBN,iBAAzB,CAAJ,EAAiD;AACtD,aAAO,IAAP;AACD,KAFM,MAEA;AACL,aAAO,KAAP;AACD;AACF;;AAEDM,EAAAA,mBAAmB,CAAExB,OAAF,EAAW;AAC5B,WAAO,KAAKoB,eAAL,CAAqBpB,OAArB,EAA8B,iBAA9B,KAAoD,KAAKoB,eAAL,CAAqBpB,OAArB,EAA8B,qBAA9B,CAA3D;AACD;;AAEDqB,EAAAA,sBAAsB,CAAEH,iBAAF,EAAqBC,cAArB,EAAqC;AACzD,WAAO,KAAKC,eAAL,CAAqBF,iBAArB,EAAyC,OAAMC,cAAe,EAA9D,CAAP;AACD;;AAEDG,EAAAA,gBAAgB,CAAEtB,OAAF,EAAW;AACzB,WAAO,KAAKoB,eAAL,CAAqB,aAArB,EAAoCpB,OAApC,CAAP;AACD;;AAEDuB,EAAAA,wBAAwB,CAAEvB,OAAF,EAAW;AACjC,WAAO,KAAKoB,eAAL,CAAqB,sBAArB,EAA6CpB,OAA7C,CAAP;AACD;;AAED,QAAMe,cAAN,CAAsBf,OAAtB,EAA+B;AAC7B,UAAMyB,WAAW,GAAG,MAAM,KAAK3B,GAAL,CAAS4B,mBAAT,CAA6B1B,OAA7B,CAA1B;;AACA,QAAIyB,WAAW,CAACE,MAAZ,KAAuB,CAAvB,IAA4B,CAACF,WAAW,CAACG,MAA7C,EAAqD;AACnD,YAAM,IAAIC,KAAJ,CAAW,kBAAX,CAAN;AACD;;AACD,UAAMC,IAAI,GAAGL,WAAW,CAACG,MAAZ,CAAmB,CAAnB,EAAsBE,IAAtB,CAA2BC,KAA3B,CAAiC,GAAjC,CAAb;AACA,UAAMtB,IAAI,GAAGqB,IAAI,CAAC,CAAD,CAAjB;AACA,UAAME,cAAc,GAAGF,IAAI,CAAC,CAAD,CAA3B;;AACA,QAAI,CAACL,WAAW,CAACQ,EAAb,IAAmB,CAAC,KAAKb,eAAL,CAAqBpB,OAArB,EAA8BgC,cAA9B,CAAxB,EAAuE;AACrE,YAAM,IAAIH,KAAJ,CAAW,kBAAX,CAAN;AACD;;AACD,WAAO;AACLpB,MAAAA,IADK;AAELD,MAAAA,MAAM,EAAEwB,cAFH;AAGLtB,MAAAA,QAAQ,EAAEe,WAAW,CAACQ;AAHjB,KAAP;AAKD;;AAEDb,EAAAA,eAAe,CAAEc,OAAF,EAAWC,OAAX,EAAoB;AACjC,WAAOD,OAAO,CAACE,OAAR,CAAgB,KAAhB,EAAuB,EAAvB,MAA+BD,OAAO,CAACC,OAAR,CAAgB,KAAhB,EAAuB,EAAvB,CAAtC;AACD;;AAjGa;;ACFhB,MAAMC,YAAN,CAAmB;AACjBzC,EAAAA,WAAW,CAAE0C,KAAF,EAASC,MAAT,EAAiB;AAC1B,SAAKD,KAAL,GAAaA,KAAb;AACA,SAAKC,MAAL,GAAcA,MAAd;AACD;;AAED,QAAMnC,UAAN,CAAkBJ,OAAlB,EAA2B;AACzB,UAAMwC,QAAQ,GAAG,MAAM,KAAKF,KAAL,CAAY,GAAE,KAAKC,MAAL,CAAYE,OAAQ,SAAQzC,OAAQ,gBAAlD,CAAvB;AACA,UAAM0C,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,WAAOD,IAAP;AACD;;AAED,QAAMhB,mBAAN,CAA2B1B,OAA3B,EAAoC;AAClC,WAAO,KAAKI,UAAL,CAAiB,kBAAiBJ,OAAQ,EAA1C,CAAP;AACD;;AAdgB;;;;;;ACEnB,MAAM4C,IAAN,CAAW;AACThD,EAAAA,WAAW,CAAE0C,KAAF,EAAS;AAClB,SAAKA,KAAL,GAAaA,KAAb;AACD;;AAED,QAAMO,GAAN,CAAWC,GAAX,EAAgB;AACd,WAAO,KAAKC,aAAL,CAAmBD,GAAnB,CAAP;AACD;;AAED,QAAME,QAAN,CAAgBF,GAAhB,EAAqBJ,IAArB,EAA2B;AACzB,WAAO,KAAKK,aAAL,CAAmBD,GAAnB,EAAwB;AAC7BG,MAAAA,MAAM,EAAE,MADqB;AAE7BC,MAAAA,OAAO,EAAE;AACP,wBAAgB;AADT,OAFoB;AAK7BR,MAAAA,IAAI,EAAES,IAAI,CAACC,SAAL,CAAeV,IAAf;AALuB,KAAxB,CAAP;AAOD;;AAED,QAAMK,aAAN,CAAqBD,GAArB,EAA0BO,OAAO,GAAG,EAApC,EAAwC;AACtC,QAAIC,UAAU,GAAG,IAAIC,eAAJ,EAAjB;AACA,UAAMC,KAAK,GAAGC,UAAU,CAAC,MAAMH,UAAU,CAACI,KAAX,EAAP,EAA2B,KAA3B,CAAxB;AACA,WAAO,KAAKpB,KAAL,CAAWQ,GAAX,oBACFO,OADE;AAELM,MAAAA,WAAW,EAAE,MAFR;AAGLC,MAAAA,MAAM,EAAEN,UAAU,CAACM;AAHd,QAIJ9C,IAJI,CAICR,MAAM,IAAI;AAChBuD,MAAAA,YAAY,CAACL,KAAD,CAAZ;AACA,aAAOlD,MAAP;AACD,KAPM,CAAP;AAQD;;AA9BQ;;ACGX,MAAMwD,gBAAN,CAAuB;AACrBlE,EAAAA,WAAW,CAAEC,GAAG,GAAG,IAAR,EAAcyC,KAAd,EAAqB;AAC9B,SAAKyB,SAAL,GAAiB,IAAIpE,SAAJ,CAAcE,GAAd,EAAmB,IAAIwC,YAAJ,CAAiBC,KAAjB,EAAwB;AAAEG,MAAAA,OAAO,EAAE;AAAX,KAAxB,CAAnB,CAAjB;AAEA,SAAKuB,IAAL,GAAY,IAAIpB,IAAJ,CAASN,KAAT,CAAZ;AACA,SAAK2B,MAAL,GAAc,EAAd;AACD;;AAED,SAAOC,MAAP,CAAeH,SAAf,EAA0BzB,KAA1B,EAAiC;AAC/B,UAAM6B,QAAQ,GAAG,IAAIL,gBAAJ,CAAqB,IAArB,EAA2BxB,KAA3B,CAAjB;AACA6B,IAAAA,QAAQ,CAACJ,SAAT,GAAqBA,SAArB;AACA,WAAOI,QAAP;AACD;;AAED,QAAMC,iBAAN,CAAyBC,QAAzB,EAAmC;AACjC,UAAM,CAACC,KAAD,EAAQ9D,MAAR,IAAkB6D,QAAQ,CAACtC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKwC,mBAAL,CAAyB/D,MAAzB,EAAiCtB,eAAe,CAACC,GAAjD,CAAN;AACA,UAAMqF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BjE,MAA1B,CAA5B;AACA,UAAMkE,WAAW,GAAGF,aAAa,CAACG,YAAd,CAA2BxF,GAA3B,CACjBiD,OADiB,CACT,SADS,EACEkC,KADF,EACSlC,OADT,CACiB,cADjB,EACiC5B,MADjC,CAApB;AAEA,WAAOkE,WAAP;AACD;;AAED,QAAME,gBAAN,CAAwBP,QAAxB,EAAkC;AAChC,UAAM,CAAEC,KAAF,EAAS9D,MAAT,IAAoB6D,QAAQ,CAACtC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKwC,mBAAL,CAAyB/D,MAAzB,EAAiCtB,eAAe,CAACE,kBAAjD,CAAN;AACA,UAAMoF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BjE,MAA1B,CAA5B;AACA,UAAMqE,UAAU,GAAGL,aAAa,CAACG,YAAd,CAA2BvF,kBAA3B,CAChBgD,OADgB,CACR,SADQ,EACGkC,KADH,EACUlC,OADV,CACkB,cADlB,EACkC5B,MADlC,CAAnB;AAEA,WAAOqE,UAAP;AACD;;AAED,QAAMC,eAAN,CAAuBT,QAAvB,EAAiCU,OAAjC,EAA0C;AACxC,UAAM,CAAET,KAAF,EAAS9D,MAAT,IAAoB6D,QAAQ,CAACtC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKwC,mBAAL,CAAyB/D,MAAzB,EAAiCtB,eAAe,CAACK,oBAAjD,CAAN;AACA,UAAMiF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BjE,MAA1B,CAA5B;AACA,UAAMsC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2BzF,eAAe,CAACK,oBAA3C,EACT6C,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC5B,MADzC,EACiD4B,OADjD,CACyD,UADzD,EACqE2C,OADrE,CAAZ;AAEA,WAAOjC,GAAP;AACD;;AAED,QAAMkC,sBAAN,CAA8BX,QAA9B,EAAwC;AACtC,UAAM,CAAEC,KAAF,EAAS9D,MAAT,IAAoB6D,QAAQ,CAACtC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKwC,mBAAL,CAAyB/D,MAAzB,EAAiCtB,eAAe,CAACM,aAAjD,CAAN;AACA,UAAMgF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BjE,MAA1B,CAA5B;AACA,UAAMsC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2BzF,eAAe,CAACM,aAA3C,EACT4C,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC5B,MADzC,CAAZ;AAEA,WAAOsC,GAAP;AACD;;AAED,QAAMmC,eAAN,CAAuBZ,QAAvB,EAAiC;AAC/B,UAAM,CAAEC,KAAF,EAAS9D,MAAT,IAAoB6D,QAAQ,CAACtC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKwC,mBAAL,CAAyB/D,MAAzB,EAAiCtB,eAAe,CAACO,kBAAjD,CAAN;AACA,UAAM+E,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BjE,MAA1B,CAA5B;AACA,UAAMsC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2BzF,eAAe,CAACO,kBAA3C,EACT2C,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC5B,MADzC,CAAZ;AAEA,WAAOsC,GAAP;AACD;;AAED,QAAMoC,8BAAN,CAAsCb,QAAtC,EAAgD;AAC9C,UAAM,CAAEC,KAAF,EAAS9D,MAAT,IAAoB6D,QAAQ,CAACtC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKwC,mBAAL,CAAyB/D,MAAzB,EAAiCtB,eAAe,CAACQ,qBAAjD,CAAN;AACA,UAAM8E,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BjE,MAA1B,CAA5B;AACA,UAAMsC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2BzF,eAAe,CAACQ,qBAA3C,EACT0C,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC5B,MADzC,CAAZ;AAEA,WAAOsC,GAAP;AACD;;AAED,QAAMqC,mBAAN,CAA2BnF,OAA3B,EAAoCoF,UAApC,EAAgD;AAC9C,UAAMZ,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BzE,OAA1B,CAA5B;AACA,WAAO,CAAC,CAACwE,aAAa,CAACG,YAAd,CAA2BS,UAA3B,CAAT;AACD;;AAED,QAAMX,oBAAN,CAA4BzE,OAA5B,EAAqC;AACnC,QAAI,KAAKiE,MAAL,CAAYjE,OAAZ,CAAJ,EAA0B;AACxB,aAAO,KAAKiE,MAAL,CAAYjE,OAAZ,CAAP;AACD;;AACD,UAAM;AAAEQ,MAAAA,MAAF;AAAUC,MAAAA;AAAV,QAAmB,MAAM,KAAK4E,mBAAL,CAAyBrF,OAAzB,CAA/B;AACA,UAAMwE,aAAa,GAAG,KAAKc,kBAAL,CAAwB9E,MAAxB,EAAgCC,IAAhC,CAAtB;AACA,SAAKwD,MAAL,CAAYjE,OAAZ,IAAuBwE,aAAvB;AACA,WAAOA,aAAP;AACD;;AAED,QAAMc,kBAAN,CAA0B9E,MAA1B,EAAkCC,IAAlC,EAAwC;AACtC,UAAM8E,QAAQ,GAAI/E,MAAM,KAAK,WAAX,IAA0BA,MAAM,KAAK,YAAtC,GAAsD,MAAtD,GAA+D,OAAhF;AACA,UAAMgF,WAAW,GAAG/E,IAAI,CAACgF,QAAL,OAAoB,KAApB,GAA4B,EAA5B,GAAkC,IAAGhF,IAAK,EAA9D;AACA,UAAMiF,aAAa,GAAG,aAAaC,IAAb,CAAkBnF,MAAlB,EAA0B,CAA1B,CAAtB,CAHsC;;AAItC,QAAI,CAACkF,aAAL,EAAoB;AAClB,YAAM,IAAI7D,KAAJ,CAAW,mBAAkBrB,MAAO,EAApC,CAAN;AACD;;AACD,UAAMoF,SAAS,GAAG,MAAM,KAAK5B,IAAL,CAAUnB,GAAV,CAAe,GAAE0C,QAAS,MAAKG,aAAc,GAAEF,WAAY,uBAA3D,CAAxB;AACA,UAAMhB,aAAa,GAAG,MAAMoB,SAAS,CAACjD,IAAV,EAA5B;AACA,WAAO6B,aAAP;AACD;;AAED,QAAMa,mBAAN,CAA2BrF,OAA3B,EAAoC;AAClC,WAAO,KAAK+D,SAAL,CAAehE,QAAf,CAAwBC,OAAxB,CAAP;AACD;;AAED,QAAMuE,mBAAN,CAA2BvE,OAA3B,EAAoC6F,WAApC,EAAiD;AAC/C,QAAI,EAAC,MAAM,KAAKV,mBAAL,CAAyBnF,OAAzB,EAAkC6F,WAAlC,CAAP,CAAJ,EAA2D;AACzD,YAAM,IAAIhE,KAAJ,CAAW,uBAAsBgE,WAAY,UAAS7F,OAAQ,GAA9D,CAAN;AACD;AACF;;AAvGoB;;ACLvB,MAAM8F,iBAAN,CAAwB;AACtBlG,EAAAA,WAAW,CAAEmG,KAAF,EAASC,GAAG,GAAG,IAAf,EAAqB;AAC9B,QAAIA,GAAG,KAAK,IAAZ,EAAkB;AAChBA,MAAAA,GAAG,GAAGC,OAAO,CAAC,KAAD,CAAb;AACAD,MAAAA,GAAG,CAACE,OAAJ,GAAcD,OAAO,CAAC,aAAD,CAArB;AACD;;AACD,SAAKD,GAAL,GAAWA,GAAX;AACA,UAAMG,YAAY,GAAGC,MAAM,CAACC,IAAP,CAAYN,KAAK,CAACO,IAAN,CAAW,EAAX,CAAZ,CAArB;AACA,SAAKC,OAAL,GAAe,IAAI,KAAKP,GAAL,CAASE,OAAb,CAAqBC,YAArB,CAAf;AACD;;AAED,SAAOK,yBAAP,CAAkC;AAChCC,IAAAA,YADgC;AAEhCC,IAAAA,MAFgC;AAGhCC,IAAAA,EAHgC;AAIhCC,IAAAA;AAJgC,GAAlC,EAKG;AACD,QAAID,EAAE,CAACE,WAAP,EAAoB;AAClBF,MAAAA,EAAE,GAAGA,EAAE,CAACE,WAAH,EAAL;AACD;;AAED,WAAO,IAAIf,iBAAJ,CAAsB,CAC3BW,YAD2B,EAE3BC,MAAM,IAAI,GAFiB,EAG3BC,EAH2B,EAI3BC,OAJ2B,CAAtB,CAAP;AAMD;;AAEDE,EAAAA,IAAI,CAAEC,aAAF,EAAiB;AACnB,WAAO,KAAKR,OAAL,CAAaO,IAAb,CAAkB,KAAKd,GAAL,CAASgB,UAAT,CAAoBC,OAApB,CAA4BF,aAA5B,CAAlB,CAAP;AACD;;AAEDG,EAAAA,MAAM,CAAEC,UAAF,EAAcC,SAAd,EAAyB;AAC7B,WAAO,KAAKb,OAAL,CAAaW,MAAb,CAAoBC,UAApB,EAAgCC,SAAhC,CAAP;AACD;;AAnCqB;;ACExB,MAAMC,kBAAN,CAAyB;AACvBzH,EAAAA,WAAW,CAAE0H,KAAF,EAAS;AAClB,SAAKA,KAAL,GAAaA,KAAb;AACD;;AACDC,EAAAA,yBAAyB,CAAEC,UAAF,EAAcC,UAAU,GAAG,IAA3B,EAAiC;AACxD,UAAM;AACJhB,MAAAA,YADI;AAEJC,MAAAA,MAFI;AAGJgB,MAAAA,UAHI;AAIJd,MAAAA,OAJI;AAKJe,MAAAA,MALI;AAMJP,MAAAA,SAAS,EAAEQ;AANP,QAOFJ,UAPJ;;AASA,QAAI,CAACI,iBAAD,IAAsBH,UAAU,KAAK,IAAzC,EAA+C;AAC7C,YAAM,IAAI5F,KAAJ,CAAU,kCAAV,CAAN;AACD;;AAED,QAAI8E,EAAJ,EAAQS,SAAR;;AACA,QAAIQ,iBAAJ,EAAuB;AACrB,UAAI,CAACJ,UAAU,CAACb,EAAhB,EAAoB;AAClB,cAAM,IAAI9E,KAAJ,CAAU,sCAAV,CAAN;AACD;;AACD8E,MAAAA,EAAE,GAAGa,UAAU,CAACb,EAAhB;AACAS,MAAAA,SAAS,GAAGQ,iBAAZ;AACD,KAND,MAMO;AACLjB,MAAAA,EAAE,GAAG,KAAKW,KAAL,CAAWO,GAAX,EAAL;AACAT,MAAAA,SAAS,GAAGtB,iBAAiB,CAACU,yBAAlB,CAA4C;AACtDC,QAAAA,YADsD;AAEtDC,QAAAA,MAFsD;AAGtDC,QAAAA,EAHsD;AAItDC,QAAAA;AAJsD,OAA5C,EAKTE,IALS,CAKJW,UALI,CAAZ;AAMD;;AAED,WAAO;AACLhB,MAAAA,YADK;AAELiB,MAAAA,UAFK;AAGLd,MAAAA,OAHK;AAILD,MAAAA,EAJK;AAKLD,MAAAA,MAAM,EAAEA,MAAM,IAAI,IALb;AAMLiB,MAAAA,MANK;AAOLP,MAAAA;AAPK,KAAP;AASD;;AAEDU,EAAAA,eAAe,CAAEC,cAAF,EAAkBC,SAAlB,EAA6BC,QAA7B,EAAuC;AACpD,WAAO;AAAEC,MAAAA,GAAG,EAAEH,cAAP;AAAuBE,MAAAA,QAAvB;AAAiCD,MAAAA;AAAjC,KAAP;AACD;;AAEDG,EAAAA,8BAA8B,CAAEC,QAAF,EAAY;AACxC,WAAO;AAAEA,MAAAA;AAAF,KAAP;AACD;;AApDsB;;ACAzB,MAAMC,KAAN,CAAY;AACVR,EAAAA,GAAG,GAAI;AACL,WAAOS,MAAM,EAAb;AACD;;AAHS;;ACFZ,MAAMC,eAAN,SAA8B1G,KAA9B,CAAoC;AAClCjC,EAAAA,WAAW,CAAE2G,OAAF,EAAWiC,OAAX,EAAoB;AAC7B,UAAMjC,OAAN;AACA,SAAKiC,OAAL,GAAeA,OAAf;AACD;;AAJiC;;ACEpC,MAAMC,UAAN,CAAiB;AACf7I,EAAAA,WAAW,CAAE0C,KAAF,EAAS;AAClB,SAAKxC,GAAL,GAAW,IAAIuC,YAAJ,CAAiBC,KAAjB,EAAwB;AAAEG,MAAAA,OAAO,EAAE;AAAX,KAAxB,CAAX;AACD;;AAED,QAAMrC,UAAN,CAAkBJ,OAAlB,EAA2B0I,SAA3B,EAAsC;AACpC,QAAI;AACF,YAAMlG,QAAQ,GAAG,MAAM,KAAK1C,GAAL,CAASM,UAAT,CAAoBJ,OAApB,CAAvB;;AACA,UAAIwC,QAAQ,CAACb,MAAT,KAAoB,CAApB,IAAyBa,QAAQ,CAACZ,MAAtC,EAA8C;AAC5C,cAAME,IAAI,GAAGU,QAAQ,CAACZ,MAAT,CAAgB+G,GAAhB,CAAoBC,MAAM,IAAI;AACzC,gBAAM,CAAEC,QAAF,EAAYC,MAAZ,EAAoBrI,IAApB,EAA0BE,IAA1B,IAAmCiI,MAAM,CAAC9G,IAAP,CAAYC,KAAZ,CAAkB,GAAlB,CAAzC;AACA,iBAAO;AACL8G,YAAAA,QADK;AAELC,YAAAA,MAFK;AAGLrI,YAAAA,IAHK;AAILE,YAAAA,IAJK;AAKLD,YAAAA,QAAQ,EAAE8B,QAAQ,CAACP;AALd,WAAP;AAOD,SATY,CAAb;AAUAyG,QAAAA,SAAS,CAAC,IAAD,EAAO5G,IAAP,CAAT;AACD,OAZD,MAYO,IAAIU,QAAQ,CAACb,MAAT,KAAoB,CAApB,IAAyB,CAACa,QAAQ,CAACZ,MAAvC,EAA+C;AACpD8G,QAAAA,SAAS,CAAC;AAAEnI,UAAAA,IAAI,EAAE;AAAR,SAAD,CAAT;AACD,OAFM,MAEA;AACLmI,QAAAA,SAAS,CAAC,IAAI7G,KAAJ,CAAU,wBAAV,CAAD,CAAT;AACD;AACF,KAnBD,CAmBE,OAAOkH,CAAP,EAAU;AACVL,MAAAA,SAAS,CAACK,CAAD,CAAT;AACD;AACF;;AA5Bc;;ACOjB,MAAMC,aAAN,CAAoB;AAClBpJ,EAAAA,WAAW,CAAEC,GAAG,GAAG,IAAR,EAAcoJ,MAAM,GAAG,IAAvB,EAA6B3B,KAAK,GAAG,IAArC,EAA2CtB,GAAG,GAAG,IAAjD,EAAuD;AAChE,QAAIiD,MAAM,KAAK,IAAf,EAAqB;AACnBA,MAAAA,MAAM,GAAG3G,KAAT;AACD;;AACD,QAAIzC,GAAG,KAAK,IAAZ,EAAkB;AAChBA,MAAAA,GAAG,GAAG,IAAI4I,UAAJ,CAAeQ,MAAf,CAAN;AACD;;AACD,QAAIjD,GAAG,KAAK,IAAZ,EAAkB;AAChBA,MAAAA,GAAG,GAAGC,OAAO,CAAC,KAAD,CAAb;AACD;;AACD,SAAKD,GAAL,GAAWA,GAAX;AACA,SAAKkD,QAAL,GAAgB,IAAIpF,gBAAJ,CAAqBjE,GAArB,EAA0BoJ,MAA1B,CAAhB;AACA,SAAKjF,IAAL,GAAY,IAAIpB,IAAJ,CAASqG,MAAT,CAAZ;AACA,SAAKE,kBAAL,GAA0B,IAAI9B,kBAAJ,CAAuBC,KAAK,KAAK,IAAV,GAAiBA,KAAjB,GAAyB,IAAIe,KAAJ,EAAhD,CAA1B;AACD;AAED;;;;;;;AAKA,QAAMe,YAAN,CAAoBZ,OAApB,EAA6B;AAC3B,UAAM9D,WAAW,GAAG,MAAM,KAAKwE,QAAL,CAAc9E,iBAAd,CAAgCoE,OAAhC,CAA1B;AACA,UAAMhG,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAc6B,WAAd,CAAvB;AACA,UAAM;AAAEiD,MAAAA;AAAF,QAAa,MAAMnF,QAAQ,CAACG,IAAT,EAAzB;AACA,WAAOgF,MAAP;AACD;AAED;;;;;;;;;;;;;;;;AAcA,QAAM0B,YAAN,CAAoBhF,QAApB,EAA8BmD,UAA9B,EAA0CC,UAAU,GAAG,IAAvD,EAA6D;AAC3D,UAAM5C,UAAU,GAAG,MAAM,KAAKqE,QAAL,CAActE,gBAAd,CAA+BP,QAA/B,CAAzB;AACA,UAAM7B,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrB6B,UADqB,EAErB,KAAKsE,kBAAL,CAAwB5B,yBAAxB,CAAkDC,UAAlD,EAA8DC,UAA9D,CAFqB,CAAvB;;AAIA,QAAI,CAACjF,QAAQ,CAAC8G,EAAd,EAAkB;AAChB,YAAM,IAAIf,eAAJ,CAAqB,sBAAqBlE,QAAS,EAAnD,EAAsDA,QAAtD,CAAN;AACD;;AACD,UAAM;AAAEkF,MAAAA;AAAF,QAAa,MAAM/G,QAAQ,CAACG,IAAT,EAAzB;AACA,WAAO4G,MAAP;AACD;AAED;;;;;;;;;AAOA,QAAMC,iBAAN,CAAyB7B,MAAzB,EAAiCa,OAAjC,EAA0C;AACxC,UAAM1F,GAAG,GAAG,MAAM,KAAKoG,QAAL,CAAcpE,eAAd,CAA8B0D,OAA9B,EAAuCb,MAAvC,CAAlB;AACA,UAAMnF,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAcC,GAAd,CAAvB;AACA,UAAMJ,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,UAAM;AAAE8G,MAAAA;AAAF,QAAY/G,IAAlB;AACA,WAAO+G,KAAP;AACD;AAED;;;;;;;;;;;;;;;;AAcA,QAAMC,gBAAN,CAAwBnD,OAAxB,EAAiCa,SAAjC,EAA4CoB,OAAO,GAAG,IAAtD,EAA4Db,MAAM,GAAG,IAArE,EAA2E;AACzE,QAAIa,OAAO,IAAI,IAAX,IAAmBb,MAAM,KAAK,IAAlC,EAAwC;AACtC,YAAM,IAAI9F,KAAJ,CAAU,uCAAV,CAAN;AACD;;AACD,QAAI8H,eAAJ;;AACA,QAAInB,OAAJ,EAAa;AACX,UAAIb,MAAM,KAAI,MAAM,KAAKuB,QAAL,CAAc/D,mBAAd,CAAkCqD,OAAO,CAACzG,KAAR,CAAc,GAAd,EAAmB,CAAnB,CAAlC,EAAyD7C,eAAe,CAACK,oBAAzE,CAAV,CAAV,EAAoH;AAClH,YAAI,MAAM,KAAKiK,iBAAL,CAAuB7B,MAAvB,EAA+Ba,OAA/B,CAAV,EAAmD;AACjDmB,UAAAA,eAAe,GAAG,KAAK3D,GAAL,CAAS4D,SAAT,CAAmBC,UAAnB,CAA8BlC,MAA9B,CAAlB;AACD,SAFD,MAEO;AACL,iBAAO,KAAP;AACD;AACF,OAND,MAMO;AACL,cAAMmC,MAAM,GAAG,MAAM,KAAKZ,QAAL,CAAc/D,mBAAd,CAAkCqD,OAAO,CAACzG,KAAR,CAAc,GAAd,EAAmB,CAAnB,CAAlC,EAAyD7C,eAAe,CAACC,GAAzE,CAArB;;AACA,YAAI2K,MAAJ,EAAY;AACV,gBAAMC,WAAW,GAAG,MAAM,KAAKX,YAAL,CAAkBZ,OAAlB,CAA1B;AACAmB,UAAAA,eAAe,GAAG,KAAK3D,GAAL,CAAS4D,SAAT,CAAmBC,UAAnB,CAA8BE,WAA9B,CAAlB;AACD,SAHD,MAGO;AACL,iBAAO,KAAP;AACD;AACF;AACF;;AAED,UAAMC,gBAAgB,GAAG,KAAKhE,GAAL,CAASiE,OAAT,CAAiBC,aAAjB,CAA+BP,eAAe,IAAIhC,MAAlD,CAAzB;;AACA,QAAI;AACF,YAAMwC,QAAQ,GAAG5D,OAAO,CAACW,MAAR,CAAe8C,gBAAgB,CAACvE,QAAjB,EAAf,EAA4C2B,SAA5C,CAAjB;AACA,aAAO+C,QAAP;AACD,KAHD,CAGE,OAAO9J,GAAP,EAAY;AACZ,aAAO,KAAP;AACD;AACF;AAED;;;;;;;;AAMA,QAAM+J,gBAAN,CAAwB5B,OAAxB,EAAiC;AAC/B,QAAI6B,gBAAgB,GAAG,MAAM,KAAKnB,QAAL,CAAclE,sBAAd,CAAqCwD,OAArC,CAA7B;AACA,UAAMhG,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAcwH,gBAAd,CAAvB;;AACA,QAAI,CAAC7H,QAAQ,CAAC8G,EAAd,EAAkB;AAChB,YAAM5G,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAId,KAAJ,CAAW,uBAAsBsB,IAAI,CAACC,SAAL,CAAeV,IAAf,CAAqB,EAAtD,CAAN;AACD;;AACD,UAAM;AAAE4H,MAAAA,MAAF;AAAU3J,MAAAA;AAAV,QAAmB,MAAM6B,QAAQ,CAACG,IAAT,EAA/B;AACA,WAAO;AAAE2H,MAAAA,MAAF;AAAU3J,MAAAA;AAAV,KAAP;AACD;;AAED,QAAM4J,SAAN,CAAiBC,aAAjB,EAAgCzC,cAAhC,EAAgDC,SAAhD,EAA2DC,QAAQ,GAAG,EAAtE,EAA0E;AACxE,QAAI,CAACF,cAAL,EAAqB;AACnB,YAAM,IAAIlG,KAAJ,CAAU,iCAAV,CAAN;AACD;;AACD,QAAI4I,YAAY,GAAG,MAAM,KAAKvB,QAAL,CAAcjE,eAAd,CAA8BuF,aAA9B,CAAzB;AACA,UAAMhI,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrByH,YADqB,EAErB,KAAKtB,kBAAL,CAAwBrB,eAAxB,CAAwCC,cAAxC,EAAwDC,SAAxD,EAAmEC,QAAnE,CAFqB,CAAvB;;AAIA,QAAI,CAACzF,QAAQ,CAAC8G,EAAd,EAAkB;AAChB,YAAM5G,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAId,KAAJ,CAAW,uBAAsBsB,IAAI,CAACC,SAAL,CAAeV,IAAf,CAAqB,EAAtD,CAAN;AACD;;AACD,WAAOF,QAAQ,CAACG,IAAT,EAAP;AACD;;AAED,QAAM+H,wBAAN,CAAgCF,aAAhC,EAA+CpC,QAA/C,EAAyD;AACvD,QAAI,CAACA,QAAL,EAAe;AACb,YAAM,IAAIvG,KAAJ,CAAU,yCAAV,CAAN;AACD;;AACD,QAAI8I,qBAAqB,GAAG,MAAM,KAAKzB,QAAL,CAAchE,8BAAd,CAA6CsF,aAA7C,CAAlC;AACA,UAAMhI,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrB2H,qBADqB,EAErB,KAAKxB,kBAAL,CAAwBhB,8BAAxB,CAAuDC,QAAvD,CAFqB,CAAvB;;AAIA,QAAI,CAAC5F,QAAQ,CAAC8G,EAAd,EAAkB;AAChB,YAAM5G,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAId,KAAJ,CAAW,uBAAsBsB,IAAI,CAACC,SAAL,CAAeV,IAAf,CAAqB,EAAtD,CAAN;AACD;;AAED,UAAMA,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;;AACA,QAAI,CAACD,IAAI,CAACkI,OAAV,EAAmB;AACjB,YAAM,IAAI/I,KAAJ,CAAU,sDAAV,CAAN;AACD;;AAED,WAAOa,IAAP;AACD;;AA1KiB;;;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import AbortController from 'abort-controller'\nimport 'abort-controller/polyfill'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index edf864f..4c1900e 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -1,6 +1,7 @@ import { brfc } from '@moneybutton/brfc'; import _defineProperty from '@babel/runtime/helpers/defineProperty'; import AbortController from 'abort-controller'; +import 'abort-controller/polyfill'; import moment from 'moment'; import fetch from 'isomorphic-fetch'; @@ -121,7 +122,7 @@ class DnsClient { } domainsAreEqual(domain1, domain2) { - return domain1.replace(/\.$/, '') === domain2.replace(/\.$/, ''); + return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, ''); } } diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index d84713e..3ae0d4a 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.replace(/\\.$/, '') === domain2.replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import AbortController from 'abort-controller'\nimport 'abort-controller/polyfill'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file From a1425ead7cf2a32b025e3b8ecdb9f8947271c23a Mon Sep 17 00:00:00 2001 From: lilong Date: Thu, 4 Jun 2020 17:50:32 +0900 Subject: [PATCH 11/33] import 'abort-controller/polyfill'; --- dist/paymail-client.cjs.js | 2 +- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 2 +- dist/paymail-client.esm.js.map | 2 +- src/http.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index c049c72..e932e29 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -6,8 +6,8 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau var brfc = require('@moneybutton/brfc'); var _defineProperty = _interopDefault(require('@babel/runtime/helpers/defineProperty')); -var AbortController = _interopDefault(require('abort-controller')); require('abort-controller/polyfill'); +var AbortController = _interopDefault(require('abort-controller')); var moment = _interopDefault(require('moment')); var fetch = _interopDefault(require('isomorphic-fetch')); diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index c024559..5ddb4bc 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import AbortController from 'abort-controller'\nimport 'abort-controller/polyfill'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index 4c1900e..3c82a8a 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -1,7 +1,7 @@ import { brfc } from '@moneybutton/brfc'; import _defineProperty from '@babel/runtime/helpers/defineProperty'; -import AbortController from 'abort-controller'; import 'abort-controller/polyfill'; +import AbortController from 'abort-controller'; import moment from 'moment'; import fetch from 'isomorphic-fetch'; diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 3ae0d4a..71812bf 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import AbortController from 'abort-controller'\nimport 'abort-controller/polyfill'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/src/http.js b/src/http.js index 00212fb..fe70d9c 100644 --- a/src/http.js +++ b/src/http.js @@ -1,5 +1,5 @@ -import AbortController from 'abort-controller' import 'abort-controller/polyfill' +import AbortController from 'abort-controller' class Http { constructor (fetch) { From afb3a3ce7643236a92a2c41dddd6ea3b36a84f87 Mon Sep 17 00:00:00 2001 From: lilong Date: Wed, 15 Jul 2020 13:49:41 +0900 Subject: [PATCH 12/33] ignore check google dns status, when got status === 3, no document --- dist/paymail-client.cjs.js | 3 +- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 3 +- dist/paymail-client.esm.js.map | 2 +- package-lock.json | 66 ++++++++++++++++++++++++++++------ package.json | 4 ++- src/BrowserDns.js | 3 +- test/dns.js | 2 +- 8 files changed, 68 insertions(+), 17 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index e932e29..afe8cca 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -434,7 +434,8 @@ class BrowserDns { }; }); aCallback(null, data); - } else if (response.Status === 0 && !response.Answer) { + } else if (!response.Answer) { + // ignore check response.Status === 0 aCallback({ code: 'ENODATA' }); diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index 5ddb4bc..e57e4c3 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index 3c82a8a..a4bafe3 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -428,7 +428,8 @@ class BrowserDns { }; }); aCallback(null, data); - } else if (response.Status === 0 && !response.Answer) { + } else if (!response.Answer) { + // ignore check response.Status === 0 aCallback({ code: 'ENODATA' }); diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 71812bf..a02d624 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (response.Status === 0 && !response.Answer) {\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 95b20bb..7713899 100644 --- a/package-lock.json +++ b/package-lock.json @@ -733,6 +733,16 @@ "@babel/helper-plugin-utils": "^7.8.3" } }, + "@babel/polyfill": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.10.4.tgz", + "integrity": "sha512-8BYcnVqQ5kMD2HXoHInBH7H1b/uP3KdnwCYXOqFnXqguOyuu443WXusbIUbWEfY3Z0Txk0M1uG/8YuAMhNl6zg==", + "dev": true, + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, "@babel/preset-env": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz", @@ -791,6 +801,27 @@ "semver": "^5.5.0" } }, + "@babel/register": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.10.5.tgz", + "integrity": "sha512-eYHdLv43nyvmPn9bfNfrcC4+iYNwdQ8Pxk1MFJuU/U5LpSYl/PH4dFMazCYZDFVi8ueG3shvO+AQfLrxpYulQw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.0.0", + "lodash": "^4.17.19", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + }, + "dependencies": { + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + } + } + }, "@babel/runtime": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", @@ -2358,6 +2389,12 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -2411,6 +2448,12 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "dev": true + }, "core-js-compat": { "version": "3.6.5", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", @@ -3564,6 +3607,17 @@ } } }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, "find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -5469,7 +5523,6 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, - "optional": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -5479,8 +5532,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true + "dev": true } } }, @@ -6284,7 +6336,6 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, - "optional": true, "requires": { "find-up": "^3.0.0" }, @@ -6294,7 +6345,6 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, - "optional": true, "requires": { "locate-path": "^3.0.0" } @@ -6304,7 +6354,6 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, - "optional": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -6315,7 +6364,6 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "optional": true, "requires": { "p-try": "^2.0.0" } @@ -6325,7 +6373,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, - "optional": true, "requires": { "p-limit": "^2.0.0" } @@ -6334,8 +6381,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "optional": true + "dev": true } } }, diff --git a/package.json b/package.json index b188abd..e02609c 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "dist/**" ], "scripts": { - "lint": "standard --parser=babel-eslint", + "lint": "standard --parser=babel-eslint --fix", "pretest": "yarn lint", "test": "mocha", "build": "rollup -c", @@ -39,7 +39,9 @@ "@babel/core": "7.5.5", "@babel/plugin-proposal-object-rest-spread": "7.5.5", "@babel/plugin-transform-runtime": "7.5.5", + "@babel/polyfill": "^7.10.4", "@babel/preset-env": "7.5.5", + "@babel/register": "^7.10.5", "@rollup/plugin-commonjs": "11.0.1", "@rollup/plugin-node-resolve": "7.0.0", "@rollup/plugin-replace": "2.3.0", diff --git a/src/BrowserDns.js b/src/BrowserDns.js index 3453557..95ae83d 100644 --- a/src/BrowserDns.js +++ b/src/BrowserDns.js @@ -20,7 +20,8 @@ class BrowserDns { } }) aCallback(null, data) - } else if (response.Status === 0 && !response.Answer) { + } else if (!response.Answer) { + // ignore check response.Status === 0 aCallback({ code: 'ENODATA' }) } else { aCallback(new Error('error during dns query')) diff --git a/test/dns.js b/test/dns.js index 4d31222..e39da60 100644 --- a/test/dns.js +++ b/test/dns.js @@ -9,4 +9,4 @@ describe('DNS', () => { expect(b).to.be.eql(true) }) }) -}) \ No newline at end of file +}) From 9864a9ce12061217ede98aff8f557a37bfafec90 Mon Sep 17 00:00:00 2001 From: Long Li Date: Fri, 21 May 2021 13:55:18 +0900 Subject: [PATCH 13/33] update package --- dist/paymail-client.cjs.js | 29 +- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 4 +- dist/paymail-client.esm.js.map | 2 +- package-lock.json | 18804 ++++++++++++++++++++++--------- package.json | 46 +- 6 files changed, 13617 insertions(+), 5270 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index afe8cca..38d68e5 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -2,14 +2,19 @@ Object.defineProperty(exports, '__esModule', { value: true }); -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - var brfc = require('@moneybutton/brfc'); -var _defineProperty = _interopDefault(require('@babel/runtime/helpers/defineProperty')); +var _defineProperty = require('@babel/runtime/helpers/defineProperty'); require('abort-controller/polyfill'); -var AbortController = _interopDefault(require('abort-controller')); -var moment = _interopDefault(require('moment')); -var fetch = _interopDefault(require('isomorphic-fetch')); +var AbortController = require('abort-controller'); +var moment = require('moment'); +var fetch = require('isomorphic-fetch'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); +var AbortController__default = /*#__PURE__*/_interopDefaultLegacy(AbortController); +var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment); +var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch); const CapabilityCodes = { pki: 'pki', @@ -151,9 +156,9 @@ class DnsOverHttps { } -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } class Http { constructor(fetch) { @@ -175,9 +180,9 @@ class Http { } async _basicRequest(url, options = {}) { - var controller = new AbortController(); + var controller = new AbortController__default['default'](); const timer = setTimeout(() => controller.abort(), 30000); - return this.fetch(url, _objectSpread({}, options, { + return this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { credentials: 'omit', signal: controller.signal })).then(result => { @@ -398,7 +403,7 @@ class RequestBodyFactory { class Clock { now() { - return moment(); + return moment__default['default'](); } } @@ -452,7 +457,7 @@ class BrowserDns { class PaymailClient { constructor(dns = null, fetch2 = null, clock = null, bsv = null) { if (fetch2 === null) { - fetch2 = fetch; + fetch2 = fetch__default['default']; } if (dns === null) { diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index e57e4c3..b5fe593 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index a4bafe3..40bc9b3 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -145,7 +145,7 @@ class DnsOverHttps { } -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } @@ -171,7 +171,7 @@ class Http { async _basicRequest(url, options = {}) { var controller = new AbortController(); const timer = setTimeout(() => controller.abort(), 30000); - return this.fetch(url, _objectSpread({}, options, { + return this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { credentials: 'omit', signal: controller.signal })).then(result => { diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index a02d624..4b4034b 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":";;;;;;;MAEaA,eAAe,GAAG;AAC7BC,EAAAA,GAAG,EAAE,KADwB;AAE7BC,EAAAA,kBAAkB,EAAE,oBAFS;AAG7BC,EAAAA,uBAAuB,EAAEC,IAAI,CAC3B,gDAD2B,EAE3B,CAAC,eAAD,CAF2B,EAG3B,EAH2B,CAHA;AAQ7BC,EAAAA,oBAAoB,EAAED,IAAI,CACxB,sDADwB,EAExB,EAFwB,EAGxB,EAHwB,CARG;AAa7BE,EAAAA,aAAa,EAAEF,IAAI,CACjB,gCADiB,EAEjB,CAAC,gCAAD,CAFiB,EAGjB,GAHiB,CAbU;AAkB7BG,EAAAA,kBAAkB,EAAEH,IAAI,CACtB,sBADsB,EAEtB,CAAC,8BAAD,EAAiC,gCAAjC,EAAmE,0BAAnE,EAA+F,iBAA/F,CAFsB,EAGtB,KAHsB,CAlBK;AAuB7BI,EAAAA,qBAAqB,EAAEJ,IAAI,CACzB,gEADyB,EAEzB,CAAC,8BAAD,EAAiC,gCAAjC,EAAmE,0BAAnE,EAA+F,iBAA/F,CAFyB,EAGzB,KAHyB;AAvBE;;ACF/B;AAEA,MAAMK,SAAN,CAAgB;AACdC,EAAAA,WAAW,CAAEC,GAAF,EAAOC,GAAP,EAAY;AACrB,SAAKD,GAAL,GAAWA,GAAX;AACA,SAAKC,GAAL,GAAWA,GAAX;AACD;;AAEa,QAARC,QAAQ,CAAEC,OAAF,EAAW;AACvB,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,WAAKN,GAAL,CAASO,UAAT,CAAqB,kBAAiBJ,OAAQ,EAA9C,EAAiD,OAAOK,GAAP,EAAYC,MAAZ,KAAuB;AACtE,YAAI;AACF,cAAID,GAAG,KAAKA,GAAG,CAACE,IAAJ,KAAa,SAAb,IAA0BF,GAAG,CAACE,IAAJ,KAAa,WAA5C,CAAP,EAAiE;AAC/D,mBAAOL,OAAO,CAAC;AACbM,cAAAA,MAAM,EAAER,OADK;AAEbS,cAAAA,IAAI,EAAE,GAFO;AAGbC,cAAAA,QAAQ,EAAE;AAHG,aAAD,CAAd;AAKD;;AACD,cAAIL,GAAJ,EAAS;AACP,mBAAOF,MAAM,CAACE,GAAD,CAAb;AACD;;AAED,gBAAM;AAAEM,YAAAA,IAAI,EAAEC,aAAR;AAAuBH,YAAAA,IAAvB;AAA6BC,YAAAA;AAA7B,cAA0CJ,MAAM,CAAC,CAAD,CAAtD;AACAJ,UAAAA,OAAO,CAAC;AACNM,YAAAA,MAAM,EAAEI,aADF;AAENH,YAAAA,IAFM;AAGNC,YAAAA,QAAQ,EAAE,KAAKG,mBAAL,CAAyBD,aAAzB,EAAwCZ,OAAxC,KAAoDU;AAHxD,WAAD,CAAP;AAKD,SAlBD,CAkBE,OAAOL,GAAP,EAAY;AACZ,iBAAOF,MAAM,CAACE,GAAD,CAAb;AACD;AACF,OAtBD;AAuBD,KAxBM,EAwBJS,IAxBI,CAwBCR,MAAM,IAAI;AAChB,UAAIA,MAAM,CAACI,QAAX,EAAqB;AACnB,eAAOJ,MAAP;AACD,OAFD,MAEO;AACL,eAAO,KAAKS,cAAL,CAAoBf,OAApB,CAAP;AACD;AACF,KA9BM,EA8BHK,GAAD,IAAS;AACVW,MAAAA,OAAO,CAACC,KAAR,CAAcZ,GAAd;AACA,aAAOA,GAAP;AACD,KAjCM,CAAP;AAkCD;;AAEDQ,EAAAA,mBAAmB,CAAEK,iBAAF,EAAqBC,cAArB,EAAqC;AACtD,QAAI,KAAKC,eAAL,CAAqBF,iBAArB,EAAwCC,cAAxC,CAAJ,EAA6D;AAC3D,aAAO,IAAP;AACD,KAFD,MAEO,IAAI,KAAKE,sBAAL,CAA4BH,iBAA5B,EAA+CC,cAA/C,CAAJ,EAAoE;AACzE,aAAO,IAAP;AACD,KAFM,MAEA,IAAI,KAAKG,gBAAL,CAAsBH,cAAtB,CAAJ,EAA2C;AAAE;AAClD,aAAO,KAAKC,eAAL,CAAqB,2CAArB,EAAkEF,iBAAlE,KAAwF,KAAKE,eAAL,CAAqB,yCAArB,EAAgEF,iBAAhE,CAA/F;AACD,KAFM,MAEA,IAAI,KAAKK,wBAAL,CAA8BJ,cAA9B,CAAJ,EAAmD;AACxD,aAAO,KAAKC,eAAL,CAAqB,sCAArB,EAA6DF,iBAA7D,CAAP;AACD,KAFM,MAEA,IAAI,KAAKE,eAAL,CAAqB,WAArB,EAAkCF,iBAAlC,CAAJ,EAA0D;AAC/D,aAAO,IAAP;AACD,KAFM,MAEA,IAAI,KAAKM,mBAAL,CAAyBN,iBAAzB,CAAJ,EAAiD;AACtD,aAAO,IAAP;AACD,KAFM,MAEA;AACL,aAAO,KAAP;AACD;AACF;;AAEDM,EAAAA,mBAAmB,CAAExB,OAAF,EAAW;AAC5B,WAAO,KAAKoB,eAAL,CAAqBpB,OAArB,EAA8B,iBAA9B,KAAoD,KAAKoB,eAAL,CAAqBpB,OAArB,EAA8B,qBAA9B,CAA3D;AACD;;AAEDqB,EAAAA,sBAAsB,CAAEH,iBAAF,EAAqBC,cAArB,EAAqC;AACzD,WAAO,KAAKC,eAAL,CAAqBF,iBAArB,EAAyC,OAAMC,cAAe,EAA9D,CAAP;AACD;;AAEDG,EAAAA,gBAAgB,CAAEtB,OAAF,EAAW;AACzB,WAAO,KAAKoB,eAAL,CAAqB,aAArB,EAAoCpB,OAApC,CAAP;AACD;;AAEDuB,EAAAA,wBAAwB,CAAEvB,OAAF,EAAW;AACjC,WAAO,KAAKoB,eAAL,CAAqB,sBAArB,EAA6CpB,OAA7C,CAAP;AACD;;AAEmB,QAAde,cAAc,CAAEf,OAAF,EAAW;AAC7B,UAAMyB,WAAW,GAAG,MAAM,KAAK3B,GAAL,CAAS4B,mBAAT,CAA6B1B,OAA7B,CAA1B;;AACA,QAAIyB,WAAW,CAACE,MAAZ,KAAuB,CAAvB,IAA4B,CAACF,WAAW,CAACG,MAA7C,EAAqD;AACnD,YAAM,IAAIC,KAAJ,CAAW,kBAAX,CAAN;AACD;;AACD,UAAMC,IAAI,GAAGL,WAAW,CAACG,MAAZ,CAAmB,CAAnB,EAAsBE,IAAtB,CAA2BC,KAA3B,CAAiC,GAAjC,CAAb;AACA,UAAMtB,IAAI,GAAGqB,IAAI,CAAC,CAAD,CAAjB;AACA,UAAME,cAAc,GAAGF,IAAI,CAAC,CAAD,CAA3B;;AACA,QAAI,CAACL,WAAW,CAACQ,EAAb,IAAmB,CAAC,KAAKb,eAAL,CAAqBpB,OAArB,EAA8BgC,cAA9B,CAAxB,EAAuE;AACrE,YAAM,IAAIH,KAAJ,CAAW,kBAAX,CAAN;AACD;;AACD,WAAO;AACLpB,MAAAA,IADK;AAELD,MAAAA,MAAM,EAAEwB,cAFH;AAGLtB,MAAAA,QAAQ,EAAEe,WAAW,CAACQ;AAHjB,KAAP;AAKD;;AAEDb,EAAAA,eAAe,CAAEc,OAAF,EAAWC,OAAX,EAAoB;AACjC,WAAOD,OAAO,CAACE,WAAR,GAAsBC,OAAtB,CAA8B,KAA9B,EAAqC,EAArC,MAA6CF,OAAO,CAACC,WAAR,GAAsBC,OAAtB,CAA8B,KAA9B,EAAqC,EAArC,CAApD;AACD;;AAjGa;;ACFhB,MAAMC,YAAN,CAAmB;AACjB1C,EAAAA,WAAW,CAAE2C,KAAF,EAASC,MAAT,EAAiB;AAC1B,SAAKD,KAAL,GAAaA,KAAb;AACA,SAAKC,MAAL,GAAcA,MAAd;AACD;;AAEe,QAAVpC,UAAU,CAAEJ,OAAF,EAAW;AACzB,UAAMyC,QAAQ,GAAG,MAAM,KAAKF,KAAL,CAAY,GAAE,KAAKC,MAAL,CAAYE,OAAQ,SAAQ1C,OAAQ,gBAAlD,CAAvB;AACA,UAAM2C,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,WAAOD,IAAP;AACD;;AAEwB,QAAnBjB,mBAAmB,CAAE1B,OAAF,EAAW;AAClC,WAAO,KAAKI,UAAL,CAAiB,kBAAiBJ,OAAQ,EAA1C,CAAP;AACD;;AAdgB;;;;;;ACGnB,MAAM6C,IAAN,CAAW;AACTjD,EAAAA,WAAW,CAAE2C,KAAF,EAAS;AAClB,SAAKA,KAAL,GAAaA,KAAb;AACD;;AAEQ,QAAHO,GAAG,CAAEC,GAAF,EAAO;AACd,WAAO,KAAKC,aAAL,CAAmBD,GAAnB,CAAP;AACD;;AAEa,QAARE,QAAQ,CAAEF,GAAF,EAAOJ,IAAP,EAAa;AACzB,WAAO,KAAKK,aAAL,CAAmBD,GAAnB,EAAwB;AAC7BG,MAAAA,MAAM,EAAE,MADqB;AAE7BC,MAAAA,OAAO,EAAE;AACP,wBAAgB;AADT,OAFoB;AAK7BR,MAAAA,IAAI,EAAES,IAAI,CAACC,SAAL,CAAeV,IAAf;AALuB,KAAxB,CAAP;AAOD;;AAEkB,QAAbK,aAAa,CAAED,GAAF,EAAOO,OAAO,GAAG,EAAjB,EAAqB;AACtC,QAAIC,UAAU,GAAG,IAAIC,eAAJ,EAAjB;AACA,UAAMC,KAAK,GAAGC,UAAU,CAAC,MAAMH,UAAU,CAACI,KAAX,EAAP,EAA2B,KAA3B,CAAxB;AACA,WAAO,KAAKpB,KAAL,CAAWQ,GAAX,kCACFO,OADE;AAELM,MAAAA,WAAW,EAAE,MAFR;AAGLC,MAAAA,MAAM,EAAEN,UAAU,CAACM;AAHd,QAIJ/C,IAJI,CAICR,MAAM,IAAI;AAChBwD,MAAAA,YAAY,CAACL,KAAD,CAAZ;AACA,aAAOnD,MAAP;AACD,KAPM,CAAP;AAQD;;AA9BQ;;ACEX,MAAMyD,gBAAN,CAAuB;AACrBnE,EAAAA,WAAW,CAAEC,GAAG,GAAG,IAAR,EAAc0C,KAAd,EAAqB;AAC9B,SAAKyB,SAAL,GAAiB,IAAIrE,SAAJ,CAAcE,GAAd,EAAmB,IAAIyC,YAAJ,CAAiBC,KAAjB,EAAwB;AAAEG,MAAAA,OAAO,EAAE;AAAX,KAAxB,CAAnB,CAAjB;AAEA,SAAKuB,IAAL,GAAY,IAAIpB,IAAJ,CAASN,KAAT,CAAZ;AACA,SAAK2B,MAAL,GAAc,EAAd;AACD;;AAEY,SAANC,MAAM,CAAEH,SAAF,EAAazB,KAAb,EAAoB;AAC/B,UAAM6B,QAAQ,GAAG,IAAIL,gBAAJ,CAAqB,IAArB,EAA2BxB,KAA3B,CAAjB;AACA6B,IAAAA,QAAQ,CAACJ,SAAT,GAAqBA,SAArB;AACA,WAAOI,QAAP;AACD;;AAEsB,QAAjBC,iBAAiB,CAAEC,QAAF,EAAY;AACjC,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiCtB,eAAe,CAACC,GAAjD,CAAN;AACA,UAAMsF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMmE,WAAW,GAAGF,aAAa,CAACG,YAAd,CAA2BzF,GAA3B,CACjBkD,OADiB,CACT,SADS,EACEkC,KADF,EACSlC,OADT,CACiB,cADjB,EACiC7B,MADjC,CAApB;AAEA,WAAOmE,WAAP;AACD;;AAEqB,QAAhBE,gBAAgB,CAAEP,QAAF,EAAY;AAChC,UAAM,CAAEC,KAAF,EAAS/D,MAAT,IAAoB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiCtB,eAAe,CAACE,kBAAjD,CAAN;AACA,UAAMqF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMsE,UAAU,GAAGL,aAAa,CAACG,YAAd,CAA2BxF,kBAA3B,CAChBiD,OADgB,CACR,SADQ,EACGkC,KADH,EACUlC,OADV,CACkB,cADlB,EACkC7B,MADlC,CAAnB;AAEA,WAAOsE,UAAP;AACD;;AAEoB,QAAfC,eAAe,CAAET,QAAF,EAAYU,OAAZ,EAAqB;AACxC,UAAM,CAAET,KAAF,EAAS/D,MAAT,IAAoB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiCtB,eAAe,CAACK,oBAAjD,CAAN;AACA,UAAMkF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B1F,eAAe,CAACK,oBAA3C,EACT8C,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,EACiD6B,OADjD,CACyD,UADzD,EACqE2C,OADrE,CAAZ;AAEA,WAAOjC,GAAP;AACD;;AAE2B,QAAtBkC,sBAAsB,CAAEX,QAAF,EAAY;AACtC,UAAM,CAAEC,KAAF,EAAS/D,MAAT,IAAoB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiCtB,eAAe,CAACM,aAAjD,CAAN;AACA,UAAMiF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B1F,eAAe,CAACM,aAA3C,EACT6C,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,CAAZ;AAEA,WAAOuC,GAAP;AACD;;AAEoB,QAAfmC,eAAe,CAAEZ,QAAF,EAAY;AAC/B,UAAM,CAAEC,KAAF,EAAS/D,MAAT,IAAoB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiCtB,eAAe,CAACO,kBAAjD,CAAN;AACA,UAAMgF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B1F,eAAe,CAACO,kBAA3C,EACT4C,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,CAAZ;AAEA,WAAOuC,GAAP;AACD;;AAEmC,QAA9BoC,8BAA8B,CAAEb,QAAF,EAAY;AAC9C,UAAM,CAAEC,KAAF,EAAS/D,MAAT,IAAoB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAA1B;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiCtB,eAAe,CAACQ,qBAAjD,CAAN;AACA,UAAM+E,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B1F,eAAe,CAACQ,qBAA3C,EACT2C,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,CAAZ;AAEA,WAAOuC,GAAP;AACD;;AAEwB,QAAnBqC,mBAAmB,CAAEpF,OAAF,EAAWqF,UAAX,EAAuB;AAC9C,UAAMZ,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0B1E,OAA1B,CAA5B;AACA,WAAO,CAAC,CAACyE,aAAa,CAACG,YAAd,CAA2BS,UAA3B,CAAT;AACD;;AAEyB,QAApBX,oBAAoB,CAAE1E,OAAF,EAAW;AACnC,QAAI,KAAKkE,MAAL,CAAYlE,OAAZ,CAAJ,EAA0B;AACxB,aAAO,KAAKkE,MAAL,CAAYlE,OAAZ,CAAP;AACD;;AACD,UAAM;AAAEQ,MAAAA,MAAF;AAAUC,MAAAA;AAAV,QAAmB,MAAM,KAAK6E,mBAAL,CAAyBtF,OAAzB,CAA/B;AACA,UAAMyE,aAAa,GAAG,KAAKc,kBAAL,CAAwB/E,MAAxB,EAAgCC,IAAhC,CAAtB;AACA,SAAKyD,MAAL,CAAYlE,OAAZ,IAAuByE,aAAvB;AACA,WAAOA,aAAP;AACD;;AAEuB,QAAlBc,kBAAkB,CAAE/E,MAAF,EAAUC,IAAV,EAAgB;AACtC,UAAM+E,QAAQ,GAAIhF,MAAM,KAAK,WAAX,IAA0BA,MAAM,KAAK,YAAtC,GAAsD,MAAtD,GAA+D,OAAhF;AACA,UAAMiF,WAAW,GAAGhF,IAAI,CAACiF,QAAL,OAAoB,KAApB,GAA4B,EAA5B,GAAkC,IAAGjF,IAAK,EAA9D;AACA,UAAMkF,aAAa,GAAG,aAAaC,IAAb,CAAkBpF,MAAlB,EAA0B,CAA1B,CAAtB,CAHsC;;AAItC,QAAI,CAACmF,aAAL,EAAoB;AAClB,YAAM,IAAI9D,KAAJ,CAAW,mBAAkBrB,MAAO,EAApC,CAAN;AACD;;AACD,UAAMqF,SAAS,GAAG,MAAM,KAAK5B,IAAL,CAAUnB,GAAV,CAAe,GAAE0C,QAAS,MAAKG,aAAc,GAAEF,WAAY,uBAA3D,CAAxB;AACA,UAAMhB,aAAa,GAAG,MAAMoB,SAAS,CAACjD,IAAV,EAA5B;AACA,WAAO6B,aAAP;AACD;;AAEwB,QAAnBa,mBAAmB,CAAEtF,OAAF,EAAW;AAClC,WAAO,KAAKgE,SAAL,CAAejE,QAAf,CAAwBC,OAAxB,CAAP;AACD;;AAEwB,QAAnBwE,mBAAmB,CAAExE,OAAF,EAAW8F,WAAX,EAAwB;AAC/C,QAAI,EAAC,MAAM,KAAKV,mBAAL,CAAyBpF,OAAzB,EAAkC8F,WAAlC,CAAP,CAAJ,EAA2D;AACzD,YAAM,IAAIjE,KAAJ,CAAW,uBAAsBiE,WAAY,UAAS9F,OAAQ,GAA9D,CAAN;AACD;AACF;;AAvGoB;;ACLvB,MAAM+F,iBAAN,CAAwB;AACtBnG,EAAAA,WAAW,CAAEoG,KAAF,EAASC,GAAG,GAAG,IAAf,EAAqB;AAC9B,QAAIA,GAAG,KAAK,IAAZ,EAAkB;AAChBA,MAAAA,GAAG,GAAGC,OAAO,CAAC,KAAD,CAAb;AACAD,MAAAA,GAAG,CAACE,OAAJ,GAAcD,OAAO,CAAC,aAAD,CAArB;AACD;;AACD,SAAKD,GAAL,GAAWA,GAAX;AACA,UAAMG,YAAY,GAAGC,MAAM,CAACC,IAAP,CAAYN,KAAK,CAACO,IAAN,CAAW,EAAX,CAAZ,CAArB;AACA,SAAKC,OAAL,GAAe,IAAI,KAAKP,GAAL,CAASE,OAAb,CAAqBC,YAArB,CAAf;AACD;;AAE+B,SAAzBK,yBAAyB,CAAE;AAChCC,IAAAA,YADgC;AAEhCC,IAAAA,MAFgC;AAGhCC,IAAAA,EAHgC;AAIhCC,IAAAA;AAJgC,GAAF,EAK7B;AACD,QAAID,EAAE,CAACE,WAAP,EAAoB;AAClBF,MAAAA,EAAE,GAAGA,EAAE,CAACE,WAAH,EAAL;AACD;;AAED,WAAO,IAAIf,iBAAJ,CAAsB,CAC3BW,YAD2B,EAE3BC,MAAM,IAAI,GAFiB,EAG3BC,EAH2B,EAI3BC,OAJ2B,CAAtB,CAAP;AAMD;;AAEDE,EAAAA,IAAI,CAAEC,aAAF,EAAiB;AACnB,WAAO,KAAKR,OAAL,CAAaO,IAAb,CAAkB,KAAKd,GAAL,CAASgB,UAAT,CAAoBC,OAApB,CAA4BF,aAA5B,CAAlB,CAAP;AACD;;AAEDG,EAAAA,MAAM,CAAEC,UAAF,EAAcC,SAAd,EAAyB;AAC7B,WAAO,KAAKb,OAAL,CAAaW,MAAb,CAAoBC,UAApB,EAAgCC,SAAhC,CAAP;AACD;;AAnCqB;;ACExB,MAAMC,kBAAN,CAAyB;AACvB1H,EAAAA,WAAW,CAAE2H,KAAF,EAAS;AAClB,SAAKA,KAAL,GAAaA,KAAb;AACD;;AACDC,EAAAA,yBAAyB,CAAEC,UAAF,EAAcC,UAAU,GAAG,IAA3B,EAAiC;AACxD,UAAM;AACJhB,MAAAA,YADI;AAEJC,MAAAA,MAFI;AAGJgB,MAAAA,UAHI;AAIJd,MAAAA,OAJI;AAKJe,MAAAA,MALI;AAMJP,MAAAA,SAAS,EAAEQ;AANP,QAOFJ,UAPJ;;AASA,QAAI,CAACI,iBAAD,IAAsBH,UAAU,KAAK,IAAzC,EAA+C;AAC7C,YAAM,IAAI7F,KAAJ,CAAU,kCAAV,CAAN;AACD;;AAED,QAAI+E,EAAJ,EAAQS,SAAR;;AACA,QAAIQ,iBAAJ,EAAuB;AACrB,UAAI,CAACJ,UAAU,CAACb,EAAhB,EAAoB;AAClB,cAAM,IAAI/E,KAAJ,CAAU,sCAAV,CAAN;AACD;;AACD+E,MAAAA,EAAE,GAAGa,UAAU,CAACb,EAAhB;AACAS,MAAAA,SAAS,GAAGQ,iBAAZ;AACD,KAND,MAMO;AACLjB,MAAAA,EAAE,GAAG,KAAKW,KAAL,CAAWO,GAAX,EAAL;AACAT,MAAAA,SAAS,GAAGtB,iBAAiB,CAACU,yBAAlB,CAA4C;AACtDC,QAAAA,YADsD;AAEtDC,QAAAA,MAFsD;AAGtDC,QAAAA,EAHsD;AAItDC,QAAAA;AAJsD,OAA5C,EAKTE,IALS,CAKJW,UALI,CAAZ;AAMD;;AAED,WAAO;AACLhB,MAAAA,YADK;AAELiB,MAAAA,UAFK;AAGLd,MAAAA,OAHK;AAILD,MAAAA,EAJK;AAKLD,MAAAA,MAAM,EAAEA,MAAM,IAAI,IALb;AAMLiB,MAAAA,MANK;AAOLP,MAAAA;AAPK,KAAP;AASD;;AAEDU,EAAAA,eAAe,CAAEC,cAAF,EAAkBC,SAAlB,EAA6BC,QAA7B,EAAuC;AACpD,WAAO;AAAEC,MAAAA,GAAG,EAAEH,cAAP;AAAuBE,MAAAA,QAAvB;AAAiCD,MAAAA;AAAjC,KAAP;AACD;;AAEDG,EAAAA,8BAA8B,CAAEC,QAAF,EAAY;AACxC,WAAO;AAAEA,MAAAA;AAAF,KAAP;AACD;;AApDsB;;ACAzB,MAAMC,KAAN,CAAY;AACVR,EAAAA,GAAG,GAAI;AACL,WAAOS,MAAM,EAAb;AACD;;AAHS;;ACFZ,MAAMC,eAAN,SAA8B3G,KAA9B,CAAoC;AAClCjC,EAAAA,WAAW,CAAE4G,OAAF,EAAWiC,OAAX,EAAoB;AAC7B,UAAMjC,OAAN;AACA,SAAKiC,OAAL,GAAeA,OAAf;AACD;;AAJiC;;ACEpC,MAAMC,UAAN,CAAiB;AACf9I,EAAAA,WAAW,CAAE2C,KAAF,EAAS;AAClB,SAAKzC,GAAL,GAAW,IAAIwC,YAAJ,CAAiBC,KAAjB,EAAwB;AAAEG,MAAAA,OAAO,EAAE;AAAX,KAAxB,CAAX;AACD;;AAEe,QAAVtC,UAAU,CAAEJ,OAAF,EAAW2I,SAAX,EAAsB;AACpC,QAAI;AACF,YAAMlG,QAAQ,GAAG,MAAM,KAAK3C,GAAL,CAASM,UAAT,CAAoBJ,OAApB,CAAvB;;AACA,UAAIyC,QAAQ,CAACd,MAAT,KAAoB,CAApB,IAAyBc,QAAQ,CAACb,MAAtC,EAA8C;AAC5C,cAAME,IAAI,GAAGW,QAAQ,CAACb,MAAT,CAAgBgH,GAAhB,CAAoBC,MAAM,IAAI;AACzC,gBAAM,CAAEC,QAAF,EAAYC,MAAZ,EAAoBtI,IAApB,EAA0BE,IAA1B,IAAmCkI,MAAM,CAAC/G,IAAP,CAAYC,KAAZ,CAAkB,GAAlB,CAAzC;AACA,iBAAO;AACL+G,YAAAA,QADK;AAELC,YAAAA,MAFK;AAGLtI,YAAAA,IAHK;AAILE,YAAAA,IAJK;AAKLD,YAAAA,QAAQ,EAAE+B,QAAQ,CAACR;AALd,WAAP;AAOD,SATY,CAAb;AAUA0G,QAAAA,SAAS,CAAC,IAAD,EAAO7G,IAAP,CAAT;AACD,OAZD,MAYO,IAAI,CAACW,QAAQ,CAACb,MAAd,EAAsB;AAC3B;AACA+G,QAAAA,SAAS,CAAC;AAAEpI,UAAAA,IAAI,EAAE;AAAR,SAAD,CAAT;AACD,OAHM,MAGA;AACLoI,QAAAA,SAAS,CAAC,IAAI9G,KAAJ,CAAU,wBAAV,CAAD,CAAT;AACD;AACF,KApBD,CAoBE,OAAOmH,CAAP,EAAU;AACVL,MAAAA,SAAS,CAACK,CAAD,CAAT;AACD;AACF;;AA7Bc;;ACOjB,MAAMC,aAAN,CAAoB;AAClBrJ,EAAAA,WAAW,CAAEC,GAAG,GAAG,IAAR,EAAcqJ,MAAM,GAAG,IAAvB,EAA6B3B,KAAK,GAAG,IAArC,EAA2CtB,GAAG,GAAG,IAAjD,EAAuD;AAChE,QAAIiD,MAAM,KAAK,IAAf,EAAqB;AACnBA,MAAAA,MAAM,GAAG3G,KAAT;AACD;;AACD,QAAI1C,GAAG,KAAK,IAAZ,EAAkB;AAChBA,MAAAA,GAAG,GAAG,IAAI6I,UAAJ,CAAeQ,MAAf,CAAN;AACD;;AACD,QAAIjD,GAAG,KAAK,IAAZ,EAAkB;AAChBA,MAAAA,GAAG,GAAGC,OAAO,CAAC,KAAD,CAAb;AACD;;AACD,SAAKD,GAAL,GAAWA,GAAX;AACA,SAAKkD,QAAL,GAAgB,IAAIpF,gBAAJ,CAAqBlE,GAArB,EAA0BqJ,MAA1B,CAAhB;AACA,SAAKjF,IAAL,GAAY,IAAIpB,IAAJ,CAASqG,MAAT,CAAZ;AACA,SAAKE,kBAAL,GAA0B,IAAI9B,kBAAJ,CAAuBC,KAAK,KAAK,IAAV,GAAiBA,KAAjB,GAAyB,IAAIe,KAAJ,EAAhD,CAA1B;AACD;AAED;AACF;AACA;AACA;AACA;;;AACoB,QAAZe,YAAY,CAAEZ,OAAF,EAAW;AAC3B,UAAM9D,WAAW,GAAG,MAAM,KAAKwE,QAAL,CAAc9E,iBAAd,CAAgCoE,OAAhC,CAA1B;AACA,UAAMhG,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAc6B,WAAd,CAAvB;AACA,UAAM;AAAEiD,MAAAA;AAAF,QAAa,MAAMnF,QAAQ,CAACG,IAAT,EAAzB;AACA,WAAOgF,MAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACoB,QAAZ0B,YAAY,CAAEhF,QAAF,EAAYmD,UAAZ,EAAwBC,UAAU,GAAG,IAArC,EAA2C;AAC3D,UAAM5C,UAAU,GAAG,MAAM,KAAKqE,QAAL,CAActE,gBAAd,CAA+BP,QAA/B,CAAzB;AACA,UAAM7B,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrB6B,UADqB,EAErB,KAAKsE,kBAAL,CAAwB5B,yBAAxB,CAAkDC,UAAlD,EAA8DC,UAA9D,CAFqB,CAAvB;;AAIA,QAAI,CAACjF,QAAQ,CAAC8G,EAAd,EAAkB;AAChB,YAAM,IAAIf,eAAJ,CAAqB,sBAAqBlE,QAAS,EAAnD,EAAsDA,QAAtD,CAAN;AACD;;AACD,UAAM;AAAEkF,MAAAA;AAAF,QAAa,MAAM/G,QAAQ,CAACG,IAAT,EAAzB;AACA,WAAO4G,MAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACyB,QAAjBC,iBAAiB,CAAE7B,MAAF,EAAUa,OAAV,EAAmB;AACxC,UAAM1F,GAAG,GAAG,MAAM,KAAKoG,QAAL,CAAcpE,eAAd,CAA8B0D,OAA9B,EAAuCb,MAAvC,CAAlB;AACA,UAAMnF,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAcC,GAAd,CAAvB;AACA,UAAMJ,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,UAAM;AAAE8G,MAAAA;AAAF,QAAY/G,IAAlB;AACA,WAAO+G,KAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACwB,QAAhBC,gBAAgB,CAAEnD,OAAF,EAAWa,SAAX,EAAsBoB,OAAO,GAAG,IAAhC,EAAsCb,MAAM,GAAG,IAA/C,EAAqD;AACzE,QAAIa,OAAO,IAAI,IAAX,IAAmBb,MAAM,KAAK,IAAlC,EAAwC;AACtC,YAAM,IAAI/F,KAAJ,CAAU,uCAAV,CAAN;AACD;;AACD,QAAI+H,eAAJ;;AACA,QAAInB,OAAJ,EAAa;AACX,UAAIb,MAAM,KAAI,MAAM,KAAKuB,QAAL,CAAc/D,mBAAd,CAAkCqD,OAAO,CAAC1G,KAAR,CAAc,GAAd,EAAmB,CAAnB,CAAlC,EAAyD7C,eAAe,CAACK,oBAAzE,CAAV,CAAV,EAAoH;AAClH,YAAI,MAAM,KAAKkK,iBAAL,CAAuB7B,MAAvB,EAA+Ba,OAA/B,CAAV,EAAmD;AACjDmB,UAAAA,eAAe,GAAG,KAAK3D,GAAL,CAAS4D,SAAT,CAAmBC,UAAnB,CAA8BlC,MAA9B,CAAlB;AACD,SAFD,MAEO;AACL,iBAAO,KAAP;AACD;AACF,OAND,MAMO;AACL,cAAMmC,MAAM,GAAG,MAAM,KAAKZ,QAAL,CAAc/D,mBAAd,CAAkCqD,OAAO,CAAC1G,KAAR,CAAc,GAAd,EAAmB,CAAnB,CAAlC,EAAyD7C,eAAe,CAACC,GAAzE,CAArB;;AACA,YAAI4K,MAAJ,EAAY;AACV,gBAAMC,WAAW,GAAG,MAAM,KAAKX,YAAL,CAAkBZ,OAAlB,CAA1B;AACAmB,UAAAA,eAAe,GAAG,KAAK3D,GAAL,CAAS4D,SAAT,CAAmBC,UAAnB,CAA8BE,WAA9B,CAAlB;AACD,SAHD,MAGO;AACL,iBAAO,KAAP;AACD;AACF;AACF;;AAED,UAAMC,gBAAgB,GAAG,KAAKhE,GAAL,CAASiE,OAAT,CAAiBC,aAAjB,CAA+BP,eAAe,IAAIhC,MAAlD,CAAzB;;AACA,QAAI;AACF,YAAMwC,QAAQ,GAAG5D,OAAO,CAACW,MAAR,CAAe8C,gBAAgB,CAACvE,QAAjB,EAAf,EAA4C2B,SAA5C,CAAjB;AACA,aAAO+C,QAAP;AACD,KAHD,CAGE,OAAO/J,GAAP,EAAY;AACZ,aAAO,KAAP;AACD;AACF;AAED;AACF;AACA;AACA;AACA;AACA;;;AACwB,QAAhBgK,gBAAgB,CAAE5B,OAAF,EAAW;AAC/B,QAAI6B,gBAAgB,GAAG,MAAM,KAAKnB,QAAL,CAAclE,sBAAd,CAAqCwD,OAArC,CAA7B;AACA,UAAMhG,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAcwH,gBAAd,CAAvB;;AACA,QAAI,CAAC7H,QAAQ,CAAC8G,EAAd,EAAkB;AAChB,YAAM5G,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAIf,KAAJ,CAAW,uBAAsBuB,IAAI,CAACC,SAAL,CAAeV,IAAf,CAAqB,EAAtD,CAAN;AACD;;AACD,UAAM;AAAE4H,MAAAA,MAAF;AAAU5J,MAAAA;AAAV,QAAmB,MAAM8B,QAAQ,CAACG,IAAT,EAA/B;AACA,WAAO;AAAE2H,MAAAA,MAAF;AAAU5J,MAAAA;AAAV,KAAP;AACD;;AAEc,QAAT6J,SAAS,CAAEC,aAAF,EAAiBzC,cAAjB,EAAiCC,SAAjC,EAA4CC,QAAQ,GAAG,EAAvD,EAA2D;AACxE,QAAI,CAACF,cAAL,EAAqB;AACnB,YAAM,IAAInG,KAAJ,CAAU,iCAAV,CAAN;AACD;;AACD,QAAI6I,YAAY,GAAG,MAAM,KAAKvB,QAAL,CAAcjE,eAAd,CAA8BuF,aAA9B,CAAzB;AACA,UAAMhI,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrByH,YADqB,EAErB,KAAKtB,kBAAL,CAAwBrB,eAAxB,CAAwCC,cAAxC,EAAwDC,SAAxD,EAAmEC,QAAnE,CAFqB,CAAvB;;AAIA,QAAI,CAACzF,QAAQ,CAAC8G,EAAd,EAAkB;AAChB,YAAM5G,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAIf,KAAJ,CAAW,uBAAsBuB,IAAI,CAACC,SAAL,CAAeV,IAAf,CAAqB,EAAtD,CAAN;AACD;;AACD,WAAOF,QAAQ,CAACG,IAAT,EAAP;AACD;;AAE6B,QAAxB+H,wBAAwB,CAAEF,aAAF,EAAiBpC,QAAjB,EAA2B;AACvD,QAAI,CAACA,QAAL,EAAe;AACb,YAAM,IAAIxG,KAAJ,CAAU,yCAAV,CAAN;AACD;;AACD,QAAI+I,qBAAqB,GAAG,MAAM,KAAKzB,QAAL,CAAchE,8BAAd,CAA6CsF,aAA7C,CAAlC;AACA,UAAMhI,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrB2H,qBADqB,EAErB,KAAKxB,kBAAL,CAAwBhB,8BAAxB,CAAuDC,QAAvD,CAFqB,CAAvB;;AAIA,QAAI,CAAC5F,QAAQ,CAAC8G,EAAd,EAAkB;AAChB,YAAM5G,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAIf,KAAJ,CAAW,uBAAsBuB,IAAI,CAACC,SAAL,CAAeV,IAAf,CAAqB,EAAtD,CAAN;AACD;;AAED,UAAMA,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;;AACA,QAAI,CAACD,IAAI,CAACkI,OAAV,EAAmB;AACjB,YAAM,IAAIhJ,KAAJ,CAAU,sDAAV,CAAN;AACD;;AAED,WAAOc,IAAP;AACD;;AA1KiB;;;;"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 7713899..e45059b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1733 +1,2027 @@ { "name": "@moneybutton/paymail-client", "version": "0.38.3", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@babel/cli": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.5.5.tgz", - "integrity": "sha512-UHI+7pHv/tk9g6WXQKYz+kmXTI77YtuY3vqC59KIqcoWEjsJJSG6rAxKaLsgj3LDyadsPrCB929gVOKM6Hui0w==", + "packages": { + "": { + "name": "@moneybutton/paymail-client", + "version": "0.38.3", + "license": "Open-BSV", + "dependencies": { + "@babel/runtime": "7.14.0", + "@moneybutton/brfc": "^0.38.3", + "abort-controller": "3.0.0", + "bsv": "^1.5.5", + "isomorphic-fetch": "^3.0.0", + "moment": "^2.24.0" + }, + "devDependencies": { + "@babel/cli": "7.14.3", + "@babel/core": "7.14.3", + "@babel/plugin-proposal-object-rest-spread": "7.14.2", + "@babel/plugin-transform-runtime": "7.14.3", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "7.14.2", + "@babel/register": "^7.10.5", + "@rollup/plugin-commonjs": "19.0.0", + "@rollup/plugin-node-resolve": "13.0.0", + "@rollup/plugin-replace": "2.4.2", + "babel-eslint": "10.1.0", + "bdd-lazy-var": "2.6.1", + "chai": "4.3.4", + "dotenv-cli": "4.0.0", + "http-server": "0.12.3", + "mocha": "8.4.0", + "rollup": "2.48.0", + "rollup-plugin-babel": "4.4.0", + "rollup-plugin-node-builtins": "2.1.2", + "rollup-plugin-node-globals": "1.4.0", + "should": "13.2.3", + "standard": "16.0.3" + } + }, + "node_modules/@babel/cli": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.3.tgz", + "integrity": "sha512-zU4JLvwk32ay1lhhyGfqiRUSPoltVDjhYkA3aQq8+Yby9z30s/EsFw1EPOHxWG9YZo2pAGfgdRNeHZQAYU5m9A==", "dev": true, - "requires": { - "chokidar": "^2.0.4", - "commander": "^2.8.1", + "dependencies": { + "commander": "^4.0.1", "convert-source-map": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "glob": "^7.0.0", - "lodash": "^4.17.13", - "mkdirp": "^0.5.1", - "output-file-sync": "^2.0.0", + "make-dir": "^2.1.0", "slash": "^2.0.0", "source-map": "^0.5.0" + }, + "bin": { + "babel": "bin/babel.js", + "babel-external-helpers": "bin/babel-external-helpers.js" + }, + "optionalDependencies": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", + "chokidar": "^3.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" + "dependencies": { + "@babel/highlight": "^7.12.13" } }, - "@babel/core": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", - "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", + "node_modules/@babel/compat-data": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "dev": true + }, + "node_modules/@babel/core": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.5.5", - "@babel/helpers": "^7.5.5", - "@babel/parser": "^7.5.5", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.5.5", - "@babel/types": "^7.5.5", - "convert-source-map": "^1.1.0", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", "source-map": "^0.5.0" }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "@babel/generator": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", - "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", + "node_modules/@babel/generator": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, - "requires": { - "@babel/types": "^7.9.6", + "dependencies": { + "@babel/types": "^7.14.2", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", - "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", "dev": true, - "requires": { - "@babel/types": "^7.8.3" + "dependencies": { + "@babel/types": "^7.12.13" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", - "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.8.3", - "@babel/types": "^7.8.3" + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", - "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-regex": "^7.8.3", - "regexpu-core": "^4.7.0" + "dependencies": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-define-map": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", - "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", + "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/types": "^7.8.3", - "lodash": "^4.17.13" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.14.3", + "@babel/helper-split-export-declaration": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", - "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", + "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", "dev": true, - "requires": { - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-function-name": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", - "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", + "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.9.5" + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" } }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", "dev": true, - "requires": { - "@babel/types": "^7.8.3" + "dependencies": { + "@babel/types": "^7.13.0" } }, - "@babel/helper-hoist-variables": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", - "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", + "node_modules/@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", "dev": true, - "requires": { - "@babel/types": "^7.8.3" + "dependencies": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", - "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", "dev": true, - "requires": { - "@babel/types": "^7.8.3" + "dependencies": { + "@babel/types": "^7.12.13" } }, - "@babel/helper-module-imports": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", - "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", "dev": true, - "requires": { - "@babel/types": "^7.8.3" + "dependencies": { + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" } }, - "@babel/helper-module-transforms": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", - "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.6", - "@babel/helper-simple-access": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/template": "^7.8.6", - "@babel/types": "^7.9.0", - "lodash": "^4.17.13" + "dependencies": { + "@babel/types": "^7.13.12" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", - "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "node_modules/@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, - "requires": { - "@babel/types": "^7.8.3" + "dependencies": { + "@babel/types": "^7.13.12" } }, - "@babel/helper-plugin-utils": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "@babel/helper-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", - "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", "dev": true, - "requires": { - "lodash": "^4.17.13" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" } }, - "@babel/helper-remap-async-to-generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", - "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", + "node_modules/@babel/helper-replace-supers": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", + "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-wrap-function": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, - "@babel/helper-replace-supers": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", - "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", + "node_modules/@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.8.3", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6" + "dependencies": { + "@babel/types": "^7.13.12" } }, - "@babel/helper-simple-access": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", - "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", "dev": true, - "requires": { - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "dependencies": { + "@babel/types": "^7.12.1" } }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", "dev": true, - "requires": { - "@babel/types": "^7.8.3" + "dependencies": { + "@babel/types": "^7.12.13" } }, - "@babel/helper-validator-identifier": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", - "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, - "@babel/helper-wrap-function": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", - "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", + "node_modules/@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" + "dependencies": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" } }, - "@babel/helpers": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", - "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", + "node_modules/@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, - "requires": { - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.9.6", - "@babel/types": "^7.9.6" + "dependencies": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "node_modules/@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", - "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", - "dev": true + "node_modules/@babel/parser": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", + "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", - "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", + "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-remap-async-to-generator": "^7.8.3", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.13.12" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", - "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", + "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", - "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", - "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", + "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.3", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", + "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.8.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", - "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", + "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.8", - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", + "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", + "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", + "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", + "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", + "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", - "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", + "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", - "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", + "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-remap-async-to-generator": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", - "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", - "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "lodash": "^4.17.13" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-classes": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz", - "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-define-map": "^7.8.3", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.6", - "@babel/helper-split-export-declaration": "^7.8.3", - "globals": "^11.1.0" + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", - "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz", - "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", - "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-duplicate-keys": { + "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", - "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-exponentiation-operator": { + "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", - "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-for-of": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", - "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", - "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-literals": { + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", - "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", - "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz", - "integrity": "sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz", - "integrity": "sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-simple-access": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz", - "integrity": "sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3", - "babel-plugin-dynamic-import-node": "^2.3.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", - "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", - "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-new-target": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", - "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-object-super": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", - "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.3" + "dependencies": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-parameters": { - "version": "7.9.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz", - "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", - "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz", + "integrity": "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", - "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz", + "integrity": "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==", "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-reserved-words": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", - "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz", - "integrity": "sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", + "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "resolve": "^1.8.1", - "semver": "^5.5.1" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", - "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", - "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", - "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-regex": "^7.8.3" + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-template-literals": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", - "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", - "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", - "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/polyfill": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.10.4.tgz", - "integrity": "sha512-8BYcnVqQ5kMD2HXoHInBH7H1b/uP3KdnwCYXOqFnXqguOyuu443WXusbIUbWEfY3Z0Txk0M1uG/8YuAMhNl6zg==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", "dev": true, - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-env": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz", - "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==", + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", + "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-dynamic-import": "^7.5.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.5.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.5.5", - "@babel/plugin-transform-classes": "^7.5.5", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.5.0", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.5.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.5.0", - "@babel/plugin-transform-modules-commonjs": "^7.5.0", - "@babel/plugin-transform-modules-systemjs": "^7.5.0", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.5.5", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.5", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.5.5", - "browserslist": "^4.6.0", - "core-js-compat": "^3.1.1", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" + "dependencies": { + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/register": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.10.5.tgz", - "integrity": "sha512-eYHdLv43nyvmPn9bfNfrcC4+iYNwdQ8Pxk1MFJuU/U5LpSYl/PH4dFMazCYZDFVi8ueG3shvO+AQfLrxpYulQw==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", "dev": true, - "requires": { - "find-cache-dir": "^2.0.0", - "lodash": "^4.17.19", - "make-dir": "^2.1.0", - "pirates": "^4.0.0", - "source-map-support": "^0.5.16" - }, "dependencies": { - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", - "dev": true - } + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.13.12", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "requires": { - "regenerator-runtime": "^0.13.2" + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" + "dependencies": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/traverse": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", - "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.6", - "@babel/helper-function-name": "^7.9.5", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/types": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", - "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.5", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", + "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", "dev": true, - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", "dev": true, - "optional": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.9.0", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-resolve-dependencies": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "jest-watcher": "^24.9.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "strip-ansi": "^5.0.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", "dev": true, - "requires": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/reporters": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", + "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", "dev": true, - "optional": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.2.6", - "jest-haste-map": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.4.2", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "dev": true, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/test-sequencer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", - "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", "dev": true, - "requires": { - "@jest/test-result": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@moneybutton/brfc": { - "version": "0.38.3", - "resolved": "https://registry.npmjs.org/@moneybutton/brfc/-/brfc-0.38.3.tgz", - "integrity": "sha512-XR/mtB/PWVOU5MfVBMKPxmzc0Taz992u6nOigt9bkjcHHBgrAFxVi7sKRe8G1C17+5ExXVCHXRAanBFziqkjzA==", - "requires": { - "@babel/runtime": "7.5.5", - "isomorphic-fetch": "2.2.1", - "moment": "2.24.0" + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@rollup/plugin-commonjs": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.1.tgz", - "integrity": "sha512-SaVUoaLDg3KnIXC5IBNIspr1APTYDzk05VaYcI6qz+0XX3ZlSCwAkfAhNSOxfd5GAdcm/63Noi4TowOY9MpcDg==", + "node_modules/@babel/polyfill": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", + "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", + "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", "dev": true, - "requires": { - "@rollup/pluginutils": "^3.0.0", - "estree-walker": "^0.6.1", - "is-reference": "^1.1.2", - "magic-string": "^0.25.2", - "resolve": "^1.11.0" + "dependencies": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" } }, - "@rollup/plugin-node-resolve": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.0.0.tgz", - "integrity": "sha512-+vOx2+WMBMFotYKM3yYeDGZxIvcQ7yO4g+SuKDFsjKaq8Lw3EPgfB6qNlp8Z/3ceDCEhHvC9/b+PgBGwDQGbzQ==", + "node_modules/@babel/preset-env": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz", + "integrity": "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==", "dev": true, - "requires": { - "@rollup/pluginutils": "^3.0.0", - "@types/resolve": "0.0.8", - "builtin-modules": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.11.1" + "dependencies": { + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-async-generator-functions": "^7.14.2", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-class-static-block": "^7.13.11", + "@babel/plugin-proposal-dynamic-import": "^7.14.2", + "@babel/plugin-proposal-export-namespace-from": "^7.14.2", + "@babel/plugin-proposal-json-strings": "^7.14.2", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", + "@babel/plugin-proposal-numeric-separator": "^7.14.2", + "@babel/plugin-proposal-object-rest-spread": "^7.14.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", + "@babel/plugin-proposal-optional-chaining": "^7.14.2", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.14.2", + "@babel/plugin-transform-classes": "^7.14.2", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.14.2", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.14.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.14.2", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.2", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@rollup/plugin-replace": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.0.tgz", - "integrity": "sha512-rzWAMqXAHC1w3eKpK6LxRqiF4f3qVFaa1sGii6Bp3rluKcwHNOpPt+hWRCmAH6SDEPtbPiLFf0pfNQyHs6Btlg==", + "node_modules/@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dev": true, - "requires": { - "magic-string": "^0.25.2", - "rollup-pluginutils": "^2.6.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@rollup/pluginutils": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.10.tgz", - "integrity": "sha512-d44M7t+PjmMrASHbhgpSbVgtL6EFyX7J4mYxwQ/c5eoaE6N2VgCgEcWVzNnwycIloti+/MpwFr8qfw+nRw00sw==", + "node_modules/@babel/register": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", + "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", "dependencies": { - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - } + "regenerator-runtime": "^0.13.4" } }, - "@types/babel__core": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.7.tgz", - "integrity": "sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw==", + "node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" } }, - "@types/babel__generator": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", - "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", + "node_modules/@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "dev": true, - "requires": { - "@babel/types": "^7.0.0" + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" } }, - "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "node_modules/@babel/types": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" } }, - "@types/babel__traverse": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.11.tgz", - "integrity": "sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q==", + "node_modules/@eslint/eslintrc": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", "dev": true, - "requires": { - "@babel/types": "^7.3.0" + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@types/istanbul-lib-coverage": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.2.tgz", - "integrity": "sha512-rsZg7eL+Xcxsxk2XlBt9KcG8nOp9iYdKCOikY9x2RFJCyOdNj4MKPQty0e8oZr29vVAzKXr1BmR+kZauti3o1w==", - "dev": true + "node_modules/@moneybutton/brfc": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@moneybutton/brfc/-/brfc-0.38.6.tgz", + "integrity": "sha512-/YubO3q1X+gNOHEmT8D0LuOJiEEXEU48y/TY9UHLOoAXHrS5cGUwD737LRBnAoDIN/dQlVuqYMj28I3hCfnBWg==", + "dependencies": { + "@babel/runtime": "7.5.5", + "bsv": "2.0.7", + "isomorphic-fetch": "2.2.1", + "moment": "2.24.0" + } }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "node_modules/@moneybutton/brfc/node_modules/@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "dependencies": { + "regenerator-runtime": "^0.13.2" + } + }, + "node_modules/@moneybutton/brfc/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, + "node_modules/@moneybutton/brfc/node_modules/bsv": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/bsv/-/bsv-2.0.7.tgz", + "integrity": "sha512-DggeThbzCpjWhMnRF00dB/+MOCrWymNzgXu/YBds4Gh0bqeGd9XxTxahberVbLf7ejRSCTpuyctiku00MD03EA==", + "dependencies": { + "aes": "0.1.0", + "bitcoin-elliptic": "^7.0.1", + "bn.js": "^5.1.1", + "bs58": "4.0.1", + "chai": "^4.2.0", + "hash.js": "^1.1.7", + "is-hex": "1.1.3", + "pbkdf2": "3.1.1", + "randombytes": "^2.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@moneybutton/brfc/node_modules/isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "node_modules/@moneybutton/brfc/node_modules/moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", + "engines": { + "node": "*" + } + }, + "node_modules/@moneybutton/brfc/node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/@moneybutton/brfc/node_modules/pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz", + "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==", "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" } }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "node_modules/@rollup/plugin-commonjs": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.0.tgz", + "integrity": "sha512-adTpD6ATGbehdaQoZQ6ipDFhdjqsTgpOAhFiPwl+dzre4pPshsecptDPyEFb61JMJ1+mGljktaC4jI8ARMSNyw==", "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.38.3" } }, - "@types/node": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.1.tgz", - "integrity": "sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA==", - "dev": true + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.0.tgz", + "integrity": "sha512-41X411HJ3oikIDivT5OKe9EZ6ud6DXudtfNrGbC4nniaxx2esiWjkLOzgnZsWq1IM8YIeL2rzRGLZLBjlhnZtQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } }, - "@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" } }, - "@types/stack-utils": { + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", "dev": true }, - "@types/yargs": { - "version": "13.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz", - "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, - "abab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", - "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", + "node_modules/@types/node": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.1.tgz", + "integrity": "sha512-weaeiP4UF4XgF++3rpQhpIJWsCTS4QJw5gvBhQu6cFIxTwyxWIe3xbnrY/o2lTCQ0lsdb8YIUDUvLR4Vuz5rbw==", "dev": true }, - "abort-controller": { + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { + "dependencies": { "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" } }, - "abstract-leveldown": { + "node_modules/abstract-leveldown": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=", "dev": true, - "requires": { - "xtend": "~3.0.0" - }, "dependencies": { - "xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", - "dev": true - } + "xtend": "~3.0.0" } }, - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true + "node_modules/abstract-leveldown/node_modules/xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true, + "engines": { + "node": ">=0.4" + } }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" + "bin": { + "acorn": "bin/acorn" }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - } + "engines": { + "node": ">=0.4.0" } }, - "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", - "dev": true + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true + "node_modules/aes": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/aes/-/aes-0.1.0.tgz", + "integrity": "sha1-dcp863jlNtQ+7xBkn/qhyyrHUJ0=" }, - "aes-js": { + "node_modules/aes-js": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" }, - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "requires": { + "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "ansi-styles": { + "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "requires": { + "dependencies": { "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "anymatch": { + "node_modules/anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, - "requires": { + "optional": true, + "dependencies": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" - }, + } + }, + "node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "argparse": { + "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "requires": { + "dependencies": { "sprintf-js": "~1.0.2" } }, - "arr-diff": { + "node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, - "arr-flatten": { + "node_modules/arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, - "arr-union": { + "node_modules/arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, - "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "node_modules/array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", "dev": true, - "requires": { + "dependencies": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", "is-string": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "array-unique": { + "node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "node_modules/array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", "dev": true, - "requires": { - "safer-buffer": "~2.1.0" + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "node_modules/array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", "dev": true, - "requires": { + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { + "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true + "engines": { + "node": "*" + } }, - "assign-symbols": { + "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "optional": true + "peer": true, + "engines": { + "node": ">=8" + } }, - "async": { + "node_modules/async": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, - "requires": { + "dependencies": { "lodash": "^4.17.14" } }, - "async-each": { + "node_modules/async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true, "optional": true }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { + "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "optional": true, + "bin": { + "atob": "bin/atob.js" }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "engines": { + "node": ">= 4.5.0" } }, - "babel-eslint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz", - "integrity": "sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g==", + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" - } - }, - "babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "dev": true, - "requires": { - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.9.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" } }, - "babel-plugin-dynamic-import-node": { + "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, - "requires": { + "dependencies": { "object.assign": "^4.1.0" } }, - "babel-plugin-istanbul": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", - "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", + "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - }, "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - } + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.0", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "babel-plugin-jest-hoist": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", - "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", + "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", "dev": true, - "requires": { - "@types/babel__traverse": "^7.0.6" + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.0", + "core-js-compat": "^3.9.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "babel-preset-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", - "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", + "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", "dev": true, - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base": { + "node_modules/base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, - "requires": { + "optional": true, + "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", "component-emitter": "^1.2.1", @@ -1736,148 +2030,150 @@ "mixin-deep": "^1.2.0", "pascalcase": "^0.1.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-x": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "safe-buffer": "^5.0.1" } }, - "base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "requires": { - "safe-buffer": "^5.0.1" + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "node_modules/basic-auth": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", + "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=", "dev": true, - "requires": { - "tweetnacl": "^0.14.3" + "engines": { + "node": ">= 0.6" } }, - "bdd-lazy-var": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/bdd-lazy-var/-/bdd-lazy-var-2.5.1.tgz", - "integrity": "sha512-SPF43iKRF2Q1QlzsTQKbNoCk/byBeuirEytFnxCpIgNrWGZigunboyZdh2mFjfWcKsl2jN38Ie7E+OVKzPonmg==", + "node_modules/bdd-lazy-var": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bdd-lazy-var/-/bdd-lazy-var-2.6.1.tgz", + "integrity": "sha512-X3ADwcFji/IHIrYJhTTpaiWhoOx4pl4whdAx1dmvdeUPsMUb7fVYFvf/Q33VEAEAVkEwi5rgNSZ0Y9oOVeQV+A==", "dev": true, - "requires": { - "jasmine-core": "^2.0.0 || ^3.0.0", - "jest": "^20.0.0 || ^22.0.0 || ^23.0.0 || ^24.0.0", - "mocha": "^4.0.0 || ^3.0.0 || ^2.3.0 || ^5.0.0 || ^6.0.0" + "peerDependencies": { + "jasmine": ">=2", + "jasmine-core": ">=2", + "jest": ">=20", + "mocha": ">=2.3" + }, + "peerDependenciesMeta": { + "jasmine": { + "optional": true + }, + "jasmine-core": { + "optional": true + }, + "jest": { + "optional": true + }, + "mocha": { + "optional": true + } } }, - "binary-extensions": { + "node_modules/binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, - "optional": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "bl": { + "node_modules/bitcoin-elliptic": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/bitcoin-elliptic/-/bitcoin-elliptic-7.0.1.tgz", + "integrity": "sha512-eJIERwXIIjJK7gfVoevk0G1CbYbxezZ6ePZXIxngjyI+QQHXWqXMbY+gpxsND8FCLvWl050fw6W+PVZge5fBHw==", + "dependencies": { + "bn.js": "^5.1.1", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "node_modules/bitcoin-elliptic/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, + "node_modules/bl": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=", "dev": true, - "requires": { + "dependencies": { "readable-stream": "~1.0.26" - }, + } + }, + "node_modules/bl/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "bn.js": { + "node_modules/bl/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "braces": { + "node_modules/braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "requires": { + "optional": true, + "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", "extend-shallow": "^2.0.1", @@ -1889,58 +2185,27 @@ "split-string": "^3.0.2", "to-regex": "^3.0.1" }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "engines": { + "node": ">=0.10.0" } }, - "brorand": { + "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browser-stdout": { + "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "browserify-aes": { + "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "requires": { + "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", @@ -1949,188 +2214,181 @@ "safe-buffer": "^5.0.1" } }, - "browserify-cipher": { + "node_modules/browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, - "requires": { + "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, - "browserify-des": { + "node_modules/browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "browserify-fs": { + "node_modules/browserify-fs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", "integrity": "sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8=", "dev": true, - "requires": { + "dependencies": { "level-filesystem": "^1.0.1", "level-js": "^2.1.3", "levelup": "^0.18.2" } }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, - "requires": { - "bn.js": "^4.1.0", + "dependencies": { + "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, - "browserify-sign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.1.0.tgz", - "integrity": "sha512-VYxo7cDCeYUoBZ0ZCy4UyEUCP3smyBd4DRQM5nrFS1jJjPJjX7rP3oLRpPoWfkhQfyJ0I9ZbHbKafrFD/SGlrg==", + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", + "elliptic": "^6.5.3", "inherits": "^2.0.4", "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0" - }, + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "dependencies": { - "bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA==", - "dev": true - }, - "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - } - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "browserslist": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", - "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001043", - "electron-to-chromium": "^1.3.413", - "node-releases": "^1.1.53", - "pkg-up": "^2.0.0" + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "bs58": { + "node_modules/bs58": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { + "dependencies": { "base-x": "^3.0.2" } }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "bsv": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bsv/-/bsv-1.5.0.tgz", - "integrity": "sha512-kW98WfxqNmEcNlfnOZQtorHdQNnQOEL0Nx2TASQgfbLexn9ZlLmtIewjmmMdETtnE9EZjn7cFOw2Bh7yiavwbg==", - "requires": { + "node_modules/bsv": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/bsv/-/bsv-1.5.5.tgz", + "integrity": "sha512-tfHFMZjDth424uosNi5rkqo+MET6710mytO8vbETqPlD2yCft7zvKc+1U3xYhjva3tEd8GRJgNcSUcyskLyTLw==", + "dependencies": { "aes-js": "^3.1.2", "bn.js": "=4.11.8", "bs58": "=4.0.1", "clone-deep": "^4.0.1", - "elliptic": "6.4.1", + "elliptic": "6.5.3", "hash.js": "^1.1.7", "inherits": "2.0.3", "unorm": "1.4.1" } }, - "buffer-es6": { + "node_modules/bsv/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/buffer-es6": { "version": "4.9.3", "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz", "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=", "dev": true }, - "buffer-from": { + "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "buffer-xor": { + "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "builtin-modules": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", - "dev": true + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "cache-base": { + "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, - "requires": { + "optional": true, + "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", "get-value": "^2.0.6", @@ -2140,366 +2398,547 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, - "requires": { - "callsites": "^0.2.0" - }, "dependencies": { - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - } + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "callsites": { + "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001061", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001061.tgz", - "integrity": "sha512-SMICCeiNvMZnyXpuoO+ot7FHpMVPlrsR+HmfByj6nY4xYDHXLqMTbgH7ecEkDNXWkH1vaip+ZS0D7VTXwM1KYQ==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", "dev": true, - "requires": { - "rsvp": "^4.8.4" + "engines": { + "node": ">=6" } }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "node_modules/caniuse-lite": { + "version": "1.0.30001228", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", + "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", "dev": true, - "requires": { + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", - "pathval": "^1.1.0", + "pathval": "^1.1.1", "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" } }, - "chalk": { + "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "check-error": { + "node_modules/check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true + "engines": { + "node": "*" + } }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/chokidar/node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "node_modules/chokidar/node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "cipher-base": { + "node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chokidar/node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/chokidar/node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/chokidar/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "class-utils": { + "node_modules/class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, - "requires": { + "optional": true, + "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", "isobject": "^3.0.0", "static-extend": "^0.1.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, - "requires": { - "restore-cursor": "^2.0.0" + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "clone": { + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { "version": "0.1.19", "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "clone-deep": { + "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { + "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "collection-visit": { + "node_modules/collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, - "requires": { + "optional": true, + "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "color-convert": { + "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { + "dependencies": { "color-name": "1.1.3" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "requires": { - "delayed-stream": "~1.0.0" + "engines": { + "node": ">=0.1.90" } }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } }, - "commondir": { + "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "component-emitter": { + "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "dev": true, + "optional": true }, - "concat-map": { + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "concat-stream": { + "node_modules/concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, - "requires": { + "engines": [ + "node >= 0.8" + ], + "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, - "contains-path": { + "node_modules/contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "convert-source-map": { + "node_modules/convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } + "safe-buffer": "~5.1.1" } }, - "copy-descriptor": { + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } }, - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", - "dev": true + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "node_modules/core-js-compat": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", + "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", "dev": true, - "requires": { - "browserslist": "^4.8.5", + "dependencies": { + "browserslist": "^4.16.6", "semver": "7.0.0" }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "core-util-is": { + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "corser": { + "node_modules/corser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4.0" + } }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "elliptic": "^6.5.3" } }, - "create-hash": { + "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", @@ -2507,12 +2946,11 @@ "sha.js": "^2.4.0" } }, - "create-hmac": { + "node_modules/create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { + "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", @@ -2521,25 +2959,26 @@ "sha.js": "^2.4.8" } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "crypto-browserify": { + "node_modules/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, - "requires": { + "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", @@ -2551,311 +2990,209 @@ "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" } }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, "dependencies": { - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "requires": { - "ms": "2.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "debug-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { + "node_modules/decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10" + } }, - "deep-eql": { + "node_modules/deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { + "dependencies": { "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" } }, - "deep-is": { + "node_modules/deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "deferred-leveldown": { + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deferred-leveldown": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=", "dev": true, - "requires": { + "dependencies": { "abstract-leveldown": "~0.12.1" } }, - "define-properties": { + "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, - "requires": { + "dependencies": { "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" } }, - "define-property": { + "node_modules/define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, - "requires": { + "optional": true, + "dependencies": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "deglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz", - "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", - "dev": true, - "requires": { - "find-root": "^1.0.0", - "glob": "^7.0.5", - "ignore": "^3.0.9", - "pkg-config": "^1.1.0", - "run-parallel": "^1.1.2", - "uniq": "^1.0.1" - }, - "dependencies": { - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "des.js": { + "node_modules/des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", - "dev": true + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } }, - "diffie-hellman": { + "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, - "requires": { + "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" } }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { + "dependencies": { "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" + "engines": { + "node": ">=10" } }, - "dotenv": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", - "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", - "dev": true - }, - "dotenv-cli": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-2.0.1.tgz", - "integrity": "sha512-RnjvnE+r27ni9j93w1ddMs9mQgxWlRozSfby7M4xVDJ5/DgLOFFAP92JrmXHkpn8dXCy+OObRx+w5wx0Dc3yww==", + "node_modules/dotenv-cli": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-4.0.0.tgz", + "integrity": "sha512-ByKEec+ashePEXthZaA1fif9XDtcaRnkN7eGdBDx3HHRjwZ/rA1go83Cbs4yRrx3JshsCf96FjAyIA2M672+CQ==", "dev": true, - "requires": { - "cross-spawn": "^4.0.0", - "dotenv": "^7.0.0", - "dotenv-expand": "^5.0.0", + "dependencies": { + "cross-spawn": "^7.0.1", + "dotenv": "^8.1.0", + "dotenv-expand": "^5.1.0", "minimist": "^1.1.3" }, - "dependencies": { - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - } + "bin": { + "dotenv": "cli.js" } }, - "dotenv-expand": { + "node_modules/dotenv-expand": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecstatic": { + "node_modules/ecstatic": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", "dev": true, - "requires": { + "dependencies": { "he": "^1.1.1", "mime": "^1.6.0", "minimist": "^1.1.0", "url-join": "^2.0.5" + }, + "bin": { + "ecstatic": "lib/ecstatic.js" } }, - "electron-to-chromium": { - "version": "1.3.441", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.441.tgz", - "integrity": "sha512-leBfJwLuyGs1jEei2QioI+PjVMavmUIvPYidE8dCCYWLAq0uefhN3NYgDNb8WxD3uiUNnJ3ScMXg0upSlwySzQ==", + "node_modules/electron-to-chromium": { + "version": "1.3.735", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.735.tgz", + "integrity": "sha512-cp7MWzC3NseUJV2FJFgaiesdrS+A8ZUjX5fLAxdRlcaPDkaPGFplX930S5vf84yqDp4LjuLdKouWuVOTwUfqHQ==", "dev": true }, - "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "requires": { + "node_modules/elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "dependencies": { "bn.js": "^4.4.0", "brorand": "^1.0.1", "hash.js": "^1.0.0", @@ -2865,2213 +3202,10196 @@ "minimalistic-crypto-utils": "^1.0.0" } }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dependencies": { + "iconv-lite": "^0.6.2" } }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, - "requires": { - "once": "^1.4.0" + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" } }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, - "requires": { + "dependencies": { "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" } }, - "error-ex": { + "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { + "dependencies": { "is-arrayish": "^0.2.1" } }, - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "node_modules/es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, - "requires": { + "dependencies": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "es-to-primitive": { + "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "requires": { + "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "escape-string-regexp": { + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", - "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } + "engines": { + "node": ">=0.8.0" } }, - "eslint": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.4.0.tgz", - "integrity": "sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==", + "node_modules/eslint": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", + "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", "dev": true, - "requires": { - "ajv": "^6.5.0", - "babel-code-frame": "^6.26.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^4.0.0", - "esquery": "^1.0.1", + "peer": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.2", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^5.2.0", - "is-resolvable": "^1.1.0", - "js-yaml": "^3.11.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.5", + "levn": "^0.4.1", + "lodash": "^4.17.21", "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", + "optionator": "^0.9.1", "progress": "^2.0.0", - "regexpp": "^2.0.0", - "require-uncached": "^1.0.3", - "semver": "^5.5.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^4.0.3", - "text-table": "^0.2.0" + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-standard": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", + "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1" + } + }, + "node_modules/eslint-config-standard-jsx": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", + "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-react": "^7.21.5" } }, - "eslint-config-standard": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", - "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", - "dev": true - }, - "eslint-config-standard-jsx": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz", - "integrity": "sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz", - "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", "dev": true, - "requires": { + "dependencies": { "debug": "^2.6.9", "resolve": "^1.13.1" } }, - "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "requires": { - "debug": "^2.6.9", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/eslint-module-utils": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", + "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", "pkg-dir": "^2.0.0" }, - "dependencies": { - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - } + "engines": { + "node": ">=4" } }, - "eslint-plugin-es": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz", - "integrity": "sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "requires": { - "eslint-utils": "^1.4.2", - "regexpp": "^2.0.1" + "dependencies": { + "ms": "^2.1.1" } }, - "eslint-plugin-import": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", - "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, - "requires": { - "contains-path": "^0.1.0", - "debug": "^2.6.8", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", - "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" + "dependencies": { + "locate-path": "^2.0.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - } + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "eslint-plugin-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz", - "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==", + "node_modules/eslint-module-utils/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "requires": { - "eslint-plugin-es": "^1.3.1", - "eslint-utils": "^1.3.1", - "ignore": "^4.0.2", - "minimatch": "^3.0.4", - "resolve": "^1.8.1", - "semver": "^5.5.0" + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "eslint-plugin-promise": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", - "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", - "dev": true + "node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } }, - "eslint-plugin-react": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", - "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", + "node_modules/eslint-module-utils/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, - "requires": { - "array-includes": "^3.0.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", - "prop-types": "^15.6.2" + "engines": { + "node": ">=4" } }, - "eslint-plugin-standard": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz", - "integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==", - "dev": true + "node_modules/eslint-module-utils/node_modules/pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "node_modules/eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" + "dependencies": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" } }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } }, - "espree": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", - "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, - "requires": { - "acorn": "^6.0.2", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - }, "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - } + "esutils": "^2.0.2", + "isarray": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, "dependencies": { - "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", - "dev": true - } + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" } }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "node_modules/eslint-plugin-node/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true, - "requires": { - "estraverse": "^4.1.0" + "engines": { + "node": ">= 4" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "node_modules/eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + "node_modules/eslint-plugin-react": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", + "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + } }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "engines": { + "node": ">=4" } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, + "peer": true, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "expect": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", - "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.9.0" + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, + "peer": true, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" + "peer": true + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, + "peer": true, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "node_modules/eslint/node_modules/globals": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", "dev": true, - "requires": { - "bser": "2.1.1" + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" + "peer": true, + "engines": { + "node": ">=8" } }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "node_modules/eslint/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "optional": true + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "peer": true, + "engines": { + "node": ">=10" }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "requires": { - "locate-path": "^2.0.0" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" } }, - "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, - "requires": { - "is-buffer": "~2.0.3" - }, "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - } + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, - "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "engines": { + "node": ">=4.0" } }, - "follow-redirects": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz", - "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "requires": { - "debug": "^3.0.0" - }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "engines": { + "node": ">=0.10.0" } }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "optional": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "peer": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "peer": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true, + "peer": true + }, + "node_modules/follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, + "optional": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/fwd-stream": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", + "integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=", + "dev": true, + "dependencies": { + "readable-stream": "~1.0.26-4" + } + }, + "node_modules/fwd-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/fwd-stream/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/fwd-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "optional": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-server": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz", + "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", + "dev": true, + "dependencies": { + "basic-auth": "^1.0.3", + "colors": "^1.4.0", + "corser": "^2.0.1", + "ecstatic": "^3.3.2", + "http-proxy": "^1.18.0", + "minimist": "^1.2.5", + "opener": "^1.5.1", + "portfinder": "^1.0.25", + "secure-compare": "3.0.1", + "union": "~0.5.0" + }, + "bin": { + "hs": "bin/http-server", + "http-server": "bin/http-server" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idb-wrapper": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", + "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", + "dev": true + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", + "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "optional": true + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-hex/-/is-hex-1.1.3.tgz", + "integrity": "sha1-RAJZwHloHgNy5SFWqmeiM8OXXe4=", + "deprecated": "Development of this module has been stopped." + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-object": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", + "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=", + "dev": true + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isbuffer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", + "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "dependencies": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/level-blobs": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", + "integrity": "sha1-mrm5e7mfHtv594o0M+Ie1WOGva8=", + "dev": true, + "dependencies": { + "level-peek": "1.0.6", + "once": "^1.3.0", + "readable-stream": "^1.0.26-4" + } + }, + "node_modules/level-blobs/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/level-blobs/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/level-blobs/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/level-filesystem": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", + "integrity": "sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M=", + "dev": true, + "dependencies": { + "concat-stream": "^1.4.4", + "errno": "^0.1.1", + "fwd-stream": "^1.0.4", + "level-blobs": "^0.1.7", + "level-peek": "^1.0.6", + "level-sublevel": "^5.2.0", + "octal": "^1.0.0", + "once": "^1.3.0", + "xtend": "^2.2.0" + } + }, + "node_modules/level-fix-range": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", + "integrity": "sha1-vxW5Fa422EcMgh6IPd95zRZCCCg=", + "dev": true + }, + "node_modules/level-hooks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", + "integrity": "sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM=", + "dev": true, + "dependencies": { + "string-range": "~1.2" + } + }, + "node_modules/level-js": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", + "integrity": "sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=", + "dev": true, + "dependencies": { + "abstract-leveldown": "~0.12.0", + "idb-wrapper": "^1.5.0", + "isbuffer": "~0.0.0", + "ltgt": "^2.1.2", + "typedarray-to-buffer": "~1.0.0", + "xtend": "~2.1.2" + } + }, + "node_modules/level-js/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "node_modules/level-js/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/level-peek": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", + "integrity": "sha1-vsUccqgu5GTTNkNMfIdsP8vM538=", + "dev": true, + "dependencies": { + "level-fix-range": "~1.0.2" + } + }, + "node_modules/level-sublevel": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", + "integrity": "sha1-dEwSxy0ucr543eO5tc2E1iGRQTo=", + "dev": true, + "dependencies": { + "level-fix-range": "2.0", + "level-hooks": ">=4.4.0 <5", + "string-range": "~1.2.1", + "xtend": "~2.0.4" + } + }, + "node_modules/level-sublevel/node_modules/level-fix-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", + "integrity": "sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug=", + "dev": true, + "dependencies": { + "clone": "~0.1.9" + } + }, + "node_modules/level-sublevel/node_modules/object-keys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", + "integrity": "sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=", + "deprecated": "Please update to the latest object-keys", + "dev": true, + "dependencies": { + "foreach": "~2.0.1", + "indexof": "~0.0.1", + "is": "~0.2.6" + } + }, + "node_modules/level-sublevel/node_modules/xtend": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", + "integrity": "sha1-XqZXptukRwacLlnFihE4ywxebO4=", + "dev": true, + "dependencies": { + "is-object": "~0.1.2", + "object-keys": "~0.2.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levelup": { + "version": "0.18.6", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", + "integrity": "sha1-5qAcsIlhbI7MApHCqb0/DETj5es=", + "dev": true, + "dependencies": { + "bl": "~0.8.1", + "deferred-leveldown": "~0.2.0", + "errno": "~0.1.1", + "prr": "~0.0.0", + "readable-stream": "~1.0.26", + "semver": "~2.3.1", + "xtend": "~3.0.0" + } + }, + "node_modules/levelup/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/levelup/node_modules/prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + }, + "node_modules/levelup/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/levelup/node_modules/semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/levelup/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/levelup/node_modules/xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true, + "peer": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true, + "peer": true + }, + "node_modules/log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "optional": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "optional": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 10.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "optional": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-releases": { + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "optional": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "optional": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "optional": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/octal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", + "integrity": "sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws=", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true, + "optional": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "dependencies": { + "pify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-conf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-es6": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz", + "integrity": "sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g=", + "dev": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "dependencies": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true, + "optional": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true, + "optional": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "2.48.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.48.0.tgz", + "integrity": "sha512-wl9ZSSSsi5579oscSDYSzGn092tCS076YB+TQrzsGuSfYyJeep8eEWj0eaRjuC5McuMNmcnR8icBqiE/FWNB1A==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/rollup-plugin-babel": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", + "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel.", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.8.1" + }, + "peerDependencies": { + "@babel/core": "7 || ^7.0.0-rc.2", + "rollup": ">=0.60.0 <3" + } + }, + "node_modules/rollup-plugin-node-builtins": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz", + "integrity": "sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k=", + "dev": true, + "dependencies": { + "browserify-fs": "^1.0.0", + "buffer-es6": "^4.9.2", + "crypto-browserify": "^3.11.0", + "process-es6": "^0.11.2" + } + }, + "node_modules/rollup-plugin-node-globals": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz", + "integrity": "sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==", + "dev": true, + "dependencies": { + "acorn": "^5.7.3", + "buffer-es6": "^4.9.3", + "estree-walker": "^0.5.2", + "magic-string": "^0.22.5", + "process-es6": "^0.11.6", + "rollup-pluginutils": "^2.3.1" + } + }, + "node_modules/rollup-plugin-node-globals/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/rollup-plugin-node-globals/node_modules/estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, + "node_modules/rollup-plugin-node-globals/node_modules/magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "dependencies": { + "vlq": "^0.2.2" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "optional": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "dev": true, + "dependencies": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "node_modules/should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "dependencies": { + "should-type": "^1.4.0" + } + }, + "node_modules/should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "dev": true, + "dependencies": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "node_modules/should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "dev": true + }, + "node_modules/should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "dependencies": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "node_modules/should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "optional": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "optional": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "optional": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true, + "optional": true + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.8.tgz", + "integrity": "sha512-NDgA96EnaLSvtbM7trJj+t1LUR3pirkDCcz9nOUlPb5DMBGsH7oES6C3hs3j7R9oHEa1EMvReS/BUAIT5Tcr0g==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/standard": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/standard/-/standard-16.0.3.tgz", + "integrity": "sha512-70F7NH0hSkNXosXRltjSv6KpTAOkUkSfyu3ynyM5dtRUiLtR+yX9EGZ7RKwuGUqCJiX/cnkceVM6HTZ4JpaqDg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "eslint": "~7.13.0", + "eslint-config-standard": "16.0.2", + "eslint-config-standard-jsx": "10.0.0", + "eslint-plugin-import": "~2.22.1", + "eslint-plugin-node": "~11.1.0", + "eslint-plugin-promise": "~4.2.1", + "eslint-plugin-react": "~7.21.5", + "standard-engine": "^14.0.1" + }, + "bin": { + "standard": "bin/cmd.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/standard-engine": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz", + "integrity": "sha512-7FEzDwmHDOGva7r9ifOzD3BGdTbA7ujJ50afLVdW/tK14zQEptJjbFuUfn50irqdHDcTbNh0DTIoMPynMCXb0Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "get-stdin": "^8.0.0", + "minimist": "^1.2.5", + "pkg-conf": "^3.1.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8.10" + } + }, + "node_modules/standard/node_modules/@eslint/eslintrc": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/standard/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/standard/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/standard/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/standard/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/standard/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/standard/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/standard/node_modules/eslint": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", + "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/standard/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/standard/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/standard/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/standard/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/standard/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/standard/node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/slice-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/standard/node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/standard/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/standard/node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/standard/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/standard/node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "optional": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-range": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", + "integrity": "sha1-qJPtNH5yKZvIO++78qaSqNI51d0=", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", + "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "optional": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", + "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dev": true, + "dependencies": { + "qs": "^6.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unorm": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", + "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "optional": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "optional": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "optional": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true, + "optional": true + }, + "node_modules/url-join": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/cli": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.3.tgz", + "integrity": "sha512-zU4JLvwk32ay1lhhyGfqiRUSPoltVDjhYkA3aQq8+Yby9z30s/EsFw1EPOHxWG9YZo2pAGfgdRNeHZQAYU5m9A==", + "dev": true, + "requires": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", + "chokidar": "^3.4.0", + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "make-dir": "^2.1.0", + "slash": "^2.0.0", + "source-map": "^0.5.0" + } + }, + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/compat-data": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "dev": true + }, + "@babel/core": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", + "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.14.3", + "@babel/helper-split-export-declaration": "^7.12.13" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", + "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", + "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", + "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" + } + }, + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", + "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "dev": true + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", + "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.13.12" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", + "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", + "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.3", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", + "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", + "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", + "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", + "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", + "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", + "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", + "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.2" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", + "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", + "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz", + "integrity": "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz", + "integrity": "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", + "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", + "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.13.12", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", + "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", + "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "semver": "^6.3.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/polyfill": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", + "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", + "dev": true, + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/preset-env": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz", + "integrity": "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-async-generator-functions": "^7.14.2", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-class-static-block": "^7.13.11", + "@babel/plugin-proposal-dynamic-import": "^7.14.2", + "@babel/plugin-proposal-export-namespace-from": "^7.14.2", + "@babel/plugin-proposal-json-strings": "^7.14.2", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", + "@babel/plugin-proposal-numeric-separator": "^7.14.2", + "@babel/plugin-proposal-object-rest-spread": "^7.14.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", + "@babel/plugin-proposal-optional-chaining": "^7.14.2", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.14.2", + "@babel/plugin-transform-classes": "^7.14.2", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.14.2", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.14.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.14.2", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.2", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/register": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", + "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + } + }, + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "@eslint/eslintrc": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "dev": true, + "peer": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "peer": true, + "requires": { + "type-fest": "^0.8.1" + } + } + } + }, + "@moneybutton/brfc": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@moneybutton/brfc/-/brfc-0.38.6.tgz", + "integrity": "sha512-/YubO3q1X+gNOHEmT8D0LuOJiEEXEU48y/TY9UHLOoAXHrS5cGUwD737LRBnAoDIN/dQlVuqYMj28I3hCfnBWg==", + "requires": { + "@babel/runtime": "7.5.5", + "bsv": "2.0.7", + "isomorphic-fetch": "2.2.1", + "moment": "2.24.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, + "bsv": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/bsv/-/bsv-2.0.7.tgz", + "integrity": "sha512-DggeThbzCpjWhMnRF00dB/+MOCrWymNzgXu/YBds4Gh0bqeGd9XxTxahberVbLf7ejRSCTpuyctiku00MD03EA==", + "requires": { + "aes": "0.1.0", + "bitcoin-elliptic": "^7.0.1", + "bn.js": "^5.1.1", + "bs58": "4.0.1", + "chai": "^4.2.0", + "hash.js": "^1.1.7", + "is-hex": "1.1.3", + "pbkdf2": "3.1.1", + "randombytes": "^2.1.0" + } + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + } + } + }, + "@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz", + "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "@rollup/plugin-commonjs": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.0.tgz", + "integrity": "sha512-adTpD6ATGbehdaQoZQ6ipDFhdjqsTgpOAhFiPwl+dzre4pPshsecptDPyEFb61JMJ1+mGljktaC4jI8ARMSNyw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.0.tgz", + "integrity": "sha512-41X411HJ3oikIDivT5OKe9EZ6ud6DXudtfNrGbC4nniaxx2esiWjkLOzgnZsWq1IM8YIeL2rzRGLZLBjlhnZtQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + } + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/node": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.1.tgz", + "integrity": "sha512-weaeiP4UF4XgF++3rpQhpIJWsCTS4QJw5gvBhQu6cFIxTwyxWIe3xbnrY/o2lTCQ0lsdb8YIUDUvLR4Vuz5rbw==", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "abstract-leveldown": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", + "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=", + "dev": true, + "requires": { + "xtend": "~3.0.0" + }, + "dependencies": { + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true + } + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "requires": {} + }, + "aes": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/aes/-/aes-0.1.0.tgz", + "integrity": "sha1-dcp863jlNtQ+7xBkn/qhyyrHUJ0=" + }, + "aes-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "optional": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "optional": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "optional": true + }, + "array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + } + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "optional": true + }, + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "optional": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "peer": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true, + "optional": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "optional": true + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", + "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.0", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", + "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.0", + "core-js-compat": "^3.9.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", + "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "optional": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "base-x": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "basic-auth": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", + "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=", + "dev": true + }, + "bdd-lazy-var": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bdd-lazy-var/-/bdd-lazy-var-2.6.1.tgz", + "integrity": "sha512-X3ADwcFji/IHIrYJhTTpaiWhoOx4pl4whdAx1dmvdeUPsMUb7fVYFvf/Q33VEAEAVkEwi5rgNSZ0Y9oOVeQV+A==", + "dev": true, + "requires": {} + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "bitcoin-elliptic": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/bitcoin-elliptic/-/bitcoin-elliptic-7.0.1.tgz", + "integrity": "sha512-eJIERwXIIjJK7gfVoevk0G1CbYbxezZ6ePZXIxngjyI+QQHXWqXMbY+gpxsND8FCLvWl050fw6W+PVZge5fBHw==", + "requires": { + "bn.js": "^5.1.1", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + } + } + }, + "bl": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", + "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=", + "dev": true, + "requires": { + "readable-stream": "~1.0.26" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", + "integrity": "sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8=", + "dev": true, + "requires": { + "level-filesystem": "^1.0.1", + "level-js": "^2.1.3", + "levelup": "^0.18.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + } + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "^3.0.2" + } + }, + "bsv": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/bsv/-/bsv-1.5.5.tgz", + "integrity": "sha512-tfHFMZjDth424uosNi5rkqo+MET6710mytO8vbETqPlD2yCft7zvKc+1U3xYhjva3tEd8GRJgNcSUcyskLyTLw==", + "requires": { + "aes-js": "^3.1.2", + "bn.js": "=4.11.8", + "bs58": "=4.0.1", + "clone-deep": "^4.0.1", + "elliptic": "6.5.3", + "hash.js": "^1.1.7", + "inherits": "2.0.3", + "unorm": "1.4.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "buffer-es6": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz", + "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "optional": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001228", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", + "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", + "dev": true + }, + "chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "optional": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + } + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", + "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "optional": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "optional": true + }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + }, + "core-js-compat": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", + "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", + "dev": true + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "optional": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "deferred-leveldown": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", + "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=", + "dev": true, + "requires": { + "abstract-leveldown": "~0.12.1" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "optional": true, "requires": { - "map-cache": "^0.2.2" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" } }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, - "optional": true, "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "dev": true }, - "fwd-stream": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", - "integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=", + "dotenv-cli": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-4.0.0.tgz", + "integrity": "sha512-ByKEec+ashePEXthZaA1fif9XDtcaRnkN7eGdBDx3HHRjwZ/rA1go83Cbs4yRrx3JshsCf96FjAyIA2M672+CQ==", "dev": true, "requires": { - "readable-stream": "~1.0.26-4" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "cross-spawn": "^7.0.1", + "dotenv": "^8.1.0", + "dotenv-expand": "^5.1.0", + "minimist": "^1.1.3" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "ecstatic": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", + "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", + "dev": true, + "requires": { + "he": "^1.1.1", + "mime": "^1.6.0", + "minimist": "^1.1.0", + "url-join": "^2.0.5" + } + }, + "electron-to-chromium": { + "version": "1.3.735", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.735.tgz", + "integrity": "sha512-cp7MWzC3NseUJV2FJFgaiesdrS+A8ZUjX5fLAxdRlcaPDkaPGFplX930S5vf84yqDp4LjuLdKouWuVOTwUfqHQ==", "dev": true }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { - "pump": "^3.0.0" + "ansi-colors": "^4.1.1" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "is-arrayish": "^0.2.1" } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "optional": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true + "eslint": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", + "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", + "dev": true, + "peer": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "peer": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "peer": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "peer": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "dev": true, + "peer": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "peer": true + } + } }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "eslint-config-standard": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", + "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", "dev": true, - "optional": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true + "requires": {} }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "eslint-config-standard-jsx": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", + "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } + "requires": {} }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", "dev": true, "requires": { - "function-bind": "^1.1.1" + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "eslint-module-utils": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", + "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "debug": "^3.2.7", + "pkg-dir": "^2.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } } } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" } }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" }, "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" }, "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } } } }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", "dev": true }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "eslint-plugin-react": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", + "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", + "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + } } }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "whatwg-encoding": "^1.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" } }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "optional": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "eslint-visitor-keys": "^1.1.0" } }, - "http-server": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.11.1.tgz", - "integrity": "sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w==", + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { - "colors": "1.0.3", - "corser": "~2.0.0", - "ecstatic": "^3.0.0", - "http-proxy": "^1.8.1", - "opener": "~1.4.0", - "optimist": "0.6.x", - "portfinder": "^1.0.13", - "union": "~0.4.3" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, - "idb-wrapper": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", - "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "optional": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "inquirer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", - "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, + "optional": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.1.0", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^5.5.2", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, + "optional": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-descriptor": "^0.1.0" } }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, + "optional": true, "requires": { - "ansi-regex": "^3.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true } } }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "optional": true, "requires": { - "loose-envify": "^1.0.0" + "is-extendable": "^0.1.0" } }, - "is": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", - "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, + "optional": true, "requires": { - "kind-of": "^3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, + "optional": true, "requires": { - "is-buffer": "^1.1.5" + "is-descriptor": "^1.0.0" } } } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "peer": true, "requires": { - "ci-info": "^2.0.0" + "flat-cache": "^3.0.4" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, + "optional": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" } }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "peer": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true, + "peer": true + }, + "follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", "dev": true }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true, "optional": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "optional": true, "requires": { - "is-extglob": "^2.1.1" + "map-cache": "^0.2.2" } }, - "is-module": { + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "fwd-stream": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", + "integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "readable-stream": "~1.0.26-4" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true } } }, - "is-object": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", - "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=", + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-reference": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", - "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==", - "dev": true, - "requires": { - "@types/estree": "0.0.39" - } + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { - "has": "^1.0.3" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "optional": true }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, - "optional": true + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, - "isbuffer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", - "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=", + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" + "function-bind": "^1.1.1" } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "optional": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "optional": true, "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "optional": true, "requires": { - "has-flag": "^3.0.0" + "is-buffer": "^1.1.5" } } } }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "optional": true, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "optional": true, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { - "ms": "^2.1.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true } } }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dev": true, - "optional": true, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "requires": { - "html-escaper": "^2.0.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "jasmine-core": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.5.0.tgz", - "integrity": "sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA==", - "dev": true, - "optional": true + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true }, - "jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", - "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", - "dev": true, - "optional": true, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.9.0" - }, - "dependencies": { - "jest-cli": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", - "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", - "dev": true, - "optional": true, - "requires": { - "@jest/core": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^13.3.0" - } - } + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "jest-changed-files": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", - "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, - "optional": true, "requires": { - "@jest/types": "^24.9.0", - "execa": "^1.0.0", - "throat": "^4.0.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, - "jest-config": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", - "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", + "http-server": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz", + "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.9.0", - "@jest/types": "^24.9.0", - "babel-jest": "^24.9.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.9.0", - "jest-environment-node": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.9.0", - "realpath-native": "^1.1.0" + "basic-auth": "^1.0.3", + "colors": "^1.4.0", + "corser": "^2.0.1", + "ecstatic": "^3.3.2", + "http-proxy": "^1.18.0", + "minimist": "^1.2.5", + "opener": "^1.5.1", + "portfinder": "^1.0.25", + "secure-compare": "3.0.1", + "union": "~0.5.0" } }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "dev": true, + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, - "jest-docblock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", - "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", + "idb-wrapper": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", + "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { - "detect-newline": "^2.1.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "jest-each": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", - "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "jest-environment-jsdom": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", - "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0", - "jsdom": "^11.5.1" + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" } }, - "jest-environment-node": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", - "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", + "is": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", + "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, + "optional": true, "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0" + "kind-of": "^6.0.0" } }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", "dev": true }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, + "optional": true, "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" + "binary-extensions": "^1.0.0" } }, - "jest-jasmine2": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", - "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", "dev": true, "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.9.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0", - "throat": "^4.0.0" + "call-bind": "^1.0.2" } }, - "jest-leak-detector": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", - "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true, - "requires": { - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } + "optional": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true }, - "jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" + "has": "^1.0.3" } }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, + "optional": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" + "kind-of": "^6.0.0" } }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, + "optional": true, "requires": { - "@jest/types": "^24.9.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, - "jest-pnp-resolver": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", - "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" + "is-extglob": "^2.1.1" } }, - "jest-resolve-dependencies": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", - "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", + "is-hex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-hex/-/is-hex-1.1.3.tgz", + "integrity": "sha1-RAJZwHloHgNy5SFWqmeiM8OXXe4=" + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "optional": true, "requires": { - "@jest/types": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.9.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "jest-runner": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", - "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-leak-detector": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", - "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^13.3.0" - } + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true + }, + "is-object": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", + "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=", + "dev": true }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, - "jest-snapshot": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", - "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", - "dev": true, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "expect": "^24.9.0", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.9.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "isobject": "^3.0.1" } }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "@types/estree": "*" } }, - "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dev": true, "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" } }, - "jest-watcher": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", - "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "optional": true, "requires": { - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.9.0", - "string-length": "^2.0.0" + "has-symbols": "^1.0.2" } }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "optional": true }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbuffer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", + "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "requires": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5079,55 +13399,15 @@ "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - } - }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -5140,12 +13420,6 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -5158,41 +13432,23 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { "minimist": "^1.2.5" } }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "jsx-ast-utils": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", - "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", "dev": true, "requires": { - "array-includes": "^3.0.3", - "object.assign": "^4.1.0" + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" } }, "kind-of": { @@ -5200,19 +13456,6 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "optional": true - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, "level-blobs": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", @@ -5425,63 +13668,129 @@ } } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", + "parse-json": "^2.2.0", + "pify": "^2.0.0", "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "^5.0.0" } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true, + "peer": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true, + "peer": true + }, "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", "dev": true, "requires": { - "chalk": "^2.0.1" + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "loose-envify": { @@ -5494,13 +13803,12 @@ } }, "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^4.0.0" } }, "ltgt": { @@ -5528,34 +13836,27 @@ "semver": "^5.6.0" }, "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "dev": true, + "optional": true }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, + "optional": true, "requires": { "object-visit": "^1.0.0" } @@ -5564,24 +13865,18 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, + "optional": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -5596,6 +13891,29 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "miller-rabin": { @@ -5614,27 +13932,6 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -5665,6 +13962,7 @@ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, + "optional": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -5675,6 +13973,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, + "optional": true, "requires": { "is-plain-object": "^2.0.4" } @@ -5691,157 +13990,119 @@ } }, "mocha": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", "dev": true, "requires": { - "ansi-colors": "3.2.3", + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", "minimatch": "3.0.4", - "mkdirp": "0.5.4", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { - "p-try": "^2.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "argparse": "^2.0.1" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } } } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", "dev": true }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", - "dev": true, - "optional": true - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, + "optional": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -5854,6 +14115,29 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "natural-compare": { @@ -5862,36 +14146,10 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, "node-modules-regexp": { "version": "1.0.0", @@ -5899,24 +14157,10 @@ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true }, - "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", - "dev": true, - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - } - }, "node-releases": { - "version": "1.1.55", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.55.tgz", - "integrity": "sha512-H3R3YR/8TjT5WPin/wOoHOUPHgvj8leuU/Keta/rwelEQN9pA/S2Dx8/se4pZ2LBxSd0nAGzsNzhqwa77v7F1w==", + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", "dev": true }, "normalize-package-data": { @@ -5929,34 +14173,20 @@ "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "optional": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { @@ -5970,6 +14200,7 @@ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, + "optional": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -5981,15 +14212,58 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, + "optional": true, "requires": { "is-descriptor": "^0.1.0" } }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + } + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -5997,9 +14271,9 @@ } }, "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "dev": true }, "object-keys": { @@ -6013,30 +14287,45 @@ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, + "optional": true, "requires": { "isobject": "^3.0.0" } }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "object.entries": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" } }, "object.pick": { @@ -6044,10 +14333,23 @@ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, + "optional": true, "requires": { "isobject": "^3.0.1" } }, + "object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, "octal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", @@ -6063,152 +14365,87 @@ "wrappy": "1" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, "opener": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", - "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "output-file-sync": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", - "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "is-plain-obj": "^1.1.0", - "mkdirp": "^0.5.1" - } - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "optional": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^1.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "^3.0.2" } }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true, - "optional": true - }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { - "asn1.js": "^4.0.0", + "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", "pbkdf2": "^3.0.3", "safe-buffer": "^5.1.1" } }, "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "error-ex": "^1.2.0" } }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "dev": true, + "optional": true }, "path-dirname": { "version": "1.0.2", @@ -6218,9 +14455,9 @@ "optional": true }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { @@ -6229,16 +14466,10 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { @@ -6248,24 +14479,31 @@ "dev": true }, "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -6275,22 +14513,16 @@ "sha.js": "^2.4.8" } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", "dev": true }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pirates": { @@ -6303,30 +14535,91 @@ } }, "pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - } - }, - "pkg-config": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", - "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", "dev": true, "requires": { - "debug-log": "^1.0.0", - "find-root": "^1.0.0", - "xtend": "^4.0.1" + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" }, "dependencies": { - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", "dev": true } } @@ -6382,55 +14675,34 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true } } }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, "portfinder": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", - "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "requires": { "async": "^2.6.2", "debug": "^3.1.1", - "mkdirp": "^0.5.1" + "mkdirp": "^0.5.5" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, @@ -6438,30 +14710,13 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } + "optional": true }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "process-es6": { @@ -6482,17 +14737,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "prompts": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", - "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", - "dev": true, - "optional": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.4" - } - }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -6510,18 +14754,6 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -6536,16 +14768,6 @@ "safe-buffer": "^5.1.2" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -6553,16 +14775,18 @@ "dev": true }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -6584,67 +14808,67 @@ "dev": true }, "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "^4.0.0", + "load-json-file": "^2.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "path-type": "^2.0.0" } }, "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" }, "dependencies": { "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^2.0.0" } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^3.0.0", + "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "^1.0.0" } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^1.1.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true } } @@ -6684,19 +14908,10 @@ "readable-stream": "^2.0.2" } }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } - }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { @@ -6709,29 +14924,17 @@ } }, "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, "regenerator-transform": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", - "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dev": true, "requires": { - "@babel/runtime": "^7.8.4", - "private": "^0.1.8" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.9.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", - "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - } + "@babel/runtime": "^7.8.4" } }, "regex-not": { @@ -6739,21 +14942,55 @@ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, + "optional": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dev": true, "requires": { "regenerate": "^1.4.0", @@ -6765,15 +15002,15 @@ } }, "regjsgen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", - "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", "dev": true }, "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -6791,67 +15028,22 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "dev": true, + "optional": true }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "optional": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } + "optional": true }, "require-directory": { "version": "2.1.1", @@ -6859,29 +15051,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } - } + "peer": true }, "requires-port": { "version": "1.0.0", @@ -6890,59 +15065,41 @@ "dev": true }, "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "optional": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true, - "optional": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } + "optional": true }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "dev": true, + "optional": true }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "optional": true, + "peer": true, "requires": { "glob": "^7.1.3" } @@ -6951,35 +15108,24 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "rollup": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.29.0.tgz", - "integrity": "sha512-V63Iz0dSdI5qPPN5HmCN6OBRzBFhMqNWcvwgq863JtSCTU6Vdvqq6S2fYle/dSCyoPrBkIP3EIr1RVs3HTRqqg==", + "version": "2.48.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.48.0.tgz", + "integrity": "sha512-wl9ZSSSsi5579oscSDYSzGn092tCS076YB+TQrzsGuSfYyJeep8eEWj0eaRjuC5McuMNmcnR8icBqiE/FWNB1A==", "dev": true, "requires": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - }, - "dependencies": { - "acorn": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", - "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==", - "dev": true - } + "fsevents": "~2.3.1" } }, "rollup-plugin-babel": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.3.3.tgz", - "integrity": "sha512-tKzWOCmIJD/6aKNz0H1GMM+lW1q9KyFubbWzGiOG540zxPPifnEAHTZwjo0g991Y+DyOZcLqBgqOdqazYE5fkw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", + "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", @@ -7012,6 +15158,12 @@ "rollup-pluginutils": "^2.3.1" }, "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + }, "estree-walker": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", @@ -7025,44 +15177,25 @@ "dev": true, "requires": { "vlq": "^0.2.2" - } - } - } - }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true + } + } + } }, - "rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dev": true, "requires": { - "symbol-observable": "1.0.1" + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } } }, "safe-buffer": { @@ -7075,6 +15208,7 @@ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, + "optional": true, "requires": { "ret": "~0.1.10" } @@ -7084,69 +15218,44 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=", "dev": true }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, + "optional": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -7161,362 +15270,712 @@ } }, "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", "dev": true, - "optional": true + "requires": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "requires": { + "should-type": "^1.4.0" + } + }, + "should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "dev": true, + "requires": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "dev": true + }, + "should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "requires": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "optional": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "optional": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, - "should": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.1.tgz", - "integrity": "sha512-l+/NwEMO+DcstsHEwPHRHzC9j4UOE3VQwJGcMWSsD/vqpqHbnQ+1iSHy64Ihmmjx1uiRPD9pFadTSc3MJtXAgw==", + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, + "optional": true, "requires": { - "should-equal": "^2.0.0", - "should-format": "^3.0.3", - "should-type": "^1.4.0", - "should-type-adaptors": "^1.0.1", - "should-util": "^1.0.0" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, - "should-equal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { - "should-type": "^1.4.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "should-format": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true, - "requires": { - "should-type": "^1.3.0", - "should-type-adaptors": "^1.0.1" - } + "optional": true }, - "should-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, - "should-type-adaptors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "should-util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "optional": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "spdx-license-ids": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.8.tgz", + "integrity": "sha512-NDgA96EnaLSvtbM7trJj+t1LUR3pirkDCcz9nOUlPb5DMBGsH7oES6C3hs3j7R9oHEa1EMvReS/BUAIT5Tcr0g==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, + "optional": true, "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "extend-shallow": "^3.0.0" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, + "optional": true, "requires": { - "is-descriptor": "^0.1.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, + "optional": true, "requires": { - "is-extendable": "^0.1.0" + "is-plain-object": "^2.0.4" } } } }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "standard": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/standard/-/standard-16.0.3.tgz", + "integrity": "sha512-70F7NH0hSkNXosXRltjSv6KpTAOkUkSfyu3ynyM5dtRUiLtR+yX9EGZ7RKwuGUqCJiX/cnkceVM6HTZ4JpaqDg==", + "dev": true, + "requires": { + "eslint": "~7.13.0", + "eslint-config-standard": "16.0.2", + "eslint-config-standard-jsx": "10.0.0", + "eslint-plugin-import": "~2.22.1", + "eslint-plugin-node": "~11.1.0", + "eslint-plugin-promise": "~4.2.1", + "eslint-plugin-react": "~7.21.5", + "standard-engine": "^14.0.1" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "@eslint/eslintrc": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "color-convert": "^2.0.1" } }, - "is-data-descriptor": { + "astral-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "color-name": "~1.1.4" } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "eslint": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", + "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + } + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" } } } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "standard": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/standard/-/standard-12.0.1.tgz", - "integrity": "sha512-UqdHjh87OG2gUrNCSM4QRLF5n9h3TFPwrCNyVlkqu31Hej0L/rc8hzKqVvkb2W3x0WMq7PzZdkLfEcBhVOR6lg==", - "dev": true, - "requires": { - "eslint": "~5.4.0", - "eslint-config-standard": "12.0.0", - "eslint-config-standard-jsx": "6.0.2", - "eslint-plugin-import": "~2.14.0", - "eslint-plugin-node": "~7.0.1", - "eslint-plugin-promise": "~4.0.0", - "eslint-plugin-react": "~7.11.1", - "eslint-plugin-standard": "~4.0.0", - "standard-engine": "~9.0.0" - } - }, "standard-engine": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-9.0.0.tgz", - "integrity": "sha512-ZfNfCWZ2Xq67VNvKMPiVMKHnMdvxYzvZkf1AH8/cw2NLDBm5LRsxMqvEJpsjLI/dUosZ3Z1d6JlHDp5rAvvk2w==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz", + "integrity": "sha512-7FEzDwmHDOGva7r9ifOzD3BGdTbA7ujJ50afLVdW/tK14zQEptJjbFuUfn50irqdHDcTbNh0DTIoMPynMCXb0Q==", "dev": true, "requires": { - "deglob": "^2.1.0", - "get-stdin": "^6.0.0", - "minimist": "^1.1.0", - "pkg-conf": "^2.0.0" + "get-stdin": "^8.0.0", + "minimist": "^1.2.5", + "pkg-conf": "^3.1.0", + "xdg-basedir": "^4.0.0" } }, "static-extend": { @@ -7524,6 +15983,7 @@ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, + "optional": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -7534,45 +15994,88 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, + "optional": true, "requires": { "is-descriptor": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true } } }, - "stealthy-require": { + "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "dev": true, - "optional": true, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" + "safe-buffer": "~5.1.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^3.0.0" - } + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, @@ -7583,82 +16086,58 @@ "dev": true }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, - "string.prototype.trimleft": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", - "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "string.prototype.matchall": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", + "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" + "es-abstract": "^1.18.0-next.2", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" } }, - "string.prototype.trimright": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", - "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" } }, "strip-bom": { @@ -7667,125 +16146,64 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "table": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", - "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "ajv": "^6.0.1", - "ajv-keywords": "^3.0.0", - "chalk": "^2.1.0", - "lodash": "^4.17.4", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "peer": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "ajv": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", "dev": true, + "peer": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } + "peer": true } } }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -7797,6 +16215,7 @@ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -7806,6 +16225,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -7817,11 +16237,35 @@ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, + "optional": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "to-regex-range": { @@ -7829,58 +16273,53 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, + "optional": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" } }, "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, "typedarray": { @@ -7895,6 +16334,18 @@ "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=", "dev": true }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -7924,20 +16375,12 @@ "dev": true }, "union": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz", - "integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", "dev": true, "requires": { - "qs": "~2.3.3" - }, - "dependencies": { - "qs": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", - "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=", - "dev": true - } + "qs": "^6.4.0" } }, "union-value": { @@ -7945,6 +16388,7 @@ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, + "optional": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -7952,12 +16396,6 @@ "set-value": "^2.0.1" } }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, "unorm": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", @@ -7968,6 +16406,7 @@ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, + "optional": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -7978,6 +16417,7 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, + "optional": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -7989,6 +16429,7 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, + "optional": true, "requires": { "isarray": "1.0.0" } @@ -7999,7 +16440,8 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true + "dev": true, + "optional": true } } }, @@ -8011,9 +16453,9 @@ "optional": true }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -8023,7 +16465,8 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true + "dev": true, + "optional": true }, "url-join": { "version": "2.0.5", @@ -8035,30 +16478,18 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true + "dev": true, + "optional": true }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "validate-npm-package-license": { @@ -8071,93 +16502,39 @@ "spdx-expression-parse": "^3.0.0" } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "vlq": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "isexe": "^2.0.0" } }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { - "isexe": "^2.0.0" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -8173,6 +16550,12 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -8200,21 +16583,47 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", "dev": true }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } } }, "wrappy": { @@ -8224,38 +16633,18 @@ "dev": true }, "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "requires": { "mkdirp": "^0.5.1" } }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true }, "xtend": { @@ -8265,100 +16654,55 @@ "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - } + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true }, "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index e02609c..2b085b8 100644 --- a/package.json +++ b/package.json @@ -20,43 +20,42 @@ "prepublish": "npm run build:prod", "dev": "yarn build:watch" }, - "repository": "https://github.com/moneybutton/paymail-client", "author": "Yours Inc.", "license": "Open-BSV", "publishConfig": { "access": "public" }, "dependencies": { - "@babel/runtime": "7.5.5", + "@babel/runtime": "7.14.0", "@moneybutton/brfc": "^0.38.3", "abort-controller": "3.0.0", - "bsv": "^1.5.0", - "isomorphic-fetch": "^2.2.1", + "bsv": "^1.5.5", + "isomorphic-fetch": "^3.0.0", "moment": "^2.24.0" }, "devDependencies": { - "@babel/cli": "7.5.5", - "@babel/core": "7.5.5", - "@babel/plugin-proposal-object-rest-spread": "7.5.5", - "@babel/plugin-transform-runtime": "7.5.5", + "@babel/cli": "7.14.3", + "@babel/core": "7.14.3", + "@babel/plugin-proposal-object-rest-spread": "7.14.2", + "@babel/plugin-transform-runtime": "7.14.3", "@babel/polyfill": "^7.10.4", - "@babel/preset-env": "7.5.5", + "@babel/preset-env": "7.14.2", "@babel/register": "^7.10.5", - "@rollup/plugin-commonjs": "11.0.1", - "@rollup/plugin-node-resolve": "7.0.0", - "@rollup/plugin-replace": "2.3.0", - "babel-eslint": "9.0.0", - "bdd-lazy-var": "2.5.1", - "chai": "4.2.0", - "dotenv-cli": "2.0.1", - "http-server": "0.11.1", - "mocha": "6.2.3", - "rollup": "1.29.0", - "rollup-plugin-babel": "4.3.3", + "@rollup/plugin-commonjs": "19.0.0", + "@rollup/plugin-node-resolve": "13.0.0", + "@rollup/plugin-replace": "2.4.2", + "babel-eslint": "10.1.0", + "bdd-lazy-var": "2.6.1", + "chai": "4.3.4", + "dotenv-cli": "4.0.0", + "http-server": "0.12.3", + "mocha": "8.4.0", + "rollup": "2.48.0", + "rollup-plugin-babel": "4.4.0", "rollup-plugin-node-builtins": "2.1.2", "rollup-plugin-node-globals": "1.4.0", - "should": "13.2.1", - "standard": "12.0.1" + "should": "13.2.3", + "standard": "16.0.3" }, "standard": { "globals": [ @@ -68,6 +67,5 @@ "ignore": [ "docs/" ] - }, - "gitHead": "3ac0d2f8bdcd9bbb7b9934b30e92380c6600c95a" + } } From f3b9ae9d962c17b7326136f6fa0e851692e81cc8 Mon Sep 17 00:00:00 2001 From: Long Li Date: Fri, 21 May 2021 22:29:13 +0900 Subject: [PATCH 14/33] =?UTF-8?q?=E5=9B=BA=E5=AE=9Abrfc=E4=B8=BA0.38.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 12886 ++++++-------------------------------------- package.json | 2 +- 2 files changed, 1581 insertions(+), 11307 deletions(-) diff --git a/package-lock.json b/package-lock.json index e45059b..a21f193 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,52 +1,17 @@ { "name": "@moneybutton/paymail-client", "version": "0.38.3", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "@moneybutton/paymail-client", - "version": "0.38.3", - "license": "Open-BSV", - "dependencies": { - "@babel/runtime": "7.14.0", - "@moneybutton/brfc": "^0.38.3", - "abort-controller": "3.0.0", - "bsv": "^1.5.5", - "isomorphic-fetch": "^3.0.0", - "moment": "^2.24.0" - }, - "devDependencies": { - "@babel/cli": "7.14.3", - "@babel/core": "7.14.3", - "@babel/plugin-proposal-object-rest-spread": "7.14.2", - "@babel/plugin-transform-runtime": "7.14.3", - "@babel/polyfill": "^7.10.4", - "@babel/preset-env": "7.14.2", - "@babel/register": "^7.10.5", - "@rollup/plugin-commonjs": "19.0.0", - "@rollup/plugin-node-resolve": "13.0.0", - "@rollup/plugin-replace": "2.4.2", - "babel-eslint": "10.1.0", - "bdd-lazy-var": "2.6.1", - "chai": "4.3.4", - "dotenv-cli": "4.0.0", - "http-server": "0.12.3", - "mocha": "8.4.0", - "rollup": "2.48.0", - "rollup-plugin-babel": "4.4.0", - "rollup-plugin-node-builtins": "2.1.2", - "rollup-plugin-node-globals": "1.4.0", - "should": "13.2.3", - "standard": "16.0.3" - } - }, - "node_modules/@babel/cli": { + "dependencies": { + "@babel/cli": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.3.tgz", "integrity": "sha512-zU4JLvwk32ay1lhhyGfqiRUSPoltVDjhYkA3aQq8+Yby9z30s/EsFw1EPOHxWG9YZo2pAGfgdRNeHZQAYU5m9A==", "dev": true, - "dependencies": { + "requires": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", + "chokidar": "^3.4.0", "commander": "^4.0.1", "convert-source-map": "^1.1.0", "fs-readdir-recursive": "^1.1.0", @@ -54,40 +19,29 @@ "make-dir": "^2.1.0", "slash": "^2.0.0", "source-map": "^0.5.0" - }, - "bin": { - "babel": "bin/babel.js", - "babel-external-helpers": "bin/babel-external-helpers.js" - }, - "optionalDependencies": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", - "chokidar": "^3.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/code-frame": { + "@babel/code-frame": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "dev": true, - "dependencies": { + "requires": { "@babel/highlight": "^7.12.13" } }, - "node_modules/@babel/compat-data": { + "@babel/compat-data": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", "dev": true }, - "node_modules/@babel/core": { + "@babel/core": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", "dev": true, - "dependencies": { + "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.14.3", "@babel/helper-compilation-targets": "^7.13.16", @@ -104,95 +58,110 @@ "semver": "^6.3.0", "source-map": "^0.5.0" }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/@babel/generator": { + "@babel/generator": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.14.2", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { + "@babel/helper-annotate-as-pure": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-explode-assignable-expression": "^7.12.13", "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-compilation-targets": { + "@babel/helper-compilation-targets": { "version": "7.13.16", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", "dev": true, - "dependencies": { + "requires": { "@babel/compat-data": "^7.13.15", "@babel/helper-validator-option": "^7.12.17", "browserslist": "^4.14.5", "semver": "^6.3.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/@babel/helper-create-class-features-plugin": { + "@babel/helper-create-class-features-plugin": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-function-name": "^7.14.2", "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/helper-replace-supers": "^7.14.3", "@babel/helper-split-export-declaration": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { + "@babel/helper-create-regexp-features-plugin": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", "regexpu-core": "^4.7.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-define-polyfill-provider": { + "@babel/helper-define-polyfill-provider": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-module-imports": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", @@ -202,73 +171,93 @@ "resolve": "^1.14.2", "semver": "^6.1.2" }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/@babel/helper-explode-assignable-expression": { + "@babel/helper-explode-assignable-expression": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.13.0" } }, - "node_modules/@babel/helper-function-name": { + "@babel/helper-function-name": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-get-function-arity": "^7.12.13", "@babel/template": "^7.12.13", "@babel/types": "^7.14.2" } }, - "node_modules/@babel/helper-get-function-arity": { + "@babel/helper-get-function-arity": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-hoist-variables": { + "@babel/helper-hoist-variables": { "version": "7.13.16", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", "dev": true, - "dependencies": { + "requires": { "@babel/traverse": "^7.13.15", "@babel/types": "^7.13.16" } }, - "node_modules/@babel/helper-member-expression-to-functions": { + "@babel/helper-member-expression-to-functions": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.13.12" } }, - "node_modules/@babel/helper-module-imports": { + "@babel/helper-module-imports": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.13.12" } }, - "node_modules/@babel/helper-module-transforms": { + "@babel/helper-module-transforms": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-module-imports": "^7.13.12", "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-simple-access": "^7.13.12", @@ -279,573 +268,462 @@ "@babel/types": "^7.14.2" } }, - "node_modules/@babel/helper-optimise-call-expression": { + "@babel/helper-optimise-call-expression": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-plugin-utils": { + "@babel/helper-plugin-utils": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "node_modules/@babel/helper-remap-async-to-generator": { + "@babel/helper-remap-async-to-generator": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-wrap-function": "^7.13.0", "@babel/types": "^7.13.0" } }, - "node_modules/@babel/helper-replace-supers": { + "@babel/helper-replace-supers": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/traverse": "^7.14.2", "@babel/types": "^7.14.2" } }, - "node_modules/@babel/helper-simple-access": { + "@babel/helper-simple-access": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.13.12" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "@babel/helper-skip-transparent-expression-wrappers": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.12.1" } }, - "node_modules/@babel/helper-split-export-declaration": { + "@babel/helper-split-export-declaration": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", "dev": true, - "dependencies": { + "requires": { "@babel/types": "^7.12.13" } }, - "node_modules/@babel/helper-validator-identifier": { + "@babel/helper-validator-identifier": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, - "node_modules/@babel/helper-validator-option": { + "@babel/helper-validator-option": { "version": "7.12.17", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", "dev": true }, - "node_modules/@babel/helper-wrap-function": { + "@babel/helper-wrap-function": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-function-name": "^7.12.13", "@babel/template": "^7.12.13", "@babel/traverse": "^7.13.0", "@babel/types": "^7.13.0" } }, - "node_modules/@babel/helpers": { + "@babel/helpers": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, - "dependencies": { + "requires": { "@babel/template": "^7.12.13", "@babel/traverse": "^7.14.0", "@babel/types": "^7.14.0" } }, - "node_modules/@babel/highlight": { + "@babel/highlight": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, - "node_modules/@babel/parser": { + "@babel/parser": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } + "dev": true }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", "@babel/plugin-proposal-optional-chaining": "^7.13.12" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { + "@babel/plugin-proposal-async-generator-functions": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-remap-async-to-generator": "^7.13.0", "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { + "@babel/plugin-proposal-class-properties": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-class-features-plugin": "^7.13.0", "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { + "@babel/plugin-proposal-class-static-block": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-class-features-plugin": "^7.14.3", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-class-static-block": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { + "@babel/plugin-proposal-dynamic-import": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { + "@babel/plugin-proposal-export-namespace-from": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-json-strings": { + "@babel/plugin-proposal-json-strings": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "@babel/plugin-proposal-logical-assignment-operators": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { + "@babel/plugin-proposal-numeric-separator": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { + "@babel/plugin-proposal-object-rest-spread": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", "dev": true, - "dependencies": { + "requires": { "@babel/compat-data": "^7.14.0", "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "@babel/plugin-proposal-optional-catch-binding": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { + "@babel/plugin-proposal-optional-chaining": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { + "@babel/plugin-proposal-private-methods": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-class-features-plugin": "^7.13.0", "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { + "@babel/plugin-proposal-private-property-in-object": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-create-class-features-plugin": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-private-property-in-object": "^7.14.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "@babel/plugin-proposal-unicode-property-regex": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-regexp-features-plugin": "^7.12.13", "@babel/helper-plugin-utils": "^7.12.13" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { + "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-properties": { + "@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { + "@babel/plugin-syntax-class-static-block": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { + "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { + "@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { + "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { + "@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { + "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { + "@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { + "@babel/plugin-syntax-private-property-in-object": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { + "@babel/plugin-syntax-top-level-await": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { + "@babel/plugin-transform-arrow-functions": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { + "@babel/plugin-transform-async-to-generator": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-module-imports": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-remap-async-to-generator": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { + "@babel/plugin-transform-block-scoped-functions": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { + "@babel/plugin-transform-block-scoping": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz", "integrity": "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { + "@babel/plugin-transform-classes": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz", "integrity": "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-function-name": "^7.14.2", "@babel/helper-optimise-call-expression": "^7.12.13", @@ -853,271 +731,208 @@ "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", "globals": "^11.1.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { + "@babel/plugin-transform-computed-properties": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-destructuring": { + "@babel/plugin-transform-destructuring": { "version": "7.13.17", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { + "@babel/plugin-transform-dotall-regex": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-regexp-features-plugin": "^7.12.13", "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { + "@babel/plugin-transform-duplicate-keys": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { + "@babel/plugin-transform-exponentiation-operator": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-for-of": { + "@babel/plugin-transform-for-of": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-function-name": { + "@babel/plugin-transform-function-name": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-function-name": "^7.12.13", "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-literals": { + "@babel/plugin-transform-literals": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { + "@babel/plugin-transform-member-expression-literals": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-amd": { + "@babel/plugin-transform-modules-amd": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-module-transforms": "^7.14.2", "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { + "@babel/plugin-transform-modules-commonjs": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-simple-access": "^7.13.12", "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { + "@babel/plugin-transform-modules-systemjs": { "version": "7.13.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-hoist-variables": "^7.13.0", "@babel/helper-module-transforms": "^7.13.0", "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-validator-identifier": "^7.12.11", "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { + "@babel/plugin-transform-modules-umd": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-regexp-features-plugin": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-new-target": { + "@babel/plugin-transform-new-target": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-super": { + "@babel/plugin-transform-object-super": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13", "@babel/helper-replace-supers": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-parameters": { + "@babel/plugin-transform-parameters": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-property-literals": { + "@babel/plugin-transform-property-literals": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regenerator": { + "@babel/plugin-transform-regenerator": { "version": "7.13.15", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", "dev": true, - "dependencies": { + "requires": { "regenerator-transform": "^0.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { + "@babel/plugin-transform-reserved-words": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-runtime": { + "@babel/plugin-transform-runtime": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-module-imports": "^7.13.12", "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-polyfill-corejs2": "^0.2.0", @@ -1125,113 +940,96 @@ "babel-plugin-polyfill-regenerator": "^0.2.0", "semver": "^6.3.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { + "@babel/plugin-transform-shorthand-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-spread": { + "@babel/plugin-transform-spread": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { + "@babel/plugin-transform-sticky-regex": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-template-literals": { + "@babel/plugin-transform-template-literals": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { + "@babel/plugin-transform-typeof-symbol": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { + "@babel/plugin-transform-unicode-escapes": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { + "@babel/plugin-transform-unicode-regex": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-create-regexp-features-plugin": "^7.12.13", "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/polyfill": { + "@babel/polyfill": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", - "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", "dev": true, - "dependencies": { + "requires": { "core-js": "^2.6.5", "regenerator-runtime": "^0.13.4" } }, - "node_modules/@babel/preset-env": { + "@babel/preset-env": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz", "integrity": "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==", "dev": true, - "dependencies": { + "requires": { "@babel/compat-data": "^7.14.0", "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-plugin-utils": "^7.13.0", @@ -1306,67 +1104,66 @@ "core-js-compat": "^3.9.0", "semver": "^6.3.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/@babel/preset-modules": { + "@babel/preset-modules": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/register": { + "@babel/register": { "version": "7.13.16", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", "dev": true, - "dependencies": { + "requires": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", "make-dir": "^2.1.0", "pirates": "^4.0.0", "source-map-support": "^0.5.16" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { + "@babel/runtime": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", - "dependencies": { + "requires": { "regenerator-runtime": "^0.13.4" } }, - "node_modules/@babel/template": { + "@babel/template": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", "dev": true, - "dependencies": { + "requires": { "@babel/code-frame": "^7.12.13", "@babel/parser": "^7.12.13", "@babel/types": "^7.12.13" } }, - "node_modules/@babel/traverse": { + "@babel/traverse": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "dev": true, - "dependencies": { + "requires": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.14.2", "@babel/helper-function-name": "^7.14.2", @@ -1375,25 +1172,41 @@ "@babel/types": "^7.14.2", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, - "node_modules/@babel/types": { + "@babel/types": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "@eslint/eslintrc": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", "dev": true, - "peer": true, - "dependencies": { + "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", @@ -1401,120 +1214,97 @@ "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", + "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "peer": true, "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, - "node_modules/@moneybutton/brfc": { - "version": "0.38.6", - "resolved": "https://registry.npmjs.org/@moneybutton/brfc/-/brfc-0.38.6.tgz", - "integrity": "sha512-/YubO3q1X+gNOHEmT8D0LuOJiEEXEU48y/TY9UHLOoAXHrS5cGUwD737LRBnAoDIN/dQlVuqYMj28I3hCfnBWg==", - "dependencies": { + "@moneybutton/brfc": { + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/@moneybutton/brfc/-/brfc-0.38.3.tgz", + "integrity": "sha512-XR/mtB/PWVOU5MfVBMKPxmzc0Taz992u6nOigt9bkjcHHBgrAFxVi7sKRe8G1C17+5ExXVCHXRAanBFziqkjzA==", + "requires": { "@babel/runtime": "7.5.5", - "bsv": "2.0.7", "isomorphic-fetch": "2.2.1", "moment": "2.24.0" - } - }, - "node_modules/@moneybutton/brfc/node_modules/@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "dependencies": { - "regenerator-runtime": "^0.13.2" - } - }, - "node_modules/@moneybutton/brfc/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - }, - "node_modules/@moneybutton/brfc/node_modules/bsv": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/bsv/-/bsv-2.0.7.tgz", - "integrity": "sha512-DggeThbzCpjWhMnRF00dB/+MOCrWymNzgXu/YBds4Gh0bqeGd9XxTxahberVbLf7ejRSCTpuyctiku00MD03EA==", - "dependencies": { - "aes": "0.1.0", - "bitcoin-elliptic": "^7.0.1", - "bn.js": "^5.1.1", - "bs58": "4.0.1", - "chai": "^4.2.0", - "hash.js": "^1.1.7", - "is-hex": "1.1.3", - "pbkdf2": "3.1.1", - "randombytes": "^2.1.0" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@moneybutton/brfc/node_modules/isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "node_modules/@moneybutton/brfc/node_modules/moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", - "engines": { - "node": "*" + "@babel/runtime": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + } } }, - "node_modules/@moneybutton/brfc/node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node_modules/@moneybutton/brfc/node_modules/pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/@nicolo-ribaudo/chokidar-2": { + "@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz", "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==", "dev": true, "optional": true, - "dependencies": { + "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.1", "braces": "^2.3.2", @@ -1528,12 +1318,12 @@ "upath": "^1.1.1" } }, - "node_modules/@rollup/plugin-commonjs": { + "@rollup/plugin-commonjs": { "version": "19.0.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.0.tgz", "integrity": "sha512-adTpD6ATGbehdaQoZQ6ipDFhdjqsTgpOAhFiPwl+dzre4pPshsecptDPyEFb61JMJ1+mGljktaC4jI8ARMSNyw==", "dev": true, - "dependencies": { + "requires": { "@rollup/pluginutils": "^3.1.0", "commondir": "^1.0.1", "estree-walker": "^2.0.1", @@ -1541,487 +1331,380 @@ "is-reference": "^1.2.1", "magic-string": "^0.25.7", "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^2.38.3" } }, - "node_modules/@rollup/plugin-node-resolve": { + "@rollup/plugin-node-resolve": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.0.tgz", "integrity": "sha512-41X411HJ3oikIDivT5OKe9EZ6ud6DXudtfNrGbC4nniaxx2esiWjkLOzgnZsWq1IM8YIeL2rzRGLZLBjlhnZtQ==", "dev": true, - "dependencies": { + "requires": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", "builtin-modules": "^3.1.0", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^2.42.0" } }, - "node_modules/@rollup/plugin-replace": { + "@rollup/plugin-replace": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "dev": true, - "dependencies": { + "requires": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" } }, - "node_modules/@rollup/pluginutils": { + "@rollup/pluginutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", "dev": true, - "dependencies": { + "requires": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + } } }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/@types/estree": { + "@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, - "node_modules/@types/json5": { + "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, - "node_modules/@types/node": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.1.tgz", - "integrity": "sha512-weaeiP4UF4XgF++3rpQhpIJWsCTS4QJw5gvBhQu6cFIxTwyxWIe3xbnrY/o2lTCQ0lsdb8YIUDUvLR4Vuz5rbw==", + "@types/node": { + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.0.tgz", + "integrity": "sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==", "dev": true }, - "node_modules/@types/resolve": { + "@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", "dev": true, - "dependencies": { + "requires": { "@types/node": "*" } }, - "node_modules/@ungap/promise-all-settled": { + "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, - "node_modules/abort-controller": { + "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { + "requires": { "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" } }, - "node_modules/abstract-leveldown": { + "abstract-leveldown": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=", "dev": true, - "dependencies": { + "requires": { "xtend": "~3.0.0" - } - }, - "node_modules/abstract-leveldown/node_modules/xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" }, - "engines": { - "node": ">=0.4.0" + "dependencies": { + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true + } } }, - "node_modules/acorn-jsx": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + }, + "acorn-jsx": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/aes": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/aes/-/aes-0.1.0.tgz", - "integrity": "sha1-dcp863jlNtQ+7xBkn/qhyyrHUJ0=" + "dev": true }, - "node_modules/aes-js": { + "aes-js": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" }, - "node_modules/ajv": { + "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "dependencies": { + "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-colors": { + "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true }, - "node_modules/ansi-styles": { + "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "dependencies": { + "requires": { "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" } }, - "node_modules/anymatch": { + "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "optional": true, - "dependencies": { + "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" - } - }, - "node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, - "node_modules/arr-diff": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/arr-flatten": { + "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/arr-union": { + "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/array-includes": { + "array-includes": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.2", "get-intrinsic": "^1.1.1", "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-unique": { + "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/array.prototype.flat": { + "array.prototype.flat": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flatmap": { + "array.prototype.flatmap": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "es-abstract": "^1.18.0-next.1", "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/asn1.js": { + "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, - "dependencies": { + "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "safer-buffer": "^2.1.0" } }, - "node_modules/assertion-error": { + "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "engines": { - "node": "*" - } + "dev": true }, - "node_modules/assign-symbols": { + "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true }, - "node_modules/async": { + "async": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, - "dependencies": { + "requires": { "lodash": "^4.17.14" } }, - "node_modules/async-each": { + "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true, "optional": true }, - "node_modules/atob": { + "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, - "optional": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } + "optional": true }, - "node_modules/babel-eslint": { + "babel-eslint": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", "dev": true, - "dependencies": { + "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.7.0", "@babel/traverse": "^7.7.0", "@babel/types": "^7.7.0", "eslint-visitor-keys": "^1.0.0", "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" } }, - "node_modules/babel-plugin-dynamic-import-node": { + "babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, - "dependencies": { + "requires": { "object.assign": "^4.1.0" } }, - "node_modules/babel-plugin-polyfill-corejs2": { + "babel-plugin-polyfill-corejs2": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", "dev": true, - "dependencies": { + "requires": { "@babel/compat-data": "^7.13.11", "@babel/helper-define-polyfill-provider": "^0.2.0", "semver": "^6.1.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/babel-plugin-polyfill-corejs3": { + "babel-plugin-polyfill-corejs3": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-define-polyfill-provider": "^0.2.0", "core-js-compat": "^3.9.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/babel-plugin-polyfill-regenerator": { + "babel-plugin-polyfill-regenerator": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", "dev": true, - "dependencies": { + "requires": { "@babel/helper-define-polyfill-provider": "^0.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/balanced-match": { + "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base": { + "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "optional": true, - "dependencies": { + "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", "component-emitter": "^1.2.1", @@ -2030,150 +1713,135 @@ "mixin-deep": "^1.2.0", "pascalcase": "^0.1.1" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } } }, - "node_modules/base-x": { + "base-x": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "dependencies": { + "requires": { "safe-buffer": "^5.0.1" } }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/basic-auth": { + "basic-auth": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=", - "dev": true, - "engines": { - "node": ">= 0.6" - } + "dev": true }, - "node_modules/bdd-lazy-var": { + "bdd-lazy-var": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/bdd-lazy-var/-/bdd-lazy-var-2.6.1.tgz", "integrity": "sha512-X3ADwcFji/IHIrYJhTTpaiWhoOx4pl4whdAx1dmvdeUPsMUb7fVYFvf/Q33VEAEAVkEwi5rgNSZ0Y9oOVeQV+A==", - "dev": true, - "peerDependencies": { - "jasmine": ">=2", - "jasmine-core": ">=2", - "jest": ">=20", - "mocha": ">=2.3" - }, - "peerDependenciesMeta": { - "jasmine": { - "optional": true - }, - "jasmine-core": { - "optional": true - }, - "jest": { - "optional": true - }, - "mocha": { - "optional": true - } - } + "dev": true }, - "node_modules/binary-extensions": { + "binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bitcoin-elliptic": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/bitcoin-elliptic/-/bitcoin-elliptic-7.0.1.tgz", - "integrity": "sha512-eJIERwXIIjJK7gfVoevk0G1CbYbxezZ6ePZXIxngjyI+QQHXWqXMbY+gpxsND8FCLvWl050fw6W+PVZge5fBHw==", - "dependencies": { - "bn.js": "^5.1.1", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "node_modules/bitcoin-elliptic/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + "optional": true }, - "node_modules/bl": { + "bl": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=", "dev": true, - "dependencies": { + "requires": { "readable-stream": "~1.0.26" - } - }, - "node_modules/bl/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, + }, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } } }, - "node_modules/bl/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/bn.js": { + "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, - "node_modules/brace-expansion": { + "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "dependencies": { + "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/braces": { + "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "optional": true, - "dependencies": { + "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", "extend-shallow": "^2.0.1", @@ -2185,27 +1853,36 @@ "split-string": "^3.0.2", "to-regex": "^3.0.1" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "node_modules/brorand": { + "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, - "node_modules/browser-stdout": { + "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "node_modules/browserify-aes": { + "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "dependencies": { + "requires": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", @@ -2214,62 +1891,64 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/browserify-cipher": { + "browserify-cipher": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, - "dependencies": { + "requires": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", "evp_bytestokey": "^1.0.0" } }, - "node_modules/browserify-des": { + "browserify-des": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, - "dependencies": { + "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", "inherits": "^2.0.1", "safe-buffer": "^5.1.2" } }, - "node_modules/browserify-fs": { + "browserify-fs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", "integrity": "sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8=", "dev": true, - "dependencies": { + "requires": { "level-filesystem": "^1.0.1", "level-js": "^2.1.3", "levelup": "^0.18.2" } }, - "node_modules/browserify-rsa": { + "browserify-rsa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, - "dependencies": { + "requires": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + } } }, - "node_modules/browserify-rsa/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - }, - "node_modules/browserify-sign": { + "browserify-sign": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, - "dependencies": { + "requires": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", @@ -2279,64 +1958,59 @@ "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" }, - "engines": { - "node": ">= 6" + "dependencies": { + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, - "node_modules/browserslist": { + "browserslist": { "version": "4.16.6", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, - "dependencies": { + "requires": { "caniuse-lite": "^1.0.30001219", "colorette": "^1.2.2", "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, - "node_modules/bs58": { + "bs58": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "dependencies": { + "requires": { "base-x": "^3.0.2" } }, - "node_modules/bsv": { + "bsv": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/bsv/-/bsv-1.5.5.tgz", "integrity": "sha512-tfHFMZjDth424uosNi5rkqo+MET6710mytO8vbETqPlD2yCft7zvKc+1U3xYhjva3tEd8GRJgNcSUcyskLyTLw==", - "dependencies": { + "requires": { "aes-js": "^3.1.2", "bn.js": "=4.11.8", "bs58": "=4.0.1", @@ -2347,48 +2021,37 @@ "unorm": "1.4.1" } }, - "node_modules/bsv/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/buffer-es6": { + "buffer-es6": { "version": "4.9.3", "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz", "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=", "dev": true }, - "node_modules/buffer-from": { + "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "node_modules/buffer-xor": { + "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "node_modules/builtin-modules": { + "builtin-modules": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/cache-base": { + "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "optional": true, - "dependencies": { + "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", "get-value": "^2.0.6", @@ -2398,547 +2061,414 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/call-bind": { + "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, - "dependencies": { + "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { + "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/camelcase": { + "camelcase": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/caniuse-lite": { + "caniuse-lite": { "version": "1.0.30001228", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "dev": true }, - "node_modules/chai": { + "chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dependencies": { + "dev": true, + "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", "pathval": "^1.1.1", "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" } }, - "node_modules/chalk": { + "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "dependencies": { + "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" } }, - "node_modules/check-error": { + "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "engines": { - "node": "*" - } + "dev": true }, - "node_modules/chokidar": { + "chokidar": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "dev": true, - "dependencies": { + "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", + "fsevents": "~2.3.1", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.5.0" }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.1" - } - }, - "node_modules/chokidar/node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/chokidar/node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chokidar/node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/chokidar/node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/chokidar/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } } }, - "node_modules/cipher-base": { + "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { + "dev": true, + "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, - "node_modules/class-utils": { + "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "optional": true, - "dependencies": { + "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", "isobject": "^3.0.0", "static-extend": "^0.1.1" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } } }, - "node_modules/cliui": { + "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "dependencies": { + "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, - "node_modules/clone": { + "clone": { "version": "0.1.19", "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=", - "dev": true, - "engines": { - "node": "*" - } + "dev": true }, - "node_modules/clone-deep": { + "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { + "requires": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" } }, - "node_modules/collection-visit": { + "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "optional": true, - "dependencies": { + "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" } }, - "node_modules/color-convert": { + "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "dependencies": { + "requires": { "color-name": "1.1.3" } }, - "node_modules/color-name": { + "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "node_modules/colorette": { + "colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, - "node_modules/colors": { + "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } + "dev": true }, - "node_modules/commander": { + "commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } + "dev": true }, - "node_modules/commondir": { + "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "node_modules/component-emitter": { + "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true, "optional": true }, - "node_modules/concat-map": { + "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "node_modules/concat-stream": { + "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { + "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, - "node_modules/contains-path": { + "contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/convert-source-map": { + "convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, - "dependencies": { + "requires": { "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/copy-descriptor": { + "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/core-js": { + "core-js": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true, - "hasInstallScript": true + "dev": true }, - "node_modules/core-js-compat": { + "core-js-compat": { "version": "3.12.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", "dev": true, - "dependencies": { + "requires": { "browserslist": "^4.16.6", "semver": "7.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } } }, - "node_modules/core-util-is": { + "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "node_modules/corser": { + "corser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } + "dev": true }, - "node_modules/create-ecdh": { + "create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, - "dependencies": { + "requires": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" } }, - "node_modules/create-hash": { + "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { + "dev": true, + "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", "md5.js": "^1.3.4", @@ -2946,11 +2476,12 @@ "sha.js": "^2.4.0" } }, - "node_modules/create-hmac": { + "create-hmac": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { + "dev": true, + "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", "inherits": "^2.0.1", @@ -2959,26 +2490,23 @@ "sha.js": "^2.4.8" } }, - "node_modules/cross-spawn": { + "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "dependencies": { + "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" } }, - "node_modules/crypto-browserify": { + "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, - "dependencies": { + "requires": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", "create-ecdh": "^4.0.0", @@ -2990,209 +2518,197 @@ "public-encrypt": "^4.0.0", "randombytes": "^2.0.0", "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" } }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "requires": { + "ms": "2.0.0" } }, - "node_modules/decamelize": { + "decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true }, - "node_modules/decode-uri-component": { + "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true, - "optional": true, - "engines": { - "node": ">=0.10" - } + "optional": true }, - "node_modules/deep-eql": { + "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dependencies": { + "dev": true, + "requires": { "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" } }, - "node_modules/deep-is": { + "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "node_modules/deepmerge": { + "deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "dev": true }, - "node_modules/deferred-leveldown": { + "deferred-leveldown": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=", "dev": true, - "dependencies": { + "requires": { "abstract-leveldown": "~0.12.1" } }, - "node_modules/define-properties": { + "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, - "dependencies": { + "requires": { "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" } }, - "node_modules/define-property": { + "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "optional": true, - "dependencies": { + "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } } }, - "node_modules/des.js": { + "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, - "dependencies": { + "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, - "node_modules/diff": { + "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } + "dev": true }, - "node_modules/diffie-hellman": { + "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, - "dependencies": { + "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" } }, - "node_modules/doctrine": { + "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "dependencies": { + "requires": { "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" } }, - "node_modules/dotenv": { + "dotenv": { "version": "8.6.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true, - "engines": { - "node": ">=10" - } + "dev": true }, - "node_modules/dotenv-cli": { + "dotenv-cli": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-4.0.0.tgz", "integrity": "sha512-ByKEec+ashePEXthZaA1fif9XDtcaRnkN7eGdBDx3HHRjwZ/rA1go83Cbs4yRrx3JshsCf96FjAyIA2M672+CQ==", "dev": true, - "dependencies": { + "requires": { "cross-spawn": "^7.0.1", "dotenv": "^8.1.0", "dotenv-expand": "^5.1.0", "minimist": "^1.1.3" - }, - "bin": { - "dotenv": "cli.js" } }, - "node_modules/dotenv-expand": { + "dotenv-expand": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, - "node_modules/ecstatic": { + "ecstatic": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", "dev": true, - "dependencies": { + "requires": { "he": "^1.1.1", "mime": "^1.6.0", "minimist": "^1.1.0", "url-join": "^2.0.5" - }, - "bin": { - "ecstatic": "lib/ecstatic.js" } }, - "node_modules/electron-to-chromium": { + "electron-to-chromium": { "version": "1.3.735", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.735.tgz", "integrity": "sha512-cp7MWzC3NseUJV2FJFgaiesdrS+A8ZUjX5fLAxdRlcaPDkaPGFplX930S5vf84yqDp4LjuLdKouWuVOTwUfqHQ==", "dev": true }, - "node_modules/elliptic": { + "elliptic": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dependencies": { + "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", "hash.js": "^1.0.0", @@ -3202,59 +2718,53 @@ "minimalistic-crypto-utils": "^1.0.0" } }, - "node_modules/emoji-regex": { + "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/encoding": { + "encoding": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dependencies": { + "requires": { "iconv-lite": "^0.6.2" } }, - "node_modules/enquirer": { + "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, - "dependencies": { + "requires": { "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" } }, - "node_modules/errno": { + "errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, - "dependencies": { + "requires": { "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" } }, - "node_modules/error-ex": { + "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "dependencies": { + "requires": { "is-arrayish": "^0.2.1" } }, - "node_modules/es-abstract": { + "es-abstract": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, - "dependencies": { + "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -3271,58 +2781,39 @@ "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", "unbox-primitive": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-to-primitive": { + "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "dependencies": { + "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/escalade": { + "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } + "dev": true }, - "node_modules/escape-string-regexp": { + "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } + "dev": true }, - "node_modules/eslint": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", - "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", + "eslint": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", + "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", "dev": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3332,13 +2823,13 @@ "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^13.6.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -3346,7 +2837,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.21", + "lodash": "^4.17.19", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -3355,8720 +2846,50 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^5.2.3", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-standard": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", - "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1" - } - }, - "node_modules/eslint-config-standard-jsx": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", - "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-react": "^7.21.5" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "dev": true, - "dependencies": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/eslint-module-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", - "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "pkg-dir": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", - "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "dependencies": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-plugin-node/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint-plugin-promise": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", - "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", - "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.1", - "array.prototype.flatmap": "^1.2.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "object.entries": "^1.1.2", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.18.1", - "string.prototype.matchall": "^4.0.2" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "peer": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", - "dev": true, - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "optional": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "optional": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "peer": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "peer": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true, - "peer": true - }, - "node_modules/follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "optional": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/fwd-stream": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", - "integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=", - "dev": true, - "dependencies": { - "readable-stream": "~1.0.26-4" - } - }, - "node_modules/fwd-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/fwd-stream/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/fwd-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "optional": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-server": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz", - "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", - "dev": true, - "dependencies": { - "basic-auth": "^1.0.3", - "colors": "^1.4.0", - "corser": "^2.0.1", - "ecstatic": "^3.3.2", - "http-proxy": "^1.18.0", - "minimist": "^1.2.5", - "opener": "^1.5.1", - "portfinder": "^1.0.25", - "secure-compare": "3.0.1", - "union": "~0.5.0" - }, - "bin": { - "hs": "bin/http-server", - "http-server": "bin/http-server" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/idb-wrapper": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", - "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", - "dev": true - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", - "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true, - "optional": true - }, - "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-hex/-/is-hex-1.1.3.tgz", - "integrity": "sha1-RAJZwHloHgNy5SFWqmeiM8OXXe4=", - "deprecated": "Development of this module has been stopped." - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-object": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", - "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=", - "dev": true - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isbuffer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", - "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/level-blobs": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", - "integrity": "sha1-mrm5e7mfHtv594o0M+Ie1WOGva8=", - "dev": true, - "dependencies": { - "level-peek": "1.0.6", - "once": "^1.3.0", - "readable-stream": "^1.0.26-4" - } - }, - "node_modules/level-blobs/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/level-blobs/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/level-blobs/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/level-filesystem": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", - "integrity": "sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M=", - "dev": true, - "dependencies": { - "concat-stream": "^1.4.4", - "errno": "^0.1.1", - "fwd-stream": "^1.0.4", - "level-blobs": "^0.1.7", - "level-peek": "^1.0.6", - "level-sublevel": "^5.2.0", - "octal": "^1.0.0", - "once": "^1.3.0", - "xtend": "^2.2.0" - } - }, - "node_modules/level-fix-range": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", - "integrity": "sha1-vxW5Fa422EcMgh6IPd95zRZCCCg=", - "dev": true - }, - "node_modules/level-hooks": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", - "integrity": "sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM=", - "dev": true, - "dependencies": { - "string-range": "~1.2" - } - }, - "node_modules/level-js": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", - "integrity": "sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=", - "dev": true, - "dependencies": { - "abstract-leveldown": "~0.12.0", - "idb-wrapper": "^1.5.0", - "isbuffer": "~0.0.0", - "ltgt": "^2.1.2", - "typedarray-to-buffer": "~1.0.0", - "xtend": "~2.1.2" - } - }, - "node_modules/level-js/node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", - "dev": true - }, - "node_modules/level-js/node_modules/xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/level-peek": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", - "integrity": "sha1-vsUccqgu5GTTNkNMfIdsP8vM538=", - "dev": true, - "dependencies": { - "level-fix-range": "~1.0.2" - } - }, - "node_modules/level-sublevel": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", - "integrity": "sha1-dEwSxy0ucr543eO5tc2E1iGRQTo=", - "dev": true, - "dependencies": { - "level-fix-range": "2.0", - "level-hooks": ">=4.4.0 <5", - "string-range": "~1.2.1", - "xtend": "~2.0.4" - } - }, - "node_modules/level-sublevel/node_modules/level-fix-range": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", - "integrity": "sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug=", - "dev": true, - "dependencies": { - "clone": "~0.1.9" - } - }, - "node_modules/level-sublevel/node_modules/object-keys": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", - "integrity": "sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=", - "deprecated": "Please update to the latest object-keys", - "dev": true, - "dependencies": { - "foreach": "~2.0.1", - "indexof": "~0.0.1", - "is": "~0.2.6" - } - }, - "node_modules/level-sublevel/node_modules/xtend": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", - "integrity": "sha1-XqZXptukRwacLlnFihE4ywxebO4=", - "dev": true, - "dependencies": { - "is-object": "~0.1.2", - "object-keys": "~0.2.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/levelup": { - "version": "0.18.6", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", - "integrity": "sha1-5qAcsIlhbI7MApHCqb0/DETj5es=", - "dev": true, - "dependencies": { - "bl": "~0.8.1", - "deferred-leveldown": "~0.2.0", - "errno": "~0.1.1", - "prr": "~0.0.0", - "readable-stream": "~1.0.26", - "semver": "~2.3.1", - "xtend": "~3.0.0" - } - }, - "node_modules/levelup/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/levelup/node_modules/prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", - "dev": true - }, - "node_modules/levelup/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/levelup/node_modules/semver": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/levelup/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/levelup/node_modules/xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true, - "peer": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true, - "peer": true - }, - "node_modules/log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", - "dev": true - }, - "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "optional": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "optional": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 10.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "optional": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "optional": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "optional": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/octal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", - "integrity": "sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws=", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true, - "optional": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "node_modules/path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "dependencies": { - "pify": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-type/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-conf": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", - "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0", - "load-json-file": "^5.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/load-json-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", - "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^4.0.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0", - "type-fest": "^0.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process-es6": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz", - "integrity": "sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g=", - "dev": true - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "dependencies": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true, - "optional": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true, - "optional": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rollup": { - "version": "2.48.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.48.0.tgz", - "integrity": "sha512-wl9ZSSSsi5579oscSDYSzGn092tCS076YB+TQrzsGuSfYyJeep8eEWj0eaRjuC5McuMNmcnR8icBqiE/FWNB1A==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.1" - } - }, - "node_modules/rollup-plugin-babel": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", - "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel.", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "rollup-pluginutils": "^2.8.1" - }, - "peerDependencies": { - "@babel/core": "7 || ^7.0.0-rc.2", - "rollup": ">=0.60.0 <3" - } - }, - "node_modules/rollup-plugin-node-builtins": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz", - "integrity": "sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k=", - "dev": true, - "dependencies": { - "browserify-fs": "^1.0.0", - "buffer-es6": "^4.9.2", - "crypto-browserify": "^3.11.0", - "process-es6": "^0.11.2" - } - }, - "node_modules/rollup-plugin-node-globals": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz", - "integrity": "sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==", - "dev": true, - "dependencies": { - "acorn": "^5.7.3", - "buffer-es6": "^4.9.3", - "estree-walker": "^0.5.2", - "magic-string": "^0.22.5", - "process-es6": "^0.11.6", - "rollup-pluginutils": "^2.3.1" - } - }, - "node_modules/rollup-plugin-node-globals/node_modules/acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/rollup-plugin-node-globals/node_modules/estree-walker": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", - "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", - "dev": true - }, - "node_modules/rollup-plugin-node-globals/node_modules/magic-string": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", - "dev": true, - "dependencies": { - "vlq": "^0.2.2" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "optional": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/secure-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=", - "dev": true - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/should": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", - "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", - "dev": true, - "dependencies": { - "should-equal": "^2.0.0", - "should-format": "^3.0.3", - "should-type": "^1.4.0", - "should-type-adaptors": "^1.0.1", - "should-util": "^1.0.0" - } - }, - "node_modules/should-equal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", - "dev": true, - "dependencies": { - "should-type": "^1.4.0" - } - }, - "node_modules/should-format": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", - "dev": true, - "dependencies": { - "should-type": "^1.3.0", - "should-type-adaptors": "^1.0.1" - } - }, - "node_modules/should-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", - "dev": true - }, - "node_modules/should-type-adaptors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", - "dev": true, - "dependencies": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" - } - }, - "node_modules/should-util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", - "dev": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "optional": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "optional": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "optional": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true, - "optional": true - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.8.tgz", - "integrity": "sha512-NDgA96EnaLSvtbM7trJj+t1LUR3pirkDCcz9nOUlPb5DMBGsH7oES6C3hs3j7R9oHEa1EMvReS/BUAIT5Tcr0g==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/standard": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/standard/-/standard-16.0.3.tgz", - "integrity": "sha512-70F7NH0hSkNXosXRltjSv6KpTAOkUkSfyu3ynyM5dtRUiLtR+yX9EGZ7RKwuGUqCJiX/cnkceVM6HTZ4JpaqDg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "eslint": "~7.13.0", - "eslint-config-standard": "16.0.2", - "eslint-config-standard-jsx": "10.0.0", - "eslint-plugin-import": "~2.22.1", - "eslint-plugin-node": "~11.1.0", - "eslint-plugin-promise": "~4.2.1", - "eslint-plugin-react": "~7.21.5", - "standard-engine": "^14.0.1" - }, - "bin": { - "standard": "bin/cmd.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/standard-engine": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz", - "integrity": "sha512-7FEzDwmHDOGva7r9ifOzD3BGdTbA7ujJ50afLVdW/tK14zQEptJjbFuUfn50irqdHDcTbNh0DTIoMPynMCXb0Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "get-stdin": "^8.0.0", - "minimist": "^1.2.5", - "pkg-conf": "^3.1.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8.10" - } - }, - "node_modules/standard/node_modules/@eslint/eslintrc": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", - "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/standard/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/standard/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/standard/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/standard/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/standard/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/standard/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/standard/node_modules/eslint": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", - "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/standard/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/standard/node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard/node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard/node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "node_modules/standard/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/standard/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/standard/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/standard/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/standard/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/standard/node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/standard/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard/node_modules/slice-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/standard/node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/standard/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/standard/node_modules/string-width/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/standard/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/standard/node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "optional": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/string-range": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", - "integrity": "sha1-qJPtNH5yKZvIO++78qaSqNI51d0=", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", - "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "peer": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", - "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "optional": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", - "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=", - "dev": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/union": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", - "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", - "dev": true, - "dependencies": { - "qs": "^6.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unorm": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", - "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "optional": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "optional": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "optional": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true, - "optional": true - }, - "node_modules/url-join": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", - "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/xtend": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", - "integrity": "sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/cli": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.3.tgz", - "integrity": "sha512-zU4JLvwk32ay1lhhyGfqiRUSPoltVDjhYkA3aQq8+Yby9z30s/EsFw1EPOHxWG9YZo2pAGfgdRNeHZQAYU5m9A==", - "dev": true, - "requires": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", - "chokidar": "^3.4.0", - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.0.0", - "make-dir": "^2.1.0", - "slash": "^2.0.0", - "source-map": "^0.5.0" - } - }, - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", - "dev": true - }, - "@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", - "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.14.3", - "@babel/helper-split-export-declaration": "^7.12.13" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", - "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", - "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dev": true, - "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", - "dev": true - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", - "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", - "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.3", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", - "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", - "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", - "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", - "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", - "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", - "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", - "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.2" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", - "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", - "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz", - "integrity": "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz", - "integrity": "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", - "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", - "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", - "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", - "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "semver": "^6.3.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/polyfill": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", - "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", - "dev": true, - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/preset-env": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz", - "integrity": "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.14.2", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.13.11", - "@babel/plugin-proposal-dynamic-import": "^7.14.2", - "@babel/plugin-proposal-export-namespace-from": "^7.14.2", - "@babel/plugin-proposal-json-strings": "^7.14.2", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", - "@babel/plugin-proposal-numeric-separator": "^7.14.2", - "@babel/plugin-proposal-object-rest-spread": "^7.14.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", - "@babel/plugin-proposal-optional-chaining": "^7.14.2", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.14.2", - "@babel/plugin-transform-classes": "^7.14.2", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.17", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.2", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.14.2", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.2", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/register": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", - "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.0", - "source-map-support": "^0.5.16" - } - }, - "@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", - "dev": true, - "peer": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "peer": true, - "requires": { - "type-fest": "^0.8.1" - } - } - } - }, - "@moneybutton/brfc": { - "version": "0.38.6", - "resolved": "https://registry.npmjs.org/@moneybutton/brfc/-/brfc-0.38.6.tgz", - "integrity": "sha512-/YubO3q1X+gNOHEmT8D0LuOJiEEXEU48y/TY9UHLOoAXHrS5cGUwD737LRBnAoDIN/dQlVuqYMj28I3hCfnBWg==", - "requires": { - "@babel/runtime": "7.5.5", - "bsv": "2.0.7", - "isomorphic-fetch": "2.2.1", - "moment": "2.24.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - }, - "bsv": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/bsv/-/bsv-2.0.7.tgz", - "integrity": "sha512-DggeThbzCpjWhMnRF00dB/+MOCrWymNzgXu/YBds4Gh0bqeGd9XxTxahberVbLf7ejRSCTpuyctiku00MD03EA==", - "requires": { - "aes": "0.1.0", - "bitcoin-elliptic": "^7.0.1", - "bn.js": "^5.1.1", - "bs58": "4.0.1", - "chai": "^4.2.0", - "hash.js": "^1.1.7", - "is-hex": "1.1.3", - "pbkdf2": "3.1.1", - "randombytes": "^2.1.0" - } - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - } - } - }, - "@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz", - "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "@rollup/plugin-commonjs": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.0.tgz", - "integrity": "sha512-adTpD6ATGbehdaQoZQ6ipDFhdjqsTgpOAhFiPwl+dzre4pPshsecptDPyEFb61JMJ1+mGljktaC4jI8ARMSNyw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.0.tgz", - "integrity": "sha512-41X411HJ3oikIDivT5OKe9EZ6ud6DXudtfNrGbC4nniaxx2esiWjkLOzgnZsWq1IM8YIeL2rzRGLZLBjlhnZtQ==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - } - } - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "@types/node": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.1.tgz", - "integrity": "sha512-weaeiP4UF4XgF++3rpQhpIJWsCTS4QJw5gvBhQu6cFIxTwyxWIe3xbnrY/o2lTCQ0lsdb8YIUDUvLR4Vuz5rbw==", - "dev": true - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abstract-leveldown": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", - "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=", - "dev": true, - "requires": { - "xtend": "~3.0.0" - }, - "dependencies": { - "xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", - "dev": true - } - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true, - "requires": {} - }, - "aes": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/aes/-/aes-0.1.0.tgz", - "integrity": "sha1-dcp863jlNtQ+7xBkn/qhyyrHUJ0=" - }, - "aes-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", - "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "optional": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "optional": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "optional": true - }, - "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - } - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "optional": true - }, - "array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "optional": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "peer": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "optional": true - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0", - "core-js-compat": "^3.9.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "optional": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "basic-auth": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", - "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=", - "dev": true - }, - "bdd-lazy-var": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/bdd-lazy-var/-/bdd-lazy-var-2.6.1.tgz", - "integrity": "sha512-X3ADwcFji/IHIrYJhTTpaiWhoOx4pl4whdAx1dmvdeUPsMUb7fVYFvf/Q33VEAEAVkEwi5rgNSZ0Y9oOVeQV+A==", - "dev": true, - "requires": {} - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "bitcoin-elliptic": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/bitcoin-elliptic/-/bitcoin-elliptic-7.0.1.tgz", - "integrity": "sha512-eJIERwXIIjJK7gfVoevk0G1CbYbxezZ6ePZXIxngjyI+QQHXWqXMbY+gpxsND8FCLvWl050fw6W+PVZge5fBHw==", - "requires": { - "bn.js": "^5.1.1", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - } - } - }, - "bl": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", - "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=", - "dev": true, - "requires": { - "readable-stream": "~1.0.26" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", - "integrity": "sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8=", - "dev": true, - "requires": { - "level-filesystem": "^1.0.1", - "level-js": "^2.1.3", - "levelup": "^0.18.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "^3.0.2" - } - }, - "bsv": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/bsv/-/bsv-1.5.5.tgz", - "integrity": "sha512-tfHFMZjDth424uosNi5rkqo+MET6710mytO8vbETqPlD2yCft7zvKc+1U3xYhjva3tEd8GRJgNcSUcyskLyTLw==", - "requires": { - "aes-js": "^3.1.2", - "bn.js": "=4.11.8", - "bs58": "=4.0.1", - "clone-deep": "^4.0.1", - "elliptic": "6.5.3", - "hash.js": "^1.1.7", - "inherits": "2.0.3", - "unorm": "1.4.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "buffer-es6": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz", - "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "optional": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001228", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", - "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", - "dev": true - }, - "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "dependencies": { - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "optional": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - } - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", - "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "optional": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "optional": true - }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true - }, - "core-js-compat": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", - "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "corser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", - "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", - "dev": true - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "optional": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "deferred-leveldown": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", - "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=", - "dev": true, - "requires": { - "abstract-leveldown": "~0.12.1" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true - }, - "dotenv-cli": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-4.0.0.tgz", - "integrity": "sha512-ByKEec+ashePEXthZaA1fif9XDtcaRnkN7eGdBDx3HHRjwZ/rA1go83Cbs4yRrx3JshsCf96FjAyIA2M672+CQ==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1", - "dotenv": "^8.1.0", - "dotenv-expand": "^5.1.0", - "minimist": "^1.1.3" - } - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "ecstatic": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", - "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", - "dev": true, - "requires": { - "he": "^1.1.1", - "mime": "^1.6.0", - "minimist": "^1.1.0", - "url-join": "^2.0.5" - } - }, - "electron-to-chromium": { - "version": "1.3.735", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.735.tgz", - "integrity": "sha512-cp7MWzC3NseUJV2FJFgaiesdrS+A8ZUjX5fLAxdRlcaPDkaPGFplX930S5vf84yqDp4LjuLdKouWuVOTwUfqHQ==", - "dev": true - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", - "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", - "dev": true, - "peer": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.21", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "peer": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "peer": true, "requires": { "color-name": "~1.1.4" } @@ -12077,69 +2898,89 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, - "peer": true + "requires": { + "ms": "2.1.2" + } }, "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "peer": true + "dev": true }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "peer": true, "requires": { "is-glob": "^4.0.1" } }, "globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, - "peer": true, "requires": { - "type-fest": "^0.20.2" + "type-fest": "^0.8.1" } }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "peer": true + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, - "peer": true, "requires": { "lru-cache": "^6.0.0" } }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "peer": true, "requires": { "has-flag": "^4.0.0" } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "peer": true } } }, @@ -12147,15 +2988,13 @@ "version": "16.0.2", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", - "dev": true, - "requires": {} + "dev": true }, "eslint-config-standard-jsx": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", - "dev": true, - "requires": {} + "dev": true }, "eslint-import-resolver-node": { "version": "0.3.4", @@ -12165,23 +3004,6 @@ "requires": { "debug": "^2.6.9", "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } } }, "eslint-module-utils": { @@ -12222,6 +3044,12 @@ "path-exists": "^3.0.0" } }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -12240,10 +3068,10 @@ "p-limit": "^1.1.0" } }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, "pkg-dir": { @@ -12288,15 +3116,6 @@ "tsconfig-paths": "^3.9.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, "doctrine": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", @@ -12306,12 +3125,6 @@ "esutils": "^2.0.2", "isarray": "^1.0.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -12334,6 +3147,12 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -12407,6 +3226,14 @@ "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } } }, "esprima": { @@ -12504,16 +3331,6 @@ "to-regex": "^3.0.1" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -12524,86 +3341,39 @@ "is-descriptor": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-extendable": "^0.1.0" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true } } }, "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "optional": true, "requires": { - "is-extendable": "^0.1.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "extglob": { @@ -12625,12 +3395,54 @@ "dependencies": { "define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "optional": true, "requires": { - "is-descriptor": "^1.0.0" + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -12654,13 +3466,12 @@ "dev": true }, "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, - "peer": true, "requires": { - "flat-cache": "^3.0.4" + "flat-cache": "^2.0.1" } }, "fill-range": { @@ -12674,6 +3485,18 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "find-cache-dir": { @@ -12688,13 +3511,12 @@ } }, "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "locate-path": "^3.0.0" } }, "flat": { @@ -12704,22 +3526,21 @@ "dev": true }, "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, - "peer": true, "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" } }, "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true, - "peer": true + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true }, "follow-redirects": { "version": "1.14.1", @@ -12831,7 +3652,8 @@ "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true }, "get-intrinsic": { "version": "1.1.1", @@ -12978,16 +3800,24 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" }, "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -13109,9 +3939,9 @@ } }, "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "internal-slot": { "version": "1.0.3", @@ -13131,13 +3961,25 @@ "dev": true }, "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "optional": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-arrayish": { @@ -13194,13 +4036,25 @@ } }, "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "optional": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-date-object": { @@ -13210,15 +4064,24 @@ "dev": true }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "optional": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + } } }, "is-extendable": { @@ -13235,9 +4098,9 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "is-glob": { @@ -13249,11 +4112,6 @@ "is-extglob": "^2.1.1" } }, - "is-hex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-hex/-/is-hex-1.1.3.tgz", - "integrity": "sha1-RAJZwHloHgNy5SFWqmeiM8OXXe4=" - }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -13390,6 +4248,13 @@ "requires": { "node-fetch": "^2.6.1", "whatwg-fetch": "^3.4.1" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + } } }, "js-tokens": { @@ -13399,13 +4264,12 @@ "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "jsesc": { @@ -13699,12 +4563,13 @@ } }, "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^5.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -13713,26 +4578,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true, - "peer": true - }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true, - "peer": true - }, "log-symbols": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", @@ -13834,14 +4685,6 @@ "requires": { "pify": "^4.0.1", "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } } }, "map-cache": { @@ -13865,6 +4708,7 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -13891,29 +4735,6 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "miller-rabin": { @@ -14022,11 +4843,22 @@ "yargs-unparser": "2.0.0" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } }, "escape-string-regexp": { "version": "4.0.0", @@ -14034,6 +4866,16 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -14054,13 +4896,13 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "argparse": "^2.0.1" + "p-locate": "^5.0.0" } }, "ms": { @@ -14069,6 +4911,30 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -14086,9 +4952,9 @@ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "nanoid": { @@ -14115,29 +4981,6 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "natural-compare": { @@ -14147,9 +4990,13 @@ "dev": true }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } }, "node-modules-regexp": { "version": "1.0.0", @@ -14173,14 +5020,6 @@ "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } } }, "normalize-path": { @@ -14198,64 +5037,23 @@ "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "optional": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "optional": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "optional": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - } + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -14386,27 +5184,27 @@ } }, "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^3.0.2" + "p-limit": "^2.0.0" } }, "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "parent-module": { @@ -14455,9 +5253,9 @@ "optional": true }, "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "path-is-absolute": { @@ -14498,7 +5296,8 @@ "pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true }, "pbkdf2": { "version": "3.1.2", @@ -14544,15 +5343,6 @@ "load-json-file": "^5.2.0" }, "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, "load-json-file": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", @@ -14566,40 +5356,6 @@ "type-fest": "^0.3.0" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -14610,12 +5366,6 @@ "json-parse-better-errors": "^1.0.1" } }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, "type-fest": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", @@ -14631,57 +5381,6 @@ "dev": true, "requires": { "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } } }, "portfinder": { @@ -14703,6 +5402,12 @@ "requires": { "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, @@ -14787,6 +5492,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "requires": { "safe-buffer": "^5.1.0" } @@ -14865,10 +5571,10 @@ "p-limit": "^1.1.0" } }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true } } @@ -14946,29 +5652,6 @@ "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "regexp.prototype.flags": { @@ -15051,13 +5734,6 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "peer": true - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -15095,11 +5771,10 @@ "optional": true }, "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, - "peer": true, "requires": { "glob": "^7.1.3" } @@ -15108,6 +5783,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -15158,12 +5834,6 @@ "rollup-pluginutils": "^2.3.1" }, "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - }, "estree-walker": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", @@ -15225,9 +5895,9 @@ "dev": true }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "serialize-javascript": { @@ -15250,12 +5920,25 @@ "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -15356,44 +6039,14 @@ "dev": true }, "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, - "peer": true, "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - } + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" } }, "snapdragon": { @@ -15413,16 +6066,6 @@ "use": "^3.1.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -15433,75 +6076,15 @@ "is-descriptor": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-extendable": "^0.1.0" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true } } }, @@ -15519,12 +6102,44 @@ "dependencies": { "define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "optional": true, "requires": { - "is-descriptor": "^1.0.0" + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -15605,365 +6220,65 @@ "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.8.tgz", - "integrity": "sha512-NDgA96EnaLSvtbM7trJj+t1LUR3pirkDCcz9nOUlPb5DMBGsH7oES6C3hs3j7R9oHEa1EMvReS/BUAIT5Tcr0g==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "standard": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/standard/-/standard-16.0.3.tgz", - "integrity": "sha512-70F7NH0hSkNXosXRltjSv6KpTAOkUkSfyu3ynyM5dtRUiLtR+yX9EGZ7RKwuGUqCJiX/cnkceVM6HTZ4JpaqDg==", - "dev": true, - "requires": { - "eslint": "~7.13.0", - "eslint-config-standard": "16.0.2", - "eslint-config-standard-jsx": "10.0.0", - "eslint-plugin-import": "~2.22.1", - "eslint-plugin-node": "~11.1.0", - "eslint-plugin-promise": "~4.2.1", - "eslint-plugin-react": "~7.21.5", - "standard-engine": "^14.0.1" - }, - "dependencies": { - "@eslint/eslintrc": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", - "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "eslint": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", - "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - } - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - } - } + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.8.tgz", + "integrity": "sha512-NDgA96EnaLSvtbM7trJj+t1LUR3pirkDCcz9nOUlPb5DMBGsH7oES6C3hs3j7R9oHEa1EMvReS/BUAIT5Tcr0g==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "standard": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/standard/-/standard-16.0.3.tgz", + "integrity": "sha512-70F7NH0hSkNXosXRltjSv6KpTAOkUkSfyu3ynyM5dtRUiLtR+yX9EGZ7RKwuGUqCJiX/cnkceVM6HTZ4JpaqDg==", + "dev": true, + "requires": { + "eslint": "~7.13.0", + "eslint-config-standard": "16.0.2", + "eslint-config-standard-jsx": "10.0.0", + "eslint-plugin-import": "~2.22.1", + "eslint-plugin-node": "~11.1.0", + "eslint-plugin-promise": "~4.2.1", + "eslint-plugin-react": "~7.21.5", + "standard-engine": "^14.0.1" } }, "standard-engine": { @@ -15998,84 +6313,6 @@ "requires": { "is-descriptor": "^0.1.0" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, @@ -16086,14 +6323,13 @@ "dev": true }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string.prototype.matchall": { @@ -16131,13 +6367,30 @@ "define-properties": "^1.1.3" } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^3.0.0" } }, "strip-bom": { @@ -16162,39 +6415,48 @@ } }, "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, - "peer": true, "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" }, "dependencies": { - "ajv": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", - "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, - "peer": true, "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, - "peer": true + "requires": { + "ansi-regex": "^4.1.0" + } } } }, @@ -16243,29 +6505,6 @@ "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "to-regex-range": { @@ -16314,7 +6553,8 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true }, "type-fest": { "version": "0.8.1", @@ -16484,7 +6724,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "v8-compile-cache": { "version": "2.3.0", @@ -16542,39 +6783,6 @@ "dev": true, "requires": { "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } } }, "word-wrap": { @@ -16600,6 +6808,12 @@ "strip-ansi": "^6.0.0" }, "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -16623,6 +6837,32 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } } } }, @@ -16678,6 +6918,40 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, "yargs-parser": { diff --git a/package.json b/package.json index d08a57d..96eea97 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ }, "dependencies": { "@babel/runtime": "7.14.0", - "@moneybutton/brfc": "^0.38.3", + "@moneybutton/brfc": "0.38.3", "abort-controller": "3.0.0", "bsv": "^1.5.5", "isomorphic-fetch": "^3.0.0", From 1d47d77d006adec0ab28400c86ed6a0f94122cd4 Mon Sep 17 00:00:00 2001 From: Long Li Date: Fri, 28 May 2021 17:28:25 +0900 Subject: [PATCH 15/33] conver yarn to npm, use local brfc --- dist/paymail-client.cjs.js | 529 +- dist/paymail-client.esm.js | 503 +- package-lock.json | 11661 +++++++++++++++++++++++++++++++---- package.json | 10 +- src/BrowserDns.js | 2 +- src/EndpointResolver.js | 10 +- src/PaymailClient.js | 6 +- src/RequestBodyFactory.js | 1 + src/dns-client.js | 4 +- src/http.js | 2 +- test/babel.js | 4 +- test/dns.js | 4 +- test/endpoint-resolver.js | 10 +- test/paymail-client.js | 16 +- test/util/MockDNS.js | 2 +- 15 files changed, 11140 insertions(+), 1624 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index 38d68e5..b91116c 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -1,20 +1,20 @@ -'use strict'; +'use strict' -Object.defineProperty(exports, '__esModule', { value: true }); +Object.defineProperty(exports, '__esModule', { value: true }) -var brfc = require('@moneybutton/brfc'); -var _defineProperty = require('@babel/runtime/helpers/defineProperty'); -require('abort-controller/polyfill'); -var AbortController = require('abort-controller'); -var moment = require('moment'); -var fetch = require('isomorphic-fetch'); +const brfc = require('@moneybutton/brfc') +const _defineProperty = require('@babel/runtime/helpers/defineProperty') +require('abort-controller/polyfill') +const AbortController = require('abort-controller') +const moment = require('moment') +const fetch = require('isomorphic-fetch') -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e } } -var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); -var AbortController__default = /*#__PURE__*/_interopDefaultLegacy(AbortController); -var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment); -var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch); +const _defineProperty__default = /* #__PURE__ */_interopDefaultLegacy(_defineProperty) +const AbortController__default = /* #__PURE__ */_interopDefaultLegacy(AbortController) +const moment__default = /* #__PURE__ */_interopDefaultLegacy(moment) +const fetch__default = /* #__PURE__ */_interopDefaultLegacy(fetch) const CapabilityCodes = { pki: 'pki', @@ -24,16 +24,16 @@ const CapabilityCodes = { publicProfile: brfc.brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), receiveTransaction: brfc.brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), p2pPaymentDestination: brfc.brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') -}; +} // import { DnsOverHttps } from "./dns-over-https" class DnsClient { - constructor(dns, doh) { - this.dns = dns; - this.doh = doh; + constructor (dns, doh) { + this.dns = dns + this.doh = doh } - async checkSrv(aDomain) { + async checkSrv (aDomain) { return new Promise((resolve, reject) => { this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { try { @@ -42,306 +42,301 @@ class DnsClient { domain: aDomain, port: 443, isSecure: true - }); + }) } if (err) { - return reject(err); + return reject(err) } const { name: domainFromDns, port, isSecure - } = result[0]; + } = result[0] resolve({ domain: domainFromDns, port, isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure - }); + }) } catch (err) { - return reject(err); + return reject(err) } - }); + }) }).then(result => { if (result.isSecure) { - return result; + return result } else { - return this.validateDnssec(aDomain); + return this.validateDnssec(aDomain) } }, err => { - console.error(err); - return err; - }); + console.error(err) + return err + }) } - checkDomainIsSecure(srvResponseDomain, originalDomain) { + checkDomainIsSecure (srvResponseDomain, originalDomain) { if (this.domainsAreEqual(srvResponseDomain, originalDomain)) { - return true; + return true } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) { - return true; + return true } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :) - return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain); + return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain) } else if (this.isHandcashInternalDomain(originalDomain)) { - return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain); + return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain) } else if (this.domainsAreEqual('localhost', srvResponseDomain)) { - return true; + return true } else if (this.isMoneyButtonDomain(srvResponseDomain)) { - return true; + return true } else { - return false; + return false } } - isMoneyButtonDomain(aDomain) { - return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com'); + isMoneyButtonDomain (aDomain) { + return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com') } - responseIsWwwSubdomain(srvResponseDomain, originalDomain) { - return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`); + responseIsWwwSubdomain (srvResponseDomain, originalDomain) { + return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`) } - isHandcashDomain(aDomain) { - return this.domainsAreEqual('handcash.io', aDomain); + isHandcashDomain (aDomain) { + return this.domainsAreEqual('handcash.io', aDomain) } - isHandcashInternalDomain(aDomain) { - return this.domainsAreEqual('internal.handcash.io', aDomain); + isHandcashInternalDomain (aDomain) { + return this.domainsAreEqual('internal.handcash.io', aDomain) } - async validateDnssec(aDomain) { - const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); + async validateDnssec (aDomain) { + const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain) if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { - throw new Error(`Insecure domain.`); + throw new Error('Insecure domain.') } - const data = dnsResponse.Answer[0].data.split(' '); - const port = data[2]; - const responseDomain = data[3]; + const data = dnsResponse.Answer[0].data.split(' ') + const port = data[2] + const responseDomain = data[3] if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) { - throw new Error(`Insecure domain.`); + throw new Error('Insecure domain.') } return { port, domain: responseDomain, isSecure: dnsResponse.AD - }; + } } - domainsAreEqual(domain1, domain2) { - return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, ''); + domainsAreEqual (domain1, domain2) { + return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, '') } - } class DnsOverHttps { - constructor(fetch, config) { - this.fetch = fetch; - this.config = config; + constructor (fetch, config) { + this.fetch = fetch + this.config = config } - async resolveSrv(aDomain) { - const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); - const body = await response.json(); - return body; + async resolveSrv (aDomain) { + const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`) + const body = await response.json() + return body } - async queryBsvaliasDomain(aDomain) { - return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); + async queryBsvaliasDomain (aDomain) { + return this.resolveSrv(`_bsvalias._tcp.${aDomain}`) } - } -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } +function ownKeys (object, enumerableOnly) { const keys = Object.keys(object); if (Object.getOwnPropertySymbols) { let symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable }) } keys.push.apply(keys, symbols) } return keys } -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } +function _objectSpread (target) { for (let i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default.default(target, key, source[key]) }) } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)) }) } } return target } class Http { - constructor(fetch) { - this.fetch = fetch; + constructor (fetch) { + this.fetch = fetch } - async get(url) { - return this._basicRequest(url); + async get (url) { + return this._basicRequest(url) } - async postJson(url, body) { + async postJson (url, body) { return this._basicRequest(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) - }); + }) } - async _basicRequest(url, options = {}) { - var controller = new AbortController__default['default'](); - const timer = setTimeout(() => controller.abort(), 30000); + async _basicRequest (url, options = {}) { + const controller = new AbortController__default.default() + const timer = setTimeout(() => controller.abort(), 30000) return this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { credentials: 'omit', signal: controller.signal })).then(result => { - clearTimeout(timer); - return result; - }); + clearTimeout(timer) + return result + }) } - } class EndpointResolver { - constructor(dns = null, fetch) { + constructor (dns = null, fetch) { this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - })); - this.http = new Http(fetch); - this._cache = {}; + })) + this.http = new Http(fetch) + this._cache = {} } - static create(dnsClient, fetch) { - const instance = new EndpointResolver(null, fetch); - instance.dnsClient = dnsClient; - return instance; + static create (dnsClient, fetch) { + const instance = new EndpointResolver(null, fetch) + instance.dnsClient = dnsClient + return instance } - async getIdentityUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.pki); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain); - return identityUrl; + async getIdentityUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.pki) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain) + return identityUrl } - async getAddressUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain); - return addressUrl; + async getAddressUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain) + return addressUrl } - async getVerifyUrlFor(aPaymail, aPubkey) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey); - return url; + async getVerifyUrlFor (aPaymail, aPubkey) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey) + return url } - async getPublicProfileUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; + async getPublicProfileUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain) + return url } - async getSendTxUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; + async getSendTxUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain) + return url } - async getP2pPatmentDestinationUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; + async getP2pPatmentDestinationUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain) + return url } - async domainHasCapability(aDomain, capability) { - const apiDescriptor = await this.getApiDescriptionFor(aDomain); - return !!apiDescriptor.capabilities[capability]; + async domainHasCapability (aDomain, capability) { + const apiDescriptor = await this.getApiDescriptionFor(aDomain) + return !!apiDescriptor.capabilities[capability] } - async getApiDescriptionFor(aDomain) { + async getApiDescriptionFor (aDomain) { if (this._cache[aDomain]) { - return this._cache[aDomain]; + return this._cache[aDomain] } const { domain, port - } = await this.getWellKnownBaseUrl(aDomain); - const apiDescriptor = this.fetchApiDescriptor(domain, port); - this._cache[aDomain] = apiDescriptor; - return apiDescriptor; + } = await this.getWellKnownBaseUrl(aDomain) + const apiDescriptor = this.fetchApiDescriptor(domain, port) + this._cache[aDomain] = apiDescriptor + return apiDescriptor } - async fetchApiDescriptor(domain, port) { - const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https'; - const requestPort = port.toString() === '443' ? '' : `:${port}`; - const requestDomain = /^(.*?)\.?$/.exec(domain)[1]; // Get value from capture group + async fetchApiDescriptor (domain, port) { + const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https' + const requestPort = port.toString() === '443' ? '' : `:${port}` + const requestDomain = /^(.*?)\.?$/.exec(domain)[1] // Get value from capture group if (!requestDomain) { - throw new Error(`Invalid domain: ${domain}`); + throw new Error(`Invalid domain: ${domain}`) } - const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`); - const apiDescriptor = await wellKnown.json(); - return apiDescriptor; + const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`) + const apiDescriptor = await wellKnown.json() + return apiDescriptor } - async getWellKnownBaseUrl(aDomain) { - return this.dnsClient.checkSrv(aDomain); + async getWellKnownBaseUrl (aDomain) { + return this.dnsClient.checkSrv(aDomain) } - async ensureCapabilityFor(aDomain, aCapability) { + async ensureCapabilityFor (aDomain, aCapability) { if (!(await this.domainHasCapability(aDomain, aCapability))) { - throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`); + throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`) } } - } class VerifiableMessage { - constructor(parts, bsv = null) { + constructor (parts, bsv = null) { if (bsv === null) { - bsv = require('bsv'); - bsv.Message = require('bsv/message'); + bsv = require('bsv') + bsv.Message = require('bsv/message') } - this.bsv = bsv; - const concatenated = Buffer.from(parts.join('')); - this.message = new this.bsv.Message(concatenated); + this.bsv = bsv + const concatenated = Buffer.from(parts.join('')) + this.message = new this.bsv.Message(concatenated) } - static forBasicAddressResolution({ + static forBasicAddressResolution ({ senderHandle, amount, dt, purpose }) { if (dt.toISOString) { - dt = dt.toISOString(); + dt = dt.toISOString() } - return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]); + return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]) } - sign(wifPrivateKey) { - return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)); + sign (wifPrivateKey) { + return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)) } - verify(keyAddress, signature) { - return this.message.verify(keyAddress, signature); + verify (keyAddress, signature) { + return this.message.verify(keyAddress, signature) } - } class RequestBodyFactory { - constructor(clock) { - this.clock = clock; + constructor (clock) { + this.clock = clock } - buildBodyToRequestAddress(senderInfo, privateKey = null) { + buildBodyToRequestAddress (senderInfo, privateKey = null) { const { senderHandle, amount, @@ -349,29 +344,29 @@ class RequestBodyFactory { purpose, pubkey, signature: providedSignature - } = senderInfo; + } = senderInfo if (!providedSignature && privateKey === null) { - throw new Error('Missing private key or signature'); + throw new Error('Missing private key or signature') } - let dt, signature; + let dt, signature if (providedSignature) { if (!senderInfo.dt) { - throw new Error('missing datetime for given signature'); + throw new Error('missing datetime for given signature') } - dt = senderInfo.dt; - signature = providedSignature; + dt = senderInfo.dt + signature = providedSignature } else { - dt = this.clock.now(); + dt = this.clock.now() signature = VerifiableMessage.forBasicAddressResolution({ senderHandle, amount, dt, purpose - }).sign(privateKey); + }).sign(privateKey) } return { @@ -382,96 +377,92 @@ class RequestBodyFactory { amount: amount || null, pubkey, signature - }; + } } - buildBodySendTx(hexTransaction, reference, metadata) { + buildBodySendTx (hexTransaction, reference, metadata) { return { hex: hexTransaction, metadata, reference - }; + } } - buildBodyP2pPaymentDestination(satoshis) { + buildBodyP2pPaymentDestination (satoshis) { return { satoshis - }; + } } - } class Clock { - now() { - return moment__default['default'](); + now () { + return moment__default.default() } - } class PaymailNotFound extends Error { - constructor(message, paymail) { - super(message); - this.paymail = paymail; + constructor (message, paymail) { + super(message) + this.paymail = paymail } - } class BrowserDns { - constructor(fetch) { + constructor (fetch) { this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - }); + }) } - async resolveSrv(aDomain, aCallback) { + async resolveSrv (aDomain, aCallback) { try { - const response = await this.doh.resolveSrv(aDomain); + const response = await this.doh.resolveSrv(aDomain) if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { - const [priority, weight, port, name] = record.data.split(' '); + const [priority, weight, port, name] = record.data.split(' ') return { priority, weight, port, name, isSecure: response.AD - }; - }); - aCallback(null, data); + } + }) + aCallback(null, data) } else if (!response.Answer) { // ignore check response.Status === 0 aCallback({ code: 'ENODATA' - }); + }) } else { - aCallback(new Error('error during dns query')); + aCallback(new Error('error during dns query')) } } catch (e) { - aCallback(e); + aCallback(e) } } - } class PaymailClient { - constructor(dns = null, fetch2 = null, clock = null, bsv = null) { + constructor (dns = null, fetch2 = null, clock = null, bsv = null) { if (fetch2 === null) { - fetch2 = fetch__default['default']; + fetch2 = fetch__default.default } if (dns === null) { - dns = new BrowserDns(fetch2); + dns = new BrowserDns(fetch2) } if (bsv === null) { - bsv = require('bsv'); + bsv = require('bsv') } - this.bsv = bsv; - this.resolver = new EndpointResolver(dns, fetch2); - this.http = new Http(fetch2); - this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); + this.bsv = bsv + this.resolver = new EndpointResolver(dns, fetch2) + this.http = new Http(fetch2) + this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()) } /** * Uses pki flow to query for an identity key for a given paymail address. @@ -479,14 +470,13 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - - async getPublicKey(paymail) { - const identityUrl = await this.resolver.getIdentityUrlFor(paymail); - const response = await this.http.get(identityUrl); + async getPublicKey (paymail) { + const identityUrl = await this.resolver.getIdentityUrlFor(paymail) + const response = await this.http.get(identityUrl) const { pubkey - } = await response.json(); - return pubkey; + } = await response.json() + return pubkey } /** * Uses `Basic Address Resolution` flow to query for a payment for output for the @@ -503,19 +493,18 @@ class PaymailClient { * @param {String} privateKey - Optional. private key to sign the request. */ - - async getOutputFor(aPaymail, senderInfo, privateKey = null) { - const addressUrl = await this.resolver.getAddressUrlFor(aPaymail); - const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)); + async getOutputFor (aPaymail, senderInfo, privateKey = null) { + const addressUrl = await this.resolver.getAddressUrlFor(aPaymail) + const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)) if (!response.ok) { - throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail); + throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail) } const { output - } = await response.json(); - return output; + } = await response.json() + return output } /** * Verify if the given public address belongs to the given @@ -525,15 +514,14 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - - async verifyPubkeyOwner(pubkey, paymail) { - const url = await this.resolver.getVerifyUrlFor(paymail, pubkey); - const response = await this.http.get(url); - const body = await response.json(); + async verifyPubkeyOwner (pubkey, paymail) { + const url = await this.resolver.getVerifyUrlFor(paymail, pubkey) + const response = await this.http.get(url) + const body = await response.json() const { match - } = body; - return match; + } = body + return match } /** * Verifies if a given signature is valid for a given message. It uses @@ -550,40 +538,39 @@ class PaymailClient { * @param {String} pubkey - Optional. Public key that validates the signature. */ - - async isValidSignature(message, signature, paymail = null, pubkey = null) { + async isValidSignature (message, signature, paymail = null, pubkey = null) { if (paymail == null && pubkey === null) { - throw new Error('Must specify either paymail or pubkey'); + throw new Error('Must specify either paymail or pubkey') } - let senderPublicKey; + let senderPublicKey if (paymail) { if (pubkey && (await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner))) { if (await this.verifyPubkeyOwner(pubkey, paymail)) { - senderPublicKey = this.bsv.PublicKey.fromString(pubkey); + senderPublicKey = this.bsv.PublicKey.fromString(pubkey) } else { - return false; + return false } } else { - const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki); + const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki) if (hasPki) { - const identityKey = await this.getPublicKey(paymail); - senderPublicKey = this.bsv.PublicKey.fromString(identityKey); + const identityKey = await this.getPublicKey(paymail) + senderPublicKey = this.bsv.PublicKey.fromString(identityKey) } else { - return false; + return false } } } - const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey); + const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey) try { - const verified = message.verify(senderKeyAddress.toString(), signature); - return verified; + const verified = message.verify(senderKeyAddress.toString(), signature) + return verified } catch (err) { - return false; + return false } } /** @@ -593,71 +580,69 @@ class PaymailClient { * @param {String} s - the preferred size of the image */ - - async getPublicProfile(paymail) { - let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail); - const response = await this.http.get(publicProfileUrl); + async getPublicProfile (paymail) { + const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail) + const response = await this.http.get(publicProfileUrl) if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); + const body = await response.json() + throw new Error(`Server failed with: ${JSON.stringify(body)}`) } const { avatar, name - } = await response.json(); + } = await response.json() return { avatar, name - }; + } } - async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { + async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) { if (!hexTransaction) { - throw new Error('transaction hex cannot be empty'); + throw new Error('transaction hex cannot be empty') } - let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail); - const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)); + const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail) + const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)) if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); + const body = await response.json() + throw new Error(`Server failed with: ${JSON.stringify(body)}`) } - return response.json(); + return response.json() } - async getP2pPaymentDestination(targetPaymail, satoshis) { + async getP2pPaymentDestination (targetPaymail, satoshis) { if (!satoshis) { - throw new Error('Amount in satohis needs to be specified'); + throw new Error('Amount in satohis needs to be specified') } - let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail); - const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)); + const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail) + const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)) if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); + const body = await response.json() + throw new Error(`Server failed with: ${JSON.stringify(body)}`) } - const body = await response.json(); + const body = await response.json() if (!body.outputs) { - throw new Error('Server answered with a wrong format. Missing outputs'); + throw new Error('Server answered with a wrong format. Missing outputs') } - return body; + return body } - } -exports.BrowserDns = BrowserDns; -exports.CapabilityCodes = CapabilityCodes; -exports.Clock = Clock; -exports.PaymailClient = PaymailClient; -exports.PaymailNotFound = PaymailNotFound; -exports.RequestBodyFactory = RequestBodyFactory; -exports.VerifiableMessage = VerifiableMessage; -//# sourceMappingURL=paymail-client.cjs.js.map +exports.BrowserDns = BrowserDns +exports.CapabilityCodes = CapabilityCodes +exports.Clock = Clock +exports.PaymailClient = PaymailClient +exports.PaymailNotFound = PaymailNotFound +exports.RequestBodyFactory = RequestBodyFactory +exports.VerifiableMessage = VerifiableMessage +// # sourceMappingURL=paymail-client.cjs.js.map diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index 40bc9b3..7109d33 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -1,9 +1,9 @@ -import { brfc } from '@moneybutton/brfc'; -import _defineProperty from '@babel/runtime/helpers/defineProperty'; -import 'abort-controller/polyfill'; -import AbortController from 'abort-controller'; -import moment from 'moment'; -import fetch from 'isomorphic-fetch'; +import { brfc } from '@moneybutton/brfc' +import _defineProperty from '@babel/runtime/helpers/defineProperty' +import 'abort-controller/polyfill' +import AbortController from 'abort-controller' +import moment from 'moment' +import fetch from 'isomorphic-fetch' const CapabilityCodes = { pki: 'pki', @@ -13,16 +13,16 @@ const CapabilityCodes = { publicProfile: brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), receiveTransaction: brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), p2pPaymentDestination: brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') -}; +} // import { DnsOverHttps } from "./dns-over-https" class DnsClient { - constructor(dns, doh) { - this.dns = dns; - this.doh = doh; + constructor (dns, doh) { + this.dns = dns + this.doh = doh } - async checkSrv(aDomain) { + async checkSrv (aDomain) { return new Promise((resolve, reject) => { this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { try { @@ -31,306 +31,301 @@ class DnsClient { domain: aDomain, port: 443, isSecure: true - }); + }) } if (err) { - return reject(err); + return reject(err) } const { name: domainFromDns, port, isSecure - } = result[0]; + } = result[0] resolve({ domain: domainFromDns, port, isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure - }); + }) } catch (err) { - return reject(err); + return reject(err) } - }); + }) }).then(result => { if (result.isSecure) { - return result; + return result } else { - return this.validateDnssec(aDomain); + return this.validateDnssec(aDomain) } }, err => { - console.error(err); - return err; - }); + console.error(err) + return err + }) } - checkDomainIsSecure(srvResponseDomain, originalDomain) { + checkDomainIsSecure (srvResponseDomain, originalDomain) { if (this.domainsAreEqual(srvResponseDomain, originalDomain)) { - return true; + return true } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) { - return true; + return true } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :) - return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain); + return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain) } else if (this.isHandcashInternalDomain(originalDomain)) { - return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain); + return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain) } else if (this.domainsAreEqual('localhost', srvResponseDomain)) { - return true; + return true } else if (this.isMoneyButtonDomain(srvResponseDomain)) { - return true; + return true } else { - return false; + return false } } - isMoneyButtonDomain(aDomain) { - return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com'); + isMoneyButtonDomain (aDomain) { + return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com') } - responseIsWwwSubdomain(srvResponseDomain, originalDomain) { - return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`); + responseIsWwwSubdomain (srvResponseDomain, originalDomain) { + return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`) } - isHandcashDomain(aDomain) { - return this.domainsAreEqual('handcash.io', aDomain); + isHandcashDomain (aDomain) { + return this.domainsAreEqual('handcash.io', aDomain) } - isHandcashInternalDomain(aDomain) { - return this.domainsAreEqual('internal.handcash.io', aDomain); + isHandcashInternalDomain (aDomain) { + return this.domainsAreEqual('internal.handcash.io', aDomain) } - async validateDnssec(aDomain) { - const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); + async validateDnssec (aDomain) { + const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain) if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { - throw new Error(`Insecure domain.`); + throw new Error('Insecure domain.') } - const data = dnsResponse.Answer[0].data.split(' '); - const port = data[2]; - const responseDomain = data[3]; + const data = dnsResponse.Answer[0].data.split(' ') + const port = data[2] + const responseDomain = data[3] if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) { - throw new Error(`Insecure domain.`); + throw new Error('Insecure domain.') } return { port, domain: responseDomain, isSecure: dnsResponse.AD - }; + } } - domainsAreEqual(domain1, domain2) { - return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, ''); + domainsAreEqual (domain1, domain2) { + return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, '') } - } class DnsOverHttps { - constructor(fetch, config) { - this.fetch = fetch; - this.config = config; + constructor (fetch, config) { + this.fetch = fetch + this.config = config } - async resolveSrv(aDomain) { - const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); - const body = await response.json(); - return body; + async resolveSrv (aDomain) { + const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`) + const body = await response.json() + return body } - async queryBsvaliasDomain(aDomain) { - return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); + async queryBsvaliasDomain (aDomain) { + return this.resolveSrv(`_bsvalias._tcp.${aDomain}`) } - } -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } +function ownKeys (object, enumerableOnly) { const keys = Object.keys(object); if (Object.getOwnPropertySymbols) { let symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable }) } keys.push.apply(keys, symbols) } return keys } -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } +function _objectSpread (target) { for (let i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]) }) } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)) }) } } return target } class Http { - constructor(fetch) { - this.fetch = fetch; + constructor (fetch) { + this.fetch = fetch } - async get(url) { - return this._basicRequest(url); + async get (url) { + return this._basicRequest(url) } - async postJson(url, body) { + async postJson (url, body) { return this._basicRequest(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) - }); + }) } - async _basicRequest(url, options = {}) { - var controller = new AbortController(); - const timer = setTimeout(() => controller.abort(), 30000); + async _basicRequest (url, options = {}) { + const controller = new AbortController() + const timer = setTimeout(() => controller.abort(), 30000) return this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { credentials: 'omit', signal: controller.signal })).then(result => { - clearTimeout(timer); - return result; - }); + clearTimeout(timer) + return result + }) } - } class EndpointResolver { - constructor(dns = null, fetch) { + constructor (dns = null, fetch) { this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - })); - this.http = new Http(fetch); - this._cache = {}; + })) + this.http = new Http(fetch) + this._cache = {} } - static create(dnsClient, fetch) { - const instance = new EndpointResolver(null, fetch); - instance.dnsClient = dnsClient; - return instance; + static create (dnsClient, fetch) { + const instance = new EndpointResolver(null, fetch) + instance.dnsClient = dnsClient + return instance } - async getIdentityUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.pki); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain); - return identityUrl; + async getIdentityUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.pki) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain) + return identityUrl } - async getAddressUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain); - return addressUrl; + async getAddressUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain) + return addressUrl } - async getVerifyUrlFor(aPaymail, aPubkey) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey); - return url; + async getVerifyUrlFor (aPaymail, aPubkey) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey) + return url } - async getPublicProfileUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; + async getPublicProfileUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain) + return url } - async getSendTxUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; + async getSendTxUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain) + return url } - async getP2pPatmentDestinationUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; + async getP2pPatmentDestinationUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain) + return url } - async domainHasCapability(aDomain, capability) { - const apiDescriptor = await this.getApiDescriptionFor(aDomain); - return !!apiDescriptor.capabilities[capability]; + async domainHasCapability (aDomain, capability) { + const apiDescriptor = await this.getApiDescriptionFor(aDomain) + return !!apiDescriptor.capabilities[capability] } - async getApiDescriptionFor(aDomain) { + async getApiDescriptionFor (aDomain) { if (this._cache[aDomain]) { - return this._cache[aDomain]; + return this._cache[aDomain] } const { domain, port - } = await this.getWellKnownBaseUrl(aDomain); - const apiDescriptor = this.fetchApiDescriptor(domain, port); - this._cache[aDomain] = apiDescriptor; - return apiDescriptor; + } = await this.getWellKnownBaseUrl(aDomain) + const apiDescriptor = this.fetchApiDescriptor(domain, port) + this._cache[aDomain] = apiDescriptor + return apiDescriptor } - async fetchApiDescriptor(domain, port) { - const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https'; - const requestPort = port.toString() === '443' ? '' : `:${port}`; - const requestDomain = /^(.*?)\.?$/.exec(domain)[1]; // Get value from capture group + async fetchApiDescriptor (domain, port) { + const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https' + const requestPort = port.toString() === '443' ? '' : `:${port}` + const requestDomain = /^(.*?)\.?$/.exec(domain)[1] // Get value from capture group if (!requestDomain) { - throw new Error(`Invalid domain: ${domain}`); + throw new Error(`Invalid domain: ${domain}`) } - const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`); - const apiDescriptor = await wellKnown.json(); - return apiDescriptor; + const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`) + const apiDescriptor = await wellKnown.json() + return apiDescriptor } - async getWellKnownBaseUrl(aDomain) { - return this.dnsClient.checkSrv(aDomain); + async getWellKnownBaseUrl (aDomain) { + return this.dnsClient.checkSrv(aDomain) } - async ensureCapabilityFor(aDomain, aCapability) { + async ensureCapabilityFor (aDomain, aCapability) { if (!(await this.domainHasCapability(aDomain, aCapability))) { - throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`); + throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`) } } - } class VerifiableMessage { - constructor(parts, bsv = null) { + constructor (parts, bsv = null) { if (bsv === null) { - bsv = require('bsv'); - bsv.Message = require('bsv/message'); + bsv = require('bsv') + bsv.Message = require('bsv/message') } - this.bsv = bsv; - const concatenated = Buffer.from(parts.join('')); - this.message = new this.bsv.Message(concatenated); + this.bsv = bsv + const concatenated = Buffer.from(parts.join('')) + this.message = new this.bsv.Message(concatenated) } - static forBasicAddressResolution({ + static forBasicAddressResolution ({ senderHandle, amount, dt, purpose }) { if (dt.toISOString) { - dt = dt.toISOString(); + dt = dt.toISOString() } - return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]); + return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]) } - sign(wifPrivateKey) { - return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)); + sign (wifPrivateKey) { + return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)) } - verify(keyAddress, signature) { - return this.message.verify(keyAddress, signature); + verify (keyAddress, signature) { + return this.message.verify(keyAddress, signature) } - } class RequestBodyFactory { - constructor(clock) { - this.clock = clock; + constructor (clock) { + this.clock = clock } - buildBodyToRequestAddress(senderInfo, privateKey = null) { + buildBodyToRequestAddress (senderInfo, privateKey = null) { const { senderHandle, amount, @@ -338,29 +333,29 @@ class RequestBodyFactory { purpose, pubkey, signature: providedSignature - } = senderInfo; + } = senderInfo if (!providedSignature && privateKey === null) { - throw new Error('Missing private key or signature'); + throw new Error('Missing private key or signature') } - let dt, signature; + let dt, signature if (providedSignature) { if (!senderInfo.dt) { - throw new Error('missing datetime for given signature'); + throw new Error('missing datetime for given signature') } - dt = senderInfo.dt; - signature = providedSignature; + dt = senderInfo.dt + signature = providedSignature } else { - dt = this.clock.now(); + dt = this.clock.now() signature = VerifiableMessage.forBasicAddressResolution({ senderHandle, amount, dt, purpose - }).sign(privateKey); + }).sign(privateKey) } return { @@ -371,96 +366,92 @@ class RequestBodyFactory { amount: amount || null, pubkey, signature - }; + } } - buildBodySendTx(hexTransaction, reference, metadata) { + buildBodySendTx (hexTransaction, reference, metadata) { return { hex: hexTransaction, metadata, reference - }; + } } - buildBodyP2pPaymentDestination(satoshis) { + buildBodyP2pPaymentDestination (satoshis) { return { satoshis - }; + } } - } class Clock { - now() { - return moment(); + now () { + return moment() } - } class PaymailNotFound extends Error { - constructor(message, paymail) { - super(message); - this.paymail = paymail; + constructor (message, paymail) { + super(message) + this.paymail = paymail } - } class BrowserDns { - constructor(fetch) { + constructor (fetch) { this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - }); + }) } - async resolveSrv(aDomain, aCallback) { + async resolveSrv (aDomain, aCallback) { try { - const response = await this.doh.resolveSrv(aDomain); + const response = await this.doh.resolveSrv(aDomain) if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { - const [priority, weight, port, name] = record.data.split(' '); + const [priority, weight, port, name] = record.data.split(' ') return { priority, weight, port, name, isSecure: response.AD - }; - }); - aCallback(null, data); + } + }) + aCallback(null, data) } else if (!response.Answer) { // ignore check response.Status === 0 aCallback({ code: 'ENODATA' - }); + }) } else { - aCallback(new Error('error during dns query')); + aCallback(new Error('error during dns query')) } } catch (e) { - aCallback(e); + aCallback(e) } } - } class PaymailClient { - constructor(dns = null, fetch2 = null, clock = null, bsv = null) { + constructor (dns = null, fetch2 = null, clock = null, bsv = null) { if (fetch2 === null) { - fetch2 = fetch; + fetch2 = fetch } if (dns === null) { - dns = new BrowserDns(fetch2); + dns = new BrowserDns(fetch2) } if (bsv === null) { - bsv = require('bsv'); + bsv = require('bsv') } - this.bsv = bsv; - this.resolver = new EndpointResolver(dns, fetch2); - this.http = new Http(fetch2); - this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); + this.bsv = bsv + this.resolver = new EndpointResolver(dns, fetch2) + this.http = new Http(fetch2) + this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()) } /** * Uses pki flow to query for an identity key for a given paymail address. @@ -468,14 +459,13 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - - async getPublicKey(paymail) { - const identityUrl = await this.resolver.getIdentityUrlFor(paymail); - const response = await this.http.get(identityUrl); + async getPublicKey (paymail) { + const identityUrl = await this.resolver.getIdentityUrlFor(paymail) + const response = await this.http.get(identityUrl) const { pubkey - } = await response.json(); - return pubkey; + } = await response.json() + return pubkey } /** * Uses `Basic Address Resolution` flow to query for a payment for output for the @@ -492,19 +482,18 @@ class PaymailClient { * @param {String} privateKey - Optional. private key to sign the request. */ - - async getOutputFor(aPaymail, senderInfo, privateKey = null) { - const addressUrl = await this.resolver.getAddressUrlFor(aPaymail); - const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)); + async getOutputFor (aPaymail, senderInfo, privateKey = null) { + const addressUrl = await this.resolver.getAddressUrlFor(aPaymail) + const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)) if (!response.ok) { - throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail); + throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail) } const { output - } = await response.json(); - return output; + } = await response.json() + return output } /** * Verify if the given public address belongs to the given @@ -514,15 +503,14 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - - async verifyPubkeyOwner(pubkey, paymail) { - const url = await this.resolver.getVerifyUrlFor(paymail, pubkey); - const response = await this.http.get(url); - const body = await response.json(); + async verifyPubkeyOwner (pubkey, paymail) { + const url = await this.resolver.getVerifyUrlFor(paymail, pubkey) + const response = await this.http.get(url) + const body = await response.json() const { match - } = body; - return match; + } = body + return match } /** * Verifies if a given signature is valid for a given message. It uses @@ -539,40 +527,39 @@ class PaymailClient { * @param {String} pubkey - Optional. Public key that validates the signature. */ - - async isValidSignature(message, signature, paymail = null, pubkey = null) { + async isValidSignature (message, signature, paymail = null, pubkey = null) { if (paymail == null && pubkey === null) { - throw new Error('Must specify either paymail or pubkey'); + throw new Error('Must specify either paymail or pubkey') } - let senderPublicKey; + let senderPublicKey if (paymail) { if (pubkey && (await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner))) { if (await this.verifyPubkeyOwner(pubkey, paymail)) { - senderPublicKey = this.bsv.PublicKey.fromString(pubkey); + senderPublicKey = this.bsv.PublicKey.fromString(pubkey) } else { - return false; + return false } } else { - const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki); + const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki) if (hasPki) { - const identityKey = await this.getPublicKey(paymail); - senderPublicKey = this.bsv.PublicKey.fromString(identityKey); + const identityKey = await this.getPublicKey(paymail) + senderPublicKey = this.bsv.PublicKey.fromString(identityKey) } else { - return false; + return false } } } - const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey); + const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey) try { - const verified = message.verify(senderKeyAddress.toString(), signature); - return verified; + const verified = message.verify(senderKeyAddress.toString(), signature) + return verified } catch (err) { - return false; + return false } } /** @@ -582,65 +569,63 @@ class PaymailClient { * @param {String} s - the preferred size of the image */ - - async getPublicProfile(paymail) { - let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail); - const response = await this.http.get(publicProfileUrl); + async getPublicProfile (paymail) { + const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail) + const response = await this.http.get(publicProfileUrl) if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); + const body = await response.json() + throw new Error(`Server failed with: ${JSON.stringify(body)}`) } const { avatar, name - } = await response.json(); + } = await response.json() return { avatar, name - }; + } } - async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { + async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) { if (!hexTransaction) { - throw new Error('transaction hex cannot be empty'); + throw new Error('transaction hex cannot be empty') } - let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail); - const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)); + const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail) + const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)) if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); + const body = await response.json() + throw new Error(`Server failed with: ${JSON.stringify(body)}`) } - return response.json(); + return response.json() } - async getP2pPaymentDestination(targetPaymail, satoshis) { + async getP2pPaymentDestination (targetPaymail, satoshis) { if (!satoshis) { - throw new Error('Amount in satohis needs to be specified'); + throw new Error('Amount in satohis needs to be specified') } - let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail); - const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)); + const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail) + const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)) if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); + const body = await response.json() + throw new Error(`Server failed with: ${JSON.stringify(body)}`) } - const body = await response.json(); + const body = await response.json() if (!body.outputs) { - throw new Error('Server answered with a wrong format. Missing outputs'); + throw new Error('Server answered with a wrong format. Missing outputs') } - return body; + return body } - } -export { BrowserDns, CapabilityCodes, Clock, PaymailClient, PaymailNotFound, RequestBodyFactory, VerifiableMessage }; -//# sourceMappingURL=paymail-client.esm.js.map +export { BrowserDns, CapabilityCodes, Clock, PaymailClient, PaymailNotFound, RequestBodyFactory, VerifiableMessage } +// # sourceMappingURL=paymail-client.esm.js.map diff --git a/package-lock.json b/package-lock.json index a21f193..be0401a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,52 @@ { "name": "@moneybutton/paymail-client", "version": "0.38.3", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@babel/cli": { + "packages": { + "": { + "name": "@moneybutton/paymail-client", + "version": "0.38.3", + "license": "Open-BSV", + "dependencies": { + "@babel/runtime": "7.14.0", + "@moneybutton/brfc": "github:baryon/brfc", + "abort-controller": "3.0.0", + "bsv": "^1.5.5", + "isomorphic-fetch": "^3.0.0", + "moment": "^2.24.0" + }, + "devDependencies": { + "@babel/cli": "7.14.3", + "@babel/core": "7.14.3", + "@babel/plugin-proposal-object-rest-spread": "7.14.2", + "@babel/plugin-transform-runtime": "7.14.3", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "7.14.2", + "@babel/register": "^7.10.5", + "@rollup/plugin-commonjs": "19.0.0", + "@rollup/plugin-node-resolve": "13.0.0", + "@rollup/plugin-replace": "2.4.2", + "babel-eslint": "10.1.0", + "bdd-lazy-var": "2.6.1", + "chai": "4.3.4", + "dotenv-cli": "4.0.0", + "http-server": "0.12.3", + "mocha": "8.4.0", + "rollup": "2.48.0", + "rollup-plugin-babel": "4.4.0", + "rollup-plugin-node-builtins": "2.1.2", + "rollup-plugin-node-globals": "1.4.0", + "should": "13.2.3", + "standard": "16.0.3" + } + }, + "node_modules/@babel/cli": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.3.tgz", "integrity": "sha512-zU4JLvwk32ay1lhhyGfqiRUSPoltVDjhYkA3aQq8+Yby9z30s/EsFw1EPOHxWG9YZo2pAGfgdRNeHZQAYU5m9A==", "dev": true, - "requires": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", - "chokidar": "^3.4.0", + "dependencies": { "commander": "^4.0.1", "convert-source-map": "^1.1.0", "fs-readdir-recursive": "^1.1.0", @@ -19,29 +54,40 @@ "make-dir": "^2.1.0", "slash": "^2.0.0", "source-map": "^0.5.0" + }, + "bin": { + "babel": "bin/babel.js", + "babel-external-helpers": "bin/babel-external-helpers.js" + }, + "optionalDependencies": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", + "chokidar": "^3.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/code-frame": { + "node_modules/@babel/code-frame": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "dev": true, - "requires": { + "dependencies": { "@babel/highlight": "^7.12.13" } }, - "@babel/compat-data": { + "node_modules/@babel/compat-data": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", "dev": true }, - "@babel/core": { + "node_modules/@babel/core": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", "dev": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.12.13", "@babel/generator": "^7.14.3", "@babel/helper-compilation-targets": "^7.13.16", @@ -58,110 +104,95 @@ "semver": "^6.3.0", "source-map": "^0.5.0" }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "@babel/generator": { + "node_modules/@babel/generator": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.14.2", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, - "@babel/helper-annotate-as-pure": { + "node_modules/@babel/helper-annotate-as-pure": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.12.13" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-explode-assignable-expression": "^7.12.13", "@babel/types": "^7.12.13" } }, - "@babel/helper-compilation-targets": { + "node_modules/@babel/helper-compilation-targets": { "version": "7.13.16", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.13.15", "@babel/helper-validator-option": "^7.12.17", "browserslist": "^4.14.5", "semver": "^6.3.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-create-class-features-plugin": { + "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-function-name": "^7.14.2", "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/helper-replace-supers": "^7.14.3", "@babel/helper-split-export-declaration": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-create-regexp-features-plugin": { + "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.12.13", "regexpu-core": "^4.7.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-module-imports": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", @@ -171,93 +202,73 @@ "resolve": "^1.14.2", "semver": "^6.1.2" }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "peerDependencies": { + "@babel/core": "^7.4.0-0" } }, - "@babel/helper-explode-assignable-expression": { + "node_modules/@babel/helper-explode-assignable-expression": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.13.0" } }, - "@babel/helper-function-name": { + "node_modules/@babel/helper-function-name": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-get-function-arity": "^7.12.13", "@babel/template": "^7.12.13", "@babel/types": "^7.14.2" } }, - "@babel/helper-get-function-arity": { + "node_modules/@babel/helper-get-function-arity": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.12.13" } }, - "@babel/helper-hoist-variables": { + "node_modules/@babel/helper-hoist-variables": { "version": "7.13.16", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", "dev": true, - "requires": { + "dependencies": { "@babel/traverse": "^7.13.15", "@babel/types": "^7.13.16" } }, - "@babel/helper-member-expression-to-functions": { + "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.13.12" } }, - "@babel/helper-module-imports": { + "node_modules/@babel/helper-module-imports": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.13.12" } }, - "@babel/helper-module-transforms": { + "node_modules/@babel/helper-module-transforms": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-module-imports": "^7.13.12", "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-simple-access": "^7.13.12", @@ -268,424 +279,9555 @@ "@babel/types": "^7.14.2" } }, - "@babel/helper-optimise-call-expression": { + "node_modules/@babel/helper-optimise-call-expression": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.12.13" } }, - "@babel/helper-plugin-utils": { + "node_modules/@babel/helper-plugin-utils": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "@babel/helper-remap-async-to-generator": { + "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-wrap-function": "^7.13.0", "@babel/types": "^7.13.0" } }, - "@babel/helper-replace-supers": { + "node_modules/@babel/helper-replace-supers": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/traverse": "^7.14.2", "@babel/types": "^7.14.2" } }, - "@babel/helper-simple-access": { + "node_modules/@babel/helper-simple-access": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.13.12" } }, - "@babel/helper-skip-transparent-expression-wrappers": { + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.12.1" } }, - "@babel/helper-split-export-declaration": { + "node_modules/@babel/helper-split-export-declaration": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.12.13" } }, - "@babel/helper-validator-identifier": { + "node_modules/@babel/helper-validator-identifier": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, - "@babel/helper-validator-option": { + "node_modules/@babel/helper-validator-option": { "version": "7.12.17", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", "dev": true }, - "@babel/helper-wrap-function": { + "node_modules/@babel/helper-wrap-function": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-function-name": "^7.12.13", "@babel/template": "^7.12.13", "@babel/traverse": "^7.13.0", "@babel/types": "^7.13.0" } }, - "@babel/helpers": { + "node_modules/@babel/helpers": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, - "requires": { + "dependencies": { "@babel/template": "^7.12.13", "@babel/traverse": "^7.14.0", "@babel/types": "^7.14.0" } }, - "@babel/highlight": { + "node_modules/@babel/highlight": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, - "@babel/parser": { + "node_modules/@babel/parser": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", - "dev": true + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.13.12", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", "@babel/plugin-proposal-optional-chaining": "^7.13.12" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "@babel/plugin-proposal-async-generator-functions": { + "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-remap-async-to-generator": "^7.13.0", "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-class-properties": { + "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.13.0", "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-class-static-block": { + "node_modules/@babel/plugin-proposal-class-static-block": { "version": "7.14.3", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.14.3", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-class-static-block": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "@babel/plugin-proposal-dynamic-import": { + "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-export-namespace-from": { + "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-json-strings": { + "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-logical-assignment-operators": { + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-numeric-separator": { + "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.14.0", "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-catch-binding": { + "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-chaining": { + "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.14.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-private-methods": { + "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-class-features-plugin": "^7.13.0", "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-private-property-in-object": { + "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-create-class-features-plugin": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-unicode-property-regex": { + "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.12.13", "@babel/helper-plugin-utils": "^7.12.13" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-async-generators": { + "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-properties": { + "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-static-block": { + "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-dynamic-import": { + "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-export-namespace-from": { + "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-json-strings": { + "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-numeric-separator": { + "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-object-rest-spread": { + "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-catch-binding": { + "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-chaining": { + "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-private-property-in-object": { + "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-top-level-await": { + "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-arrow-functions": { + "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", "dev": true, - "requires": { + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz", + "integrity": "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz", + "integrity": "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", + "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", + "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.13.12", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", + "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", + "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/polyfill": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", + "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", + "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", + "dev": true, + "dependencies": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz", + "integrity": "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-async-generator-functions": "^7.14.2", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-class-static-block": "^7.13.11", + "@babel/plugin-proposal-dynamic-import": "^7.14.2", + "@babel/plugin-proposal-export-namespace-from": "^7.14.2", + "@babel/plugin-proposal-json-strings": "^7.14.2", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", + "@babel/plugin-proposal-numeric-separator": "^7.14.2", + "@babel/plugin-proposal-object-rest-spread": "^7.14.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", + "@babel/plugin-proposal-optional-chaining": "^7.14.2", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.14.2", + "@babel/plugin-transform-classes": "^7.14.2", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.14.2", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.14.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.14.2", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.2", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", + "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "node_modules/@babel/types": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@moneybutton/brfc": { + "version": "0.38.3", + "resolved": "git+ssh://git@github.com/baryon/brfc.git#aba3a22013ebbe41be7ec27e8de34b7b6a948135", + "license": "Open-BSV", + "peerDependencies": { + "bsv": "^1.5.5" + } + }, + "node_modules/@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz", + "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.0.tgz", + "integrity": "sha512-adTpD6ATGbehdaQoZQ6ipDFhdjqsTgpOAhFiPwl+dzre4pPshsecptDPyEFb61JMJ1+mGljktaC4jI8ARMSNyw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.38.3" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.0.tgz", + "integrity": "sha512-41X411HJ3oikIDivT5OKe9EZ6ud6DXudtfNrGbC4nniaxx2esiWjkLOzgnZsWq1IM8YIeL2rzRGLZLBjlhnZtQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "node_modules/@types/node": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.1.tgz", + "integrity": "sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abstract-leveldown": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", + "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=", + "dev": true, + "dependencies": { + "xtend": "~3.0.0" + } + }, + "node_modules/abstract-leveldown/node_modules/xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/aes-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true, + "optional": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "optional": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz", + "integrity": "sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.9.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "optional": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-x": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/basic-auth": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", + "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/bdd-lazy-var": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bdd-lazy-var/-/bdd-lazy-var-2.6.1.tgz", + "integrity": "sha512-X3ADwcFji/IHIrYJhTTpaiWhoOx4pl4whdAx1dmvdeUPsMUb7fVYFvf/Q33VEAEAVkEwi5rgNSZ0Y9oOVeQV+A==", + "dev": true, + "peerDependencies": { + "jasmine": ">=2", + "jasmine-core": ">=2", + "jest": ">=20", + "mocha": ">=2.3" + }, + "peerDependenciesMeta": { + "jasmine": { + "optional": true + }, + "jasmine-core": { + "optional": true + }, + "jest": { + "optional": true + }, + "mocha": { + "optional": true + } + } + }, + "node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bl": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", + "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=", + "dev": true, + "dependencies": { + "readable-stream": "~1.0.26" + } + }, + "node_modules/bl/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", + "integrity": "sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8=", + "dev": true, + "dependencies": { + "level-filesystem": "^1.0.1", + "level-js": "^2.1.3", + "levelup": "^0.18.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bsv": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/bsv/-/bsv-1.5.6.tgz", + "integrity": "sha512-A0g36x63lVF9Ia6/z/RjcxaQMHE5cLl2rDxjUIKz0UTMLf5bPPyLI9yVyY2JkecF77MrU+MQdKVt0MSdU5abtw==", + "dependencies": { + "aes-js": "^3.1.2", + "bn.js": "=4.11.9", + "bs58": "=4.0.1", + "clone-deep": "^4.0.1", + "elliptic": "6.5.4", + "hash.js": "^1.1.7", + "inherits": "2.0.3", + "unorm": "1.4.1" + } + }, + "node_modules/bsv/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/buffer-es6": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz", + "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=", + "dev": true + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "optional": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001230", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", + "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/chokidar/node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/chokidar/node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chokidar/node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/chokidar/node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/chokidar/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", + "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "optional": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true, + "optional": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true + }, + "node_modules/core-js-compat": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.13.0.tgz", + "integrity": "sha512-jhbI2zpVskgfDC9mGRaDo1gagd0E0i/kYW0+WvibL/rafEHKAHO653hEXIxJHqRlRLITluXtRH3AGTL5qJmifQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deferred-leveldown": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", + "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=", + "dev": true, + "dependencies": { + "abstract-leveldown": "~0.12.1" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-cli": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-4.0.0.tgz", + "integrity": "sha512-ByKEec+ashePEXthZaA1fif9XDtcaRnkN7eGdBDx3HHRjwZ/rA1go83Cbs4yRrx3JshsCf96FjAyIA2M672+CQ==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1", + "dotenv": "^8.1.0", + "dotenv-expand": "^5.1.0", + "minimist": "^1.1.3" + }, + "bin": { + "dotenv": "cli.js" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/ecstatic": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", + "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", + "dev": true, + "dependencies": { + "he": "^1.1.1", + "mime": "^1.6.0", + "minimist": "^1.1.0", + "url-join": "^2.0.5" + }, + "bin": { + "ecstatic": "lib/ecstatic.js" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.741", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.741.tgz", + "integrity": "sha512-4i3T0cwnHo1O4Mnp9JniEco8bZiXoqbm3PhW5hv7uu8YLg35iajYrRnNyKFaN8/8SSTskU2hYqVTeYVPceSpUA==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz", + "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-standard": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", + "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1" + } + }, + "node_modules/eslint-config-standard-jsx": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", + "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-react": "^7.21.5" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "dev": true, + "dependencies": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/eslint-module-utils": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", + "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "pkg-dir": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", + "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "peer": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "optional": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "peer": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "peer": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true, + "peer": true + }, + "node_modules/follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "optional": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/fwd-stream": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", + "integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=", + "dev": true, + "dependencies": { + "readable-stream": "~1.0.26-4" + } + }, + "node_modules/fwd-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/fwd-stream/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/fwd-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "optional": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-server": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz", + "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", + "dev": true, + "dependencies": { + "basic-auth": "^1.0.3", + "colors": "^1.4.0", + "corser": "^2.0.1", + "ecstatic": "^3.3.2", + "http-proxy": "^1.18.0", + "minimist": "^1.2.5", + "opener": "^1.5.1", + "portfinder": "^1.0.25", + "secure-compare": "3.0.1", + "union": "~0.5.0" + }, + "bin": { + "hs": "bin/http-server", + "http-server": "bin/http-server" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/idb-wrapper": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", + "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", + "dev": true + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", + "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "optional": true + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-object": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", + "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=", + "dev": true + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isbuffer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", + "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "dependencies": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/level-blobs": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", + "integrity": "sha1-mrm5e7mfHtv594o0M+Ie1WOGva8=", + "dev": true, + "dependencies": { + "level-peek": "1.0.6", + "once": "^1.3.0", + "readable-stream": "^1.0.26-4" + } + }, + "node_modules/level-blobs/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/level-blobs/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/level-blobs/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/level-filesystem": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", + "integrity": "sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M=", + "dev": true, + "dependencies": { + "concat-stream": "^1.4.4", + "errno": "^0.1.1", + "fwd-stream": "^1.0.4", + "level-blobs": "^0.1.7", + "level-peek": "^1.0.6", + "level-sublevel": "^5.2.0", + "octal": "^1.0.0", + "once": "^1.3.0", + "xtend": "^2.2.0" + } + }, + "node_modules/level-fix-range": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", + "integrity": "sha1-vxW5Fa422EcMgh6IPd95zRZCCCg=", + "dev": true + }, + "node_modules/level-hooks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", + "integrity": "sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM=", + "dev": true, + "dependencies": { + "string-range": "~1.2" + } + }, + "node_modules/level-js": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", + "integrity": "sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=", + "dev": true, + "dependencies": { + "abstract-leveldown": "~0.12.0", + "idb-wrapper": "^1.5.0", + "isbuffer": "~0.0.0", + "ltgt": "^2.1.2", + "typedarray-to-buffer": "~1.0.0", + "xtend": "~2.1.2" + } + }, + "node_modules/level-js/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "node_modules/level-js/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/level-peek": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", + "integrity": "sha1-vsUccqgu5GTTNkNMfIdsP8vM538=", + "dev": true, + "dependencies": { + "level-fix-range": "~1.0.2" + } + }, + "node_modules/level-sublevel": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", + "integrity": "sha1-dEwSxy0ucr543eO5tc2E1iGRQTo=", + "dev": true, + "dependencies": { + "level-fix-range": "2.0", + "level-hooks": ">=4.4.0 <5", + "string-range": "~1.2.1", + "xtend": "~2.0.4" + } + }, + "node_modules/level-sublevel/node_modules/level-fix-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", + "integrity": "sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug=", + "dev": true, + "dependencies": { + "clone": "~0.1.9" + } + }, + "node_modules/level-sublevel/node_modules/object-keys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", + "integrity": "sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=", + "deprecated": "Please update to the latest object-keys", + "dev": true, + "dependencies": { + "foreach": "~2.0.1", + "indexof": "~0.0.1", + "is": "~0.2.6" + } + }, + "node_modules/level-sublevel/node_modules/xtend": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", + "integrity": "sha1-XqZXptukRwacLlnFihE4ywxebO4=", + "dev": true, + "dependencies": { + "is-object": "~0.1.2", + "object-keys": "~0.2.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levelup": { + "version": "0.18.6", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", + "integrity": "sha1-5qAcsIlhbI7MApHCqb0/DETj5es=", + "dev": true, + "dependencies": { + "bl": "~0.8.1", + "deferred-leveldown": "~0.2.0", + "errno": "~0.1.1", + "prr": "~0.0.0", + "readable-stream": "~1.0.26", + "semver": "~2.3.1", + "xtend": "~3.0.0" + } + }, + "node_modules/levelup/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/levelup/node_modules/prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + }, + "node_modules/levelup/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/levelup/node_modules/semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/levelup/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/levelup/node_modules/xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true, + "peer": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "peer": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true, + "peer": true + }, + "node_modules/log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "optional": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "optional": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 10.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "optional": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-releases": { + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "optional": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "optional": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "optional": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/octal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", + "integrity": "sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws=", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true, + "optional": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "dependencies": { + "pify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-conf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-es6": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz", + "integrity": "sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g=", + "dev": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "dependencies": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true, + "optional": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true, + "optional": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "2.48.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.48.0.tgz", + "integrity": "sha512-wl9ZSSSsi5579oscSDYSzGn092tCS076YB+TQrzsGuSfYyJeep8eEWj0eaRjuC5McuMNmcnR8icBqiE/FWNB1A==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/rollup-plugin-babel": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", + "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel.", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.8.1" + }, + "peerDependencies": { + "@babel/core": "7 || ^7.0.0-rc.2", + "rollup": ">=0.60.0 <3" + } + }, + "node_modules/rollup-plugin-node-builtins": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz", + "integrity": "sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k=", + "dev": true, + "dependencies": { + "browserify-fs": "^1.0.0", + "buffer-es6": "^4.9.2", + "crypto-browserify": "^3.11.0", + "process-es6": "^0.11.2" + } + }, + "node_modules/rollup-plugin-node-globals": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz", + "integrity": "sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==", + "dev": true, + "dependencies": { + "acorn": "^5.7.3", + "buffer-es6": "^4.9.3", + "estree-walker": "^0.5.2", + "magic-string": "^0.22.5", + "process-es6": "^0.11.6", + "rollup-pluginutils": "^2.3.1" + } + }, + "node_modules/rollup-plugin-node-globals/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/rollup-plugin-node-globals/node_modules/estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, + "node_modules/rollup-plugin-node-globals/node_modules/magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "dependencies": { + "vlq": "^0.2.2" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "optional": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "dev": true, + "dependencies": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "node_modules/should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "dependencies": { + "should-type": "^1.4.0" + } + }, + "node_modules/should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "dev": true, + "dependencies": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "node_modules/should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "dev": true + }, + "node_modules/should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "dependencies": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "node_modules/should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "optional": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "optional": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "optional": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true, + "optional": true + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", + "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "optional": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/standard": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/standard/-/standard-16.0.3.tgz", + "integrity": "sha512-70F7NH0hSkNXosXRltjSv6KpTAOkUkSfyu3ynyM5dtRUiLtR+yX9EGZ7RKwuGUqCJiX/cnkceVM6HTZ4JpaqDg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "eslint": "~7.13.0", + "eslint-config-standard": "16.0.2", + "eslint-config-standard-jsx": "10.0.0", + "eslint-plugin-import": "~2.22.1", + "eslint-plugin-node": "~11.1.0", + "eslint-plugin-promise": "~4.2.1", + "eslint-plugin-react": "~7.21.5", + "standard-engine": "^14.0.1" + }, + "bin": { + "standard": "bin/cmd.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/standard-engine": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz", + "integrity": "sha512-7FEzDwmHDOGva7r9ifOzD3BGdTbA7ujJ50afLVdW/tK14zQEptJjbFuUfn50irqdHDcTbNh0DTIoMPynMCXb0Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "get-stdin": "^8.0.0", + "minimist": "^1.2.5", + "pkg-conf": "^3.1.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8.10" + } + }, + "node_modules/standard/node_modules/@eslint/eslintrc": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/standard/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/standard/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/standard/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/standard/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/standard/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/standard/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/standard/node_modules/eslint": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", + "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/standard/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/standard/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/standard/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/standard/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/standard/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/standard/node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/slice-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/standard/node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/standard/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/standard/node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/standard/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/standard/node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "optional": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/string-range": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", + "integrity": "sha1-qJPtNH5yKZvIO++78qaSqNI51d0=", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "optional": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", + "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dev": true, + "dependencies": { + "qs": "^6.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "optional": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unorm": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", + "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "optional": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "optional": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "optional": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true, + "optional": true + }, + "node_modules/url-join": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/cli": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.3.tgz", + "integrity": "sha512-zU4JLvwk32ay1lhhyGfqiRUSPoltVDjhYkA3aQq8+Yby9z30s/EsFw1EPOHxWG9YZo2pAGfgdRNeHZQAYU5m9A==", + "dev": true, + "requires": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", + "chokidar": "^3.4.0", + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "make-dir": "^2.1.0", + "slash": "^2.0.0", + "source-map": "^0.5.0" + } + }, + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/compat-data": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "dev": true + }, + "@babel/core": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", + "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.14.3", + "@babel/helper-split-export-declaration": "^7.12.13" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", + "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", + "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" + } + }, + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", + "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "dev": true + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", + "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.13.12" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", + "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", + "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.3", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", + "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", + "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", + "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", + "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", + "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", + "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", + "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.2" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", + "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", + "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "dev": true, + "requires": { "@babel/helper-plugin-utils": "^7.13.0" } }, @@ -939,14 +10081,6 @@ "babel-plugin-polyfill-corejs3": "^0.2.0", "babel-plugin-polyfill-regenerator": "^0.2.0", "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "@babel/plugin-transform-shorthand-properties": { @@ -1103,14 +10237,6 @@ "babel-plugin-polyfill-regenerator": "^0.2.0", "core-js-compat": "^3.9.0", "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "@babel/preset-modules": { @@ -1172,23 +10298,6 @@ "@babel/types": "^7.14.2", "debug": "^4.1.0", "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@babel/types": { @@ -1202,10 +10311,11 @@ } }, "@eslint/eslintrc": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", - "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", "dev": true, + "peer": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -1214,89 +10324,26 @@ "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "globals": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, + "peer": true, "requires": { "type-fest": "^0.8.1" } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, "@moneybutton/brfc": { - "version": "0.38.3", - "resolved": "https://registry.npmjs.org/@moneybutton/brfc/-/brfc-0.38.3.tgz", - "integrity": "sha512-XR/mtB/PWVOU5MfVBMKPxmzc0Taz992u6nOigt9bkjcHHBgrAFxVi7sKRe8G1C17+5ExXVCHXRAanBFziqkjzA==", - "requires": { - "@babel/runtime": "7.5.5", - "isomorphic-fetch": "2.2.1", - "moment": "2.24.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - } - } + "version": "git+ssh://git@github.com/baryon/brfc.git#aba3a22013ebbe41be7ec27e8de34b7b6a948135", + "from": "@moneybutton/brfc@github:baryon/brfc", + "requires": {} }, "@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents", @@ -1389,9 +10436,9 @@ "dev": true }, "@types/node": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.0.tgz", - "integrity": "sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==", + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.1.tgz", + "integrity": "sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==", "dev": true }, "@types/resolve": { @@ -1435,16 +10482,17 @@ } }, "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, "acorn-jsx": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "dev": true, + "requires": {} }, "aes-js": { "version": "3.1.2", @@ -1470,9 +10518,9 @@ "dev": true }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, "ansi-styles": { @@ -1508,10 +10556,13 @@ } }, "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } }, "arr-diff": { "version": "4.0.0", @@ -1603,10 +10654,11 @@ "optional": true }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "peer": true }, "async": { "version": "2.6.3", @@ -1655,41 +10707,33 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", "dev": true, "requires": { "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", + "@babel/helper-define-polyfill-provider": "^0.2.2", "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz", + "integrity": "sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0", + "@babel/helper-define-polyfill-provider": "^0.2.2", "core-js-compat": "^3.9.1" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0" + "@babel/helper-define-polyfill-provider": "^0.2.2" } }, "balanced-match": { @@ -1723,38 +10767,6 @@ "requires": { "is-descriptor": "^1.0.0" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, @@ -1776,7 +10788,8 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/bdd-lazy-var/-/bdd-lazy-var-2.6.1.tgz", "integrity": "sha512-X3ADwcFji/IHIrYJhTTpaiWhoOx4pl4whdAx1dmvdeUPsMUb7fVYFvf/Q33VEAEAVkEwi5rgNSZ0Y9oOVeQV+A==", - "dev": true + "dev": true, + "requires": {} }, "binary-extensions": { "version": "1.13.1", @@ -1821,9 +10834,9 @@ } }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" }, "brace-expansion": { "version": "1.1.11", @@ -1852,18 +10865,6 @@ "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "brorand": { @@ -1966,12 +10967,6 @@ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -2007,18 +11002,25 @@ } }, "bsv": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/bsv/-/bsv-1.5.5.tgz", - "integrity": "sha512-tfHFMZjDth424uosNi5rkqo+MET6710mytO8vbETqPlD2yCft7zvKc+1U3xYhjva3tEd8GRJgNcSUcyskLyTLw==", + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/bsv/-/bsv-1.5.6.tgz", + "integrity": "sha512-A0g36x63lVF9Ia6/z/RjcxaQMHE5cLl2rDxjUIKz0UTMLf5bPPyLI9yVyY2JkecF77MrU+MQdKVt0MSdU5abtw==", "requires": { "aes-js": "^3.1.2", - "bn.js": "=4.11.8", + "bn.js": "=4.11.9", "bs58": "=4.0.1", "clone-deep": "^4.0.1", - "elliptic": "6.5.3", + "elliptic": "6.5.4", "hash.js": "^1.1.7", "inherits": "2.0.3", "unorm": "1.4.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "buffer-es6": { @@ -2086,9 +11088,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001228", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", - "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", + "version": "1.0.30001230", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", + "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", "dev": true }, "chai": { @@ -2248,6 +11250,69 @@ "requires": { "is-descriptor": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true } } }, @@ -2260,40 +11325,6 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "clone": { @@ -2424,9 +11455,9 @@ "dev": true }, "core-js-compat": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", - "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.13.0.tgz", + "integrity": "sha512-jhbI2zpVskgfDC9mGRaDo1gagd0E0i/kYW0+WvibL/rafEHKAHO653hEXIxJHqRlRLITluXtRH3AGTL5qJmifQ==", "dev": true, "requires": { "browserslist": "^4.16.6", @@ -2521,12 +11552,12 @@ } }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, "decamelize": { @@ -2590,40 +11621,6 @@ "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } } }, "des.js": { @@ -2699,23 +11696,23 @@ } }, "electron-to-chromium": { - "version": "1.3.735", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.735.tgz", - "integrity": "sha512-cp7MWzC3NseUJV2FJFgaiesdrS+A8ZUjX5fLAxdRlcaPDkaPGFplX930S5vf84yqDp4LjuLdKouWuVOTwUfqHQ==", + "version": "1.3.741", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.741.tgz", + "integrity": "sha512-4i3T0cwnHo1O4Mnp9JniEco8bZiXoqbm3PhW5hv7uu8YLg35iajYrRnNyKFaN8/8SSTskU2hYqVTeYVPceSpUA==", "dev": true }, "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", + "bn.js": "^4.11.9", + "brorand": "^1.1.0", "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, "emoji-regex": { @@ -2724,14 +11721,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - } - }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -2760,9 +11749,9 @@ } }, "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -2773,14 +11762,14 @@ "has-symbols": "^1.0.2", "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "unbox-primitive": "^1.0.1" } }, "es-to-primitive": { @@ -2807,29 +11796,32 @@ "dev": true }, "eslint": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", - "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz", + "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==", "dev": true, + "peer": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.1", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", - "esquery": "^1.2.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -2837,7 +11829,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.19", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -2846,40 +11838,37 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^5.2.3", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "peer": true, + "requires": { + "@babel/highlight": "^7.10.4" + } }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "requires": { "color-convert": "^2.0.1" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, "chalk": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, + "peer": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2890,6 +11879,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "requires": { "color-name": "~1.1.4" } @@ -2898,89 +11888,76 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "requires": { - "ms": "2.1.2" - } + "peer": true }, "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true + "dev": true, + "peer": true }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "peer": true, "requires": { "is-glob": "^4.0.1" } }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", "dev": true, + "peer": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "peer": true }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, + "peer": true, "requires": { "lru-cache": "^6.0.0" } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "peer": true } } }, @@ -2988,13 +11965,15 @@ "version": "16.0.2", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", - "dev": true + "dev": true, + "requires": {} }, "eslint-config-standard-jsx": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", - "dev": true + "dev": true, + "requires": {} }, "eslint-import-resolver-node": { "version": "0.3.4", @@ -3004,6 +11983,23 @@ "requires": { "debug": "^2.6.9", "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "eslint-module-utils": { @@ -3044,12 +12040,6 @@ "path-exists": "^3.0.0" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -3068,10 +12058,10 @@ "p-limit": "^1.1.0" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "pkg-dir": { @@ -3116,6 +12106,15 @@ "tsconfig-paths": "^3.9.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "doctrine": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", @@ -3125,6 +12124,12 @@ "esutils": "^2.0.2", "isarray": "^1.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -3147,12 +12152,6 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true } } }, @@ -3226,14 +12225,6 @@ "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } } }, "esprima": { @@ -3331,6 +12322,16 @@ "to-regex": "^3.0.1" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -3341,39 +12342,86 @@ "is-descriptor": "^0.1.0" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "optional": true, "requires": { - "is-extendable": "^0.1.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true } } }, "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "is-extendable": "^0.1.0" } }, "extglob": { @@ -3402,48 +12450,6 @@ "requires": { "is-descriptor": "^1.0.0" } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, @@ -3466,12 +12472,13 @@ "dev": true }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "peer": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "fill-range": { @@ -3485,18 +12492,6 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "find-cache-dir": { @@ -3511,12 +12506,13 @@ } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, "flat": { @@ -3526,21 +12522,22 @@ "dev": true }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, + "peer": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true, + "peer": true }, "follow-redirects": { "version": "1.14.1", @@ -3807,12 +12804,6 @@ "safe-buffer": "^5.2.0" }, "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -3886,14 +12877,6 @@ "union": "~0.5.0" } }, - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, "idb-wrapper": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", @@ -3939,9 +12922,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "internal-slot": { "version": "1.0.3", @@ -3961,25 +12944,13 @@ "dev": true }, "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "optional": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "kind-of": "^6.0.0" } }, "is-arrayish": { @@ -4036,25 +13007,13 @@ } }, "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "optional": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "kind-of": "^6.0.0" } }, "is-date-object": { @@ -4064,24 +13023,15 @@ "dev": true }, "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "optional": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - } + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-extendable": { @@ -4098,9 +13048,9 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-glob": { @@ -4191,11 +13141,6 @@ "has-symbols": "^1.0.2" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, "is-string": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", @@ -4248,13 +13193,6 @@ "requires": { "node-fetch": "^2.6.1", "whatwg-fetch": "^3.4.1" - }, - "dependencies": { - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - } } }, "js-tokens": { @@ -4262,14 +13200,15 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true - }, - "js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsesc": { @@ -4563,13 +13502,12 @@ } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^5.0.0" } }, "lodash": { @@ -4578,12 +13516,33 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true, + "peer": true + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "peer": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true, + "peer": true + }, "log-symbols": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", @@ -4685,6 +13644,14 @@ "requires": { "pify": "^4.0.1", "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "map-cache": { @@ -4735,6 +13702,29 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "miller-rabin": { @@ -4843,22 +13833,11 @@ "yargs-unparser": "2.0.0" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "escape-string-regexp": { "version": "4.0.0", @@ -4866,16 +13845,6 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -4896,13 +13865,13 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", "dev": true, "requires": { - "p-locate": "^5.0.0" + "argparse": "^2.0.1" } }, "ms": { @@ -4911,30 +13880,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -4952,9 +13897,9 @@ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "nanoid": { @@ -4981,6 +13926,29 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "natural-compare": { @@ -4990,13 +13958,9 @@ "dev": true }, "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, "node-modules-regexp": { "version": "1.0.0", @@ -5020,6 +13984,14 @@ "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "normalize-path": { @@ -5056,6 +14028,47 @@ "is-descriptor": "^0.1.0" } }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + } + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -5103,15 +14116,14 @@ } }, "object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "es-abstract": "^1.18.2" } }, "object.fromentries": { @@ -5137,15 +14149,14 @@ } }, "object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.18.2" } }, "octal": { @@ -5184,27 +14195,27 @@ } }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^3.0.2" } }, "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, "parent-module": { @@ -5253,9 +14264,9 @@ "optional": true }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { @@ -5271,9 +14282,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-type": { @@ -5313,9 +14324,9 @@ } }, "picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pify": { @@ -5343,6 +14354,15 @@ "load-json-file": "^5.2.0" }, "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, "load-json-file": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", @@ -5356,6 +14376,40 @@ "type-fest": "^0.3.0" } }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -5366,6 +14420,12 @@ "json-parse-better-errors": "^1.0.1" } }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, "type-fest": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", @@ -5381,6 +14441,57 @@ "dev": true, "requires": { "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } } }, "portfinder": { @@ -5402,12 +14513,6 @@ "requires": { "ms": "^2.1.1" } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true } } }, @@ -5571,10 +14676,10 @@ "p-limit": "^1.1.0" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true } } @@ -5652,6 +14757,29 @@ "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "regexp.prototype.flags": { @@ -5734,6 +14862,13 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "peer": true + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -5771,10 +14906,11 @@ "optional": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "peer": true, "requires": { "glob": "^7.1.3" } @@ -5834,6 +14970,12 @@ "rollup-pluginutils": "^2.3.1" }, "dependencies": { + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + }, "estree-walker": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", @@ -5886,7 +15028,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "secure-compare": { "version": "3.0.1", @@ -5895,9 +15038,9 @@ "dev": true }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "serialize-javascript": { @@ -5920,18 +15063,6 @@ "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "sha.js": { @@ -6039,14 +15170,44 @@ "dev": true }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "peer": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + } } }, "snapdragon": { @@ -6066,6 +15227,16 @@ "use": "^3.1.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -6076,15 +15247,75 @@ "is-descriptor": "^0.1.0" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "optional": true, "requires": { - "is-extendable": "^0.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true } } }, @@ -6109,38 +15340,6 @@ "requires": { "is-descriptor": "^1.0.0" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, @@ -6244,9 +15443,9 @@ } }, "spdx-license-ids": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.8.tgz", - "integrity": "sha512-NDgA96EnaLSvtbM7trJj+t1LUR3pirkDCcz9nOUlPb5DMBGsH7oES6C3hs3j7R9oHEa1EMvReS/BUAIT5Tcr0g==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", + "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", "dev": true }, "split-string": { @@ -6257,6 +15456,29 @@ "optional": true, "requires": { "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "sprintf-js": { @@ -6279,6 +15501,283 @@ "eslint-plugin-promise": "~4.2.1", "eslint-plugin-react": "~7.21.5", "standard-engine": "^14.0.1" + }, + "dependencies": { + "@eslint/eslintrc": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "eslint": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", + "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + } + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } + } } }, "standard-engine": { @@ -6313,6 +15812,86 @@ "requires": { "is-descriptor": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true } } }, @@ -6323,25 +15902,27 @@ "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "string.prototype.matchall": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", - "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "regexp.prototype.flags": "^1.3.1", "side-channel": "^1.0.4" @@ -6367,30 +15948,13 @@ "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.0" } }, "strip-bom": { @@ -6415,48 +15979,39 @@ } }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, + "peer": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "ajv": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", + "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", "dev": true, + "peer": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } + "peer": true } } }, @@ -6505,6 +16060,29 @@ "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "to-regex-range": { @@ -6783,6 +16361,39 @@ "dev": true, "requires": { "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "word-wrap": { @@ -6808,12 +16419,6 @@ "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -6837,32 +16442,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } } } }, @@ -6918,40 +16497,6 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "yargs-parser": { diff --git a/package.json b/package.json index 96eea97..fcbf8cb 100644 --- a/package.json +++ b/package.json @@ -11,14 +11,14 @@ ], "scripts": { "lint": "standard --parser=babel-eslint --fix", - "pretest": "yarn lint", + "pretest": "npm run lint", "test": "mocha", "build": "npx rollup -c", "build:dev": "npx rollup -c", - "build:prod": "NODE_ENV=production yarn build", - "build:watch": "yarn build -w", + "build:prod": "NODE_ENV=production npm run build", + "build:watch": "npm run build -w", "prepublish": "npm run build:prod", - "dev": "yarn build:watch" + "dev": "npm run build:watch" }, "author": "Yours Inc.", "license": "Open-BSV", @@ -27,7 +27,7 @@ }, "dependencies": { "@babel/runtime": "7.14.0", - "@moneybutton/brfc": "0.38.3", + "@moneybutton/brfc": "github:baryon/brfc", "abort-controller": "3.0.0", "bsv": "^1.5.5", "isomorphic-fetch": "^3.0.0", diff --git a/src/BrowserDns.js b/src/BrowserDns.js index 95ae83d..2eb583e 100644 --- a/src/BrowserDns.js +++ b/src/BrowserDns.js @@ -10,7 +10,7 @@ class BrowserDns { const response = await this.doh.resolveSrv(aDomain) if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { - const [ priority, weight, port, name ] = record.data.split(' ') + const [priority, weight, port, name] = record.data.split(' ') return { priority, weight, diff --git a/src/EndpointResolver.js b/src/EndpointResolver.js index 586f5ef..0f9acba 100644 --- a/src/EndpointResolver.js +++ b/src/EndpointResolver.js @@ -27,7 +27,7 @@ class EndpointResolver { } async getAddressUrlFor (aPaymail) { - const [ alias, domain ] = aPaymail.split('@') + const [alias, domain] = aPaymail.split('@') await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination) const apiDescriptor = await this.getApiDescriptionFor(domain) const addressUrl = apiDescriptor.capabilities.paymentDestination @@ -36,7 +36,7 @@ class EndpointResolver { } async getVerifyUrlFor (aPaymail, aPubkey) { - const [ alias, domain ] = aPaymail.split('@') + const [alias, domain] = aPaymail.split('@') await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner) const apiDescriptor = await this.getApiDescriptionFor(domain) const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner] @@ -45,7 +45,7 @@ class EndpointResolver { } async getPublicProfileUrlFor (aPaymail) { - const [ alias, domain ] = aPaymail.split('@') + const [alias, domain] = aPaymail.split('@') await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile) const apiDescriptor = await this.getApiDescriptionFor(domain) const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile] @@ -54,7 +54,7 @@ class EndpointResolver { } async getSendTxUrlFor (aPaymail) { - const [ alias, domain ] = aPaymail.split('@') + const [alias, domain] = aPaymail.split('@') await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction) const apiDescriptor = await this.getApiDescriptionFor(domain) const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction] @@ -63,7 +63,7 @@ class EndpointResolver { } async getP2pPatmentDestinationUrlFor (aPaymail) { - const [ alias, domain ] = aPaymail.split('@') + const [alias, domain] = aPaymail.split('@') await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination) const apiDescriptor = await this.getApiDescriptionFor(domain) const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination] diff --git a/src/PaymailClient.js b/src/PaymailClient.js index 2fc1547..ab20dfe 100644 --- a/src/PaymailClient.js +++ b/src/PaymailClient.js @@ -131,7 +131,7 @@ class PaymailClient { * @param {String} s - the preferred size of the image */ async getPublicProfile (paymail) { - let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail) + const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail) const response = await this.http.get(publicProfileUrl) if (!response.ok) { const body = await response.json() @@ -145,7 +145,7 @@ class PaymailClient { if (!hexTransaction) { throw new Error('transaction hex cannot be empty') } - let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail) + const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail) const response = await this.http.postJson( receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata) @@ -161,7 +161,7 @@ class PaymailClient { if (!satoshis) { throw new Error('Amount in satohis needs to be specified') } - let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail) + const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail) const response = await this.http.postJson( paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis) diff --git a/src/RequestBodyFactory.js b/src/RequestBodyFactory.js index 93e3fb3..c4b20c9 100644 --- a/src/RequestBodyFactory.js +++ b/src/RequestBodyFactory.js @@ -4,6 +4,7 @@ class RequestBodyFactory { constructor (clock) { this.clock = clock } + buildBodyToRequestAddress (senderInfo, privateKey = null) { const { senderHandle, diff --git a/src/dns-client.js b/src/dns-client.js index d453310..31fc32c 100644 --- a/src/dns-client.js +++ b/src/dns-client.js @@ -80,13 +80,13 @@ class DnsClient { async validateDnssec (aDomain) { const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain) if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { - throw new Error(`Insecure domain.`) + throw new Error('Insecure domain.') } const data = dnsResponse.Answer[0].data.split(' ') const port = data[2] const responseDomain = data[3] if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) { - throw new Error(`Insecure domain.`) + throw new Error('Insecure domain.') } return { port, diff --git a/src/http.js b/src/http.js index fe70d9c..0d5fd40 100644 --- a/src/http.js +++ b/src/http.js @@ -21,7 +21,7 @@ class Http { } async _basicRequest (url, options = {}) { - var controller = new AbortController() + const controller = new AbortController() const timer = setTimeout(() => controller.abort(), 30000) return this.fetch(url, { ...options, diff --git a/test/babel.js b/test/babel.js index e1cce26..f83d62f 100644 --- a/test/babel.js +++ b/test/babel.js @@ -1,4 +1,4 @@ require('@babel/register')({ - 'presets': ['@babel/preset-env'], - 'plugins': ['@babel/plugin-transform-runtime'] + presets: ['@babel/preset-env'], + plugins: ['@babel/plugin-transform-runtime'] }) diff --git a/test/dns.js b/test/dns.js index e39da60..4755221 100644 --- a/test/dns.js +++ b/test/dns.js @@ -4,8 +4,8 @@ import { expect } from 'chai' describe('DNS', () => { describe('#domainsAreEqual', () => { it('domain names are case insensitive per RFC1035', () => { - var dns = new DnsClient(null, null) - var b = dns.domainsAreEqual('www.moneyBUTTON.com.', 'www.moneybutton.com') + const dns = new DnsClient(null, null) + const b = dns.domainsAreEqual('www.moneyBUTTON.com.', 'www.moneybutton.com') expect(b).to.be.eql(true) }) }) diff --git a/test/endpoint-resolver.js b/test/endpoint-resolver.js index 445a12a..4d76766 100644 --- a/test/endpoint-resolver.js +++ b/test/endpoint-resolver.js @@ -214,7 +214,7 @@ describe('EndpointResolver', () => { }) describe('when the srv record is present, it doesn\'t use dnssec but the domain is a moneybutton.com', () => { - def('apiDomain', () => `moneybutton.com`) + def('apiDomain', () => 'moneybutton.com') beforeEach(() => { get.dns.registerRecord(`_bsvalias._tcp.${get.aDomain}`, { name: get.apiDomain, @@ -232,7 +232,7 @@ describe('EndpointResolver', () => { }) describe('when the srv record is present, it doesn\'t use dnssec but the domain is a www.moneybutton.com', () => { - def('apiDomain', () => `www.moneybutton.com`) + def('apiDomain', () => 'www.moneybutton.com') beforeEach(() => { get.dns.registerRecord(`_bsvalias._tcp.${get.aDomain}`, { name: get.apiDomain, @@ -297,7 +297,7 @@ describe('EndpointResolver', () => { describe('when the srv record present it doesn\'t use dnssec but its handcash', () => { def('aDomain', () => 'handcash.io') - def('apiDomain', () => `handcash-paymail-production.herokuapp.com`) + def('apiDomain', () => 'handcash-paymail-production.herokuapp.com') beforeEach(() => { get.dns.registerRecord(`_bsvalias._tcp.${get.aDomain}`, { name: get.apiDomain, @@ -316,7 +316,7 @@ describe('EndpointResolver', () => { describe('when the srv record present it doesn\'t use dnssec but its handcash using its own domain', () => { def('aDomain', () => 'handcash.io') - def('apiDomain', () => `handcash.io`) + def('apiDomain', () => 'handcash.io') beforeEach(() => { get.dns.registerRecord(`_bsvalias._tcp.${get.aDomain}`, { name: get.apiDomain, @@ -335,7 +335,7 @@ describe('EndpointResolver', () => { describe('when the srv record present it doesn\'t use dnssec and its handcash but the url is not actual handcash api url', () => { def('aDomain', () => 'handcash.io') - def('apiDomain', () => `fake-url.not-handcash.io`) + def('apiDomain', () => 'fake-url.not-handcash.io') beforeEach(() => { get.dns.registerRecord(`_bsvalias._tcp.${get.aDomain}`, { name: get.apiDomain, diff --git a/test/paymail-client.js b/test/paymail-client.js index 2d26c88..a30874e 100644 --- a/test/paymail-client.js +++ b/test/paymail-client.js @@ -177,8 +177,8 @@ describe('PaymailClient', () => { it('sends a valid signature', async () => { await get.aClient.getOutputFor(get.aPaymail, get.senderInfo, get.aPrivateKey) - let requestDetails = requestsMadeTo(`https://${get.aDomain}:80/api/v1/address/${get.aPaymail}`)[0] - let body = JSON.parse(requestDetails.body) + const requestDetails = requestsMadeTo(`https://${get.aDomain}:80/api/v1/address/${get.aPaymail}`)[0] + const body = JSON.parse(requestDetails.body) expect(body.signature).to.be.equal(new VerifiableMessage([ get.senderInfo.senderHandle, '0', @@ -214,8 +214,8 @@ describe('PaymailClient', () => { it('those dt and signatures are used', async () => { await get.aClient.getOutputFor(get.aPaymail, get.senderInfo) - let requestDetails = requestsMadeTo(`https://${get.aDomain}:80/api/v1/address/${get.aPaymail}`)[0] - let body = JSON.parse(requestDetails.body) + const requestDetails = requestsMadeTo(`https://${get.aDomain}:80/api/v1/address/${get.aPaymail}`)[0] + const body = JSON.parse(requestDetails.body) expect(body.dt).to.be.equal(get.aDT.toISOString()) expect(body.signature).to.be.equal(get.aSignature) }) @@ -225,8 +225,8 @@ describe('PaymailClient', () => { it('ignores the dt and uses current datetime', async () => { await get.aClient.getOutputFor(get.aPaymail, get.senderInfo, get.aPrivateKey) - let requestDetails = requestsMadeTo(`https://${get.aDomain}:80/api/v1/address/${get.aPaymail}`)[0] - let body = JSON.parse(requestDetails.body) + const requestDetails = requestsMadeTo(`https://${get.aDomain}:80/api/v1/address/${get.aPaymail}`)[0] + const body = JSON.parse(requestDetails.body) expect(body.dt).to.be.eq(get.now.toISOString()) }) @@ -661,7 +661,7 @@ describe('PaymailClient', () => { await get.aClient.sendRawTx(get.targetPaymail, null, 'someref', {}) assert.fail('should raise error transaction is null') } catch (err) { - expect(err.message).to.be.eq(`transaction hex cannot be empty`) + expect(err.message).to.be.eq('transaction hex cannot be empty') } }) @@ -670,7 +670,7 @@ describe('PaymailClient', () => { await get.aClient.sendRawTx(get.targetPaymail, '', 'someref', {}) assert.fail('should raise error transaction is null') } catch (err) { - expect(err.message).to.be.eq(`transaction hex cannot be empty`) + expect(err.message).to.be.eq('transaction hex cannot be empty') } }) diff --git a/test/util/MockDNS.js b/test/util/MockDNS.js index ba1f8cf..daf70c2 100644 --- a/test/util/MockDNS.js +++ b/test/util/MockDNS.js @@ -11,7 +11,7 @@ class MockDNS { throw new Error(`Not registered dns query: ${domain}`) } info.times++ - callback(info.error, [ info.record ]) + callback(info.error, [info.record]) } // Mock API From a48a2d9d690934f00a04b92a959d1329bfe75153 Mon Sep 17 00:00:00 2001 From: Long Li Date: Sun, 30 May 2021 23:29:59 +0900 Subject: [PATCH 16/33] port is undefined --- dist/paymail-client.cjs.js | 529 +++++++++++++++++---------------- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 503 ++++++++++++++++--------------- dist/paymail-client.esm.js.map | 2 +- src/EndpointResolver.js | 2 +- 5 files changed, 534 insertions(+), 504 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index b91116c..f5d0465 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -1,20 +1,20 @@ -'use strict' +'use strict'; -Object.defineProperty(exports, '__esModule', { value: true }) +Object.defineProperty(exports, '__esModule', { value: true }); -const brfc = require('@moneybutton/brfc') -const _defineProperty = require('@babel/runtime/helpers/defineProperty') -require('abort-controller/polyfill') -const AbortController = require('abort-controller') -const moment = require('moment') -const fetch = require('isomorphic-fetch') +var brfc = require('@moneybutton/brfc'); +var _defineProperty = require('@babel/runtime/helpers/defineProperty'); +require('abort-controller/polyfill'); +var AbortController = require('abort-controller'); +var moment = require('moment'); +var fetch = require('isomorphic-fetch'); -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e } } +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } -const _defineProperty__default = /* #__PURE__ */_interopDefaultLegacy(_defineProperty) -const AbortController__default = /* #__PURE__ */_interopDefaultLegacy(AbortController) -const moment__default = /* #__PURE__ */_interopDefaultLegacy(moment) -const fetch__default = /* #__PURE__ */_interopDefaultLegacy(fetch) +var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); +var AbortController__default = /*#__PURE__*/_interopDefaultLegacy(AbortController); +var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment); +var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch); const CapabilityCodes = { pki: 'pki', @@ -24,16 +24,16 @@ const CapabilityCodes = { publicProfile: brfc.brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), receiveTransaction: brfc.brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), p2pPaymentDestination: brfc.brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') -} +}; // import { DnsOverHttps } from "./dns-over-https" class DnsClient { - constructor (dns, doh) { - this.dns = dns - this.doh = doh + constructor(dns, doh) { + this.dns = dns; + this.doh = doh; } - async checkSrv (aDomain) { + async checkSrv(aDomain) { return new Promise((resolve, reject) => { this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { try { @@ -42,301 +42,306 @@ class DnsClient { domain: aDomain, port: 443, isSecure: true - }) + }); } if (err) { - return reject(err) + return reject(err); } const { name: domainFromDns, port, isSecure - } = result[0] + } = result[0]; resolve({ domain: domainFromDns, port, isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure - }) + }); } catch (err) { - return reject(err) + return reject(err); } - }) + }); }).then(result => { if (result.isSecure) { - return result + return result; } else { - return this.validateDnssec(aDomain) + return this.validateDnssec(aDomain); } }, err => { - console.error(err) - return err - }) + console.error(err); + return err; + }); } - checkDomainIsSecure (srvResponseDomain, originalDomain) { + checkDomainIsSecure(srvResponseDomain, originalDomain) { if (this.domainsAreEqual(srvResponseDomain, originalDomain)) { - return true + return true; } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) { - return true + return true; } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :) - return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain) + return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain); } else if (this.isHandcashInternalDomain(originalDomain)) { - return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain) + return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain); } else if (this.domainsAreEqual('localhost', srvResponseDomain)) { - return true + return true; } else if (this.isMoneyButtonDomain(srvResponseDomain)) { - return true + return true; } else { - return false + return false; } } - isMoneyButtonDomain (aDomain) { - return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com') + isMoneyButtonDomain(aDomain) { + return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com'); } - responseIsWwwSubdomain (srvResponseDomain, originalDomain) { - return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`) + responseIsWwwSubdomain(srvResponseDomain, originalDomain) { + return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`); } - isHandcashDomain (aDomain) { - return this.domainsAreEqual('handcash.io', aDomain) + isHandcashDomain(aDomain) { + return this.domainsAreEqual('handcash.io', aDomain); } - isHandcashInternalDomain (aDomain) { - return this.domainsAreEqual('internal.handcash.io', aDomain) + isHandcashInternalDomain(aDomain) { + return this.domainsAreEqual('internal.handcash.io', aDomain); } - async validateDnssec (aDomain) { - const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain) + async validateDnssec(aDomain) { + const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { - throw new Error('Insecure domain.') + throw new Error('Insecure domain.'); } - const data = dnsResponse.Answer[0].data.split(' ') - const port = data[2] - const responseDomain = data[3] + const data = dnsResponse.Answer[0].data.split(' '); + const port = data[2]; + const responseDomain = data[3]; if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) { - throw new Error('Insecure domain.') + throw new Error('Insecure domain.'); } return { port, domain: responseDomain, isSecure: dnsResponse.AD - } + }; } - domainsAreEqual (domain1, domain2) { - return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, '') + domainsAreEqual(domain1, domain2) { + return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, ''); } + } class DnsOverHttps { - constructor (fetch, config) { - this.fetch = fetch - this.config = config + constructor(fetch, config) { + this.fetch = fetch; + this.config = config; } - async resolveSrv (aDomain) { - const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`) - const body = await response.json() - return body + async resolveSrv(aDomain) { + const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); + const body = await response.json(); + return body; } - async queryBsvaliasDomain (aDomain) { - return this.resolveSrv(`_bsvalias._tcp.${aDomain}`) + async queryBsvaliasDomain(aDomain) { + return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); } + } -function ownKeys (object, enumerableOnly) { const keys = Object.keys(object); if (Object.getOwnPropertySymbols) { let symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable }) } keys.push.apply(keys, symbols) } return keys } +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } -function _objectSpread (target) { for (let i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default.default(target, key, source[key]) }) } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)) }) } } return target } +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } class Http { - constructor (fetch) { - this.fetch = fetch + constructor(fetch) { + this.fetch = fetch; } - async get (url) { - return this._basicRequest(url) + async get(url) { + return this._basicRequest(url); } - async postJson (url, body) { + async postJson(url, body) { return this._basicRequest(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) - }) + }); } - async _basicRequest (url, options = {}) { - const controller = new AbortController__default.default() - const timer = setTimeout(() => controller.abort(), 30000) + async _basicRequest(url, options = {}) { + const controller = new AbortController__default['default'](); + const timer = setTimeout(() => controller.abort(), 30000); return this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { credentials: 'omit', signal: controller.signal })).then(result => { - clearTimeout(timer) - return result - }) + clearTimeout(timer); + return result; + }); } + } class EndpointResolver { - constructor (dns = null, fetch) { + constructor(dns = null, fetch) { this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - })) - this.http = new Http(fetch) - this._cache = {} + })); + this.http = new Http(fetch); + this._cache = {}; } - static create (dnsClient, fetch) { - const instance = new EndpointResolver(null, fetch) - instance.dnsClient = dnsClient - return instance + static create(dnsClient, fetch) { + const instance = new EndpointResolver(null, fetch); + instance.dnsClient = dnsClient; + return instance; } - async getIdentityUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.pki) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain) - return identityUrl + async getIdentityUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.pki); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain); + return identityUrl; } - async getAddressUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain) - return addressUrl + async getAddressUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain); + return addressUrl; } - async getVerifyUrlFor (aPaymail, aPubkey) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey) - return url + async getVerifyUrlFor(aPaymail, aPubkey) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey); + return url; } - async getPublicProfileUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain) - return url + async getPublicProfileUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; } - async getSendTxUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain) - return url + async getSendTxUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; } - async getP2pPatmentDestinationUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain) - return url + async getP2pPatmentDestinationUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; } - async domainHasCapability (aDomain, capability) { - const apiDescriptor = await this.getApiDescriptionFor(aDomain) - return !!apiDescriptor.capabilities[capability] + async domainHasCapability(aDomain, capability) { + const apiDescriptor = await this.getApiDescriptionFor(aDomain); + return !!apiDescriptor.capabilities[capability]; } - async getApiDescriptionFor (aDomain) { + async getApiDescriptionFor(aDomain) { if (this._cache[aDomain]) { - return this._cache[aDomain] + return this._cache[aDomain]; } const { domain, port - } = await this.getWellKnownBaseUrl(aDomain) - const apiDescriptor = this.fetchApiDescriptor(domain, port) - this._cache[aDomain] = apiDescriptor - return apiDescriptor + } = await this.getWellKnownBaseUrl(aDomain); + const apiDescriptor = this.fetchApiDescriptor(domain, port); + this._cache[aDomain] = apiDescriptor; + return apiDescriptor; } - async fetchApiDescriptor (domain, port) { - const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https' - const requestPort = port.toString() === '443' ? '' : `:${port}` - const requestDomain = /^(.*?)\.?$/.exec(domain)[1] // Get value from capture group + async fetchApiDescriptor(domain, port) { + const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https'; + const requestPort = port === undefined || port.toString() === '443' ? '' : `:${port}`; + const requestDomain = /^(.*?)\.?$/.exec(domain)[1]; // Get value from capture group if (!requestDomain) { - throw new Error(`Invalid domain: ${domain}`) + throw new Error(`Invalid domain: ${domain}`); } - const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`) - const apiDescriptor = await wellKnown.json() - return apiDescriptor + const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`); + const apiDescriptor = await wellKnown.json(); + return apiDescriptor; } - async getWellKnownBaseUrl (aDomain) { - return this.dnsClient.checkSrv(aDomain) + async getWellKnownBaseUrl(aDomain) { + return this.dnsClient.checkSrv(aDomain); } - async ensureCapabilityFor (aDomain, aCapability) { + async ensureCapabilityFor(aDomain, aCapability) { if (!(await this.domainHasCapability(aDomain, aCapability))) { - throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`) + throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`); } } + } class VerifiableMessage { - constructor (parts, bsv = null) { + constructor(parts, bsv = null) { if (bsv === null) { - bsv = require('bsv') - bsv.Message = require('bsv/message') + bsv = require('bsv'); + bsv.Message = require('bsv/message'); } - this.bsv = bsv - const concatenated = Buffer.from(parts.join('')) - this.message = new this.bsv.Message(concatenated) + this.bsv = bsv; + const concatenated = Buffer.from(parts.join('')); + this.message = new this.bsv.Message(concatenated); } - static forBasicAddressResolution ({ + static forBasicAddressResolution({ senderHandle, amount, dt, purpose }) { if (dt.toISOString) { - dt = dt.toISOString() + dt = dt.toISOString(); } - return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]) + return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]); } - sign (wifPrivateKey) { - return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)) + sign(wifPrivateKey) { + return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)); } - verify (keyAddress, signature) { - return this.message.verify(keyAddress, signature) + verify(keyAddress, signature) { + return this.message.verify(keyAddress, signature); } + } class RequestBodyFactory { - constructor (clock) { - this.clock = clock + constructor(clock) { + this.clock = clock; } - buildBodyToRequestAddress (senderInfo, privateKey = null) { + buildBodyToRequestAddress(senderInfo, privateKey = null) { const { senderHandle, amount, @@ -344,29 +349,29 @@ class RequestBodyFactory { purpose, pubkey, signature: providedSignature - } = senderInfo + } = senderInfo; if (!providedSignature && privateKey === null) { - throw new Error('Missing private key or signature') + throw new Error('Missing private key or signature'); } - let dt, signature + let dt, signature; if (providedSignature) { if (!senderInfo.dt) { - throw new Error('missing datetime for given signature') + throw new Error('missing datetime for given signature'); } - dt = senderInfo.dt - signature = providedSignature + dt = senderInfo.dt; + signature = providedSignature; } else { - dt = this.clock.now() + dt = this.clock.now(); signature = VerifiableMessage.forBasicAddressResolution({ senderHandle, amount, dt, purpose - }).sign(privateKey) + }).sign(privateKey); } return { @@ -377,92 +382,96 @@ class RequestBodyFactory { amount: amount || null, pubkey, signature - } + }; } - buildBodySendTx (hexTransaction, reference, metadata) { + buildBodySendTx(hexTransaction, reference, metadata) { return { hex: hexTransaction, metadata, reference - } + }; } - buildBodyP2pPaymentDestination (satoshis) { + buildBodyP2pPaymentDestination(satoshis) { return { satoshis - } + }; } + } class Clock { - now () { - return moment__default.default() + now() { + return moment__default['default'](); } + } class PaymailNotFound extends Error { - constructor (message, paymail) { - super(message) - this.paymail = paymail + constructor(message, paymail) { + super(message); + this.paymail = paymail; } + } class BrowserDns { - constructor (fetch) { + constructor(fetch) { this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - }) + }); } - async resolveSrv (aDomain, aCallback) { + async resolveSrv(aDomain, aCallback) { try { - const response = await this.doh.resolveSrv(aDomain) + const response = await this.doh.resolveSrv(aDomain); if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { - const [priority, weight, port, name] = record.data.split(' ') + const [priority, weight, port, name] = record.data.split(' '); return { priority, weight, port, name, isSecure: response.AD - } - }) - aCallback(null, data) + }; + }); + aCallback(null, data); } else if (!response.Answer) { // ignore check response.Status === 0 aCallback({ code: 'ENODATA' - }) + }); } else { - aCallback(new Error('error during dns query')) + aCallback(new Error('error during dns query')); } } catch (e) { - aCallback(e) + aCallback(e); } } + } class PaymailClient { - constructor (dns = null, fetch2 = null, clock = null, bsv = null) { + constructor(dns = null, fetch2 = null, clock = null, bsv = null) { if (fetch2 === null) { - fetch2 = fetch__default.default + fetch2 = fetch__default['default']; } if (dns === null) { - dns = new BrowserDns(fetch2) + dns = new BrowserDns(fetch2); } if (bsv === null) { - bsv = require('bsv') + bsv = require('bsv'); } - this.bsv = bsv - this.resolver = new EndpointResolver(dns, fetch2) - this.http = new Http(fetch2) - this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()) + this.bsv = bsv; + this.resolver = new EndpointResolver(dns, fetch2); + this.http = new Http(fetch2); + this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); } /** * Uses pki flow to query for an identity key for a given paymail address. @@ -470,13 +479,14 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - async getPublicKey (paymail) { - const identityUrl = await this.resolver.getIdentityUrlFor(paymail) - const response = await this.http.get(identityUrl) + + async getPublicKey(paymail) { + const identityUrl = await this.resolver.getIdentityUrlFor(paymail); + const response = await this.http.get(identityUrl); const { pubkey - } = await response.json() - return pubkey + } = await response.json(); + return pubkey; } /** * Uses `Basic Address Resolution` flow to query for a payment for output for the @@ -493,18 +503,19 @@ class PaymailClient { * @param {String} privateKey - Optional. private key to sign the request. */ - async getOutputFor (aPaymail, senderInfo, privateKey = null) { - const addressUrl = await this.resolver.getAddressUrlFor(aPaymail) - const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)) + + async getOutputFor(aPaymail, senderInfo, privateKey = null) { + const addressUrl = await this.resolver.getAddressUrlFor(aPaymail); + const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)); if (!response.ok) { - throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail) + throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail); } const { output - } = await response.json() - return output + } = await response.json(); + return output; } /** * Verify if the given public address belongs to the given @@ -514,14 +525,15 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - async verifyPubkeyOwner (pubkey, paymail) { - const url = await this.resolver.getVerifyUrlFor(paymail, pubkey) - const response = await this.http.get(url) - const body = await response.json() + + async verifyPubkeyOwner(pubkey, paymail) { + const url = await this.resolver.getVerifyUrlFor(paymail, pubkey); + const response = await this.http.get(url); + const body = await response.json(); const { match - } = body - return match + } = body; + return match; } /** * Verifies if a given signature is valid for a given message. It uses @@ -538,39 +550,40 @@ class PaymailClient { * @param {String} pubkey - Optional. Public key that validates the signature. */ - async isValidSignature (message, signature, paymail = null, pubkey = null) { + + async isValidSignature(message, signature, paymail = null, pubkey = null) { if (paymail == null && pubkey === null) { - throw new Error('Must specify either paymail or pubkey') + throw new Error('Must specify either paymail or pubkey'); } - let senderPublicKey + let senderPublicKey; if (paymail) { if (pubkey && (await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner))) { if (await this.verifyPubkeyOwner(pubkey, paymail)) { - senderPublicKey = this.bsv.PublicKey.fromString(pubkey) + senderPublicKey = this.bsv.PublicKey.fromString(pubkey); } else { - return false + return false; } } else { - const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki) + const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki); if (hasPki) { - const identityKey = await this.getPublicKey(paymail) - senderPublicKey = this.bsv.PublicKey.fromString(identityKey) + const identityKey = await this.getPublicKey(paymail); + senderPublicKey = this.bsv.PublicKey.fromString(identityKey); } else { - return false + return false; } } } - const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey) + const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey); try { - const verified = message.verify(senderKeyAddress.toString(), signature) - return verified + const verified = message.verify(senderKeyAddress.toString(), signature); + return verified; } catch (err) { - return false + return false; } } /** @@ -580,69 +593,71 @@ class PaymailClient { * @param {String} s - the preferred size of the image */ - async getPublicProfile (paymail) { - const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail) - const response = await this.http.get(publicProfileUrl) + + async getPublicProfile(paymail) { + const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail); + const response = await this.http.get(publicProfileUrl); if (!response.ok) { - const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); } const { avatar, name - } = await response.json() + } = await response.json(); return { avatar, name - } + }; } - async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) { + async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { if (!hexTransaction) { - throw new Error('transaction hex cannot be empty') + throw new Error('transaction hex cannot be empty'); } - const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail) - const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)) + const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail); + const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)); if (!response.ok) { - const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); } - return response.json() + return response.json(); } - async getP2pPaymentDestination (targetPaymail, satoshis) { + async getP2pPaymentDestination(targetPaymail, satoshis) { if (!satoshis) { - throw new Error('Amount in satohis needs to be specified') + throw new Error('Amount in satohis needs to be specified'); } - const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail) - const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)) + const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail); + const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)); if (!response.ok) { - const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); } - const body = await response.json() + const body = await response.json(); if (!body.outputs) { - throw new Error('Server answered with a wrong format. Missing outputs') + throw new Error('Server answered with a wrong format. Missing outputs'); } - return body + return body; } + } -exports.BrowserDns = BrowserDns -exports.CapabilityCodes = CapabilityCodes -exports.Clock = Clock -exports.PaymailClient = PaymailClient -exports.PaymailNotFound = PaymailNotFound -exports.RequestBodyFactory = RequestBodyFactory -exports.VerifiableMessage = VerifiableMessage -// # sourceMappingURL=paymail-client.cjs.js.map +exports.BrowserDns = BrowserDns; +exports.CapabilityCodes = CapabilityCodes; +exports.Clock = Clock; +exports.PaymailClient = PaymailClient; +exports.PaymailNotFound = PaymailNotFound; +exports.RequestBodyFactory = RequestBodyFactory; +exports.VerifiableMessage = VerifiableMessage; +//# sourceMappingURL=paymail-client.cjs.js.map diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index b5fe593..c3d9469 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port===undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index 7109d33..165b45e 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -1,9 +1,9 @@ -import { brfc } from '@moneybutton/brfc' -import _defineProperty from '@babel/runtime/helpers/defineProperty' -import 'abort-controller/polyfill' -import AbortController from 'abort-controller' -import moment from 'moment' -import fetch from 'isomorphic-fetch' +import { brfc } from '@moneybutton/brfc'; +import _defineProperty from '@babel/runtime/helpers/defineProperty'; +import 'abort-controller/polyfill'; +import AbortController from 'abort-controller'; +import moment from 'moment'; +import fetch from 'isomorphic-fetch'; const CapabilityCodes = { pki: 'pki', @@ -13,16 +13,16 @@ const CapabilityCodes = { publicProfile: brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), receiveTransaction: brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), p2pPaymentDestination: brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') -} +}; // import { DnsOverHttps } from "./dns-over-https" class DnsClient { - constructor (dns, doh) { - this.dns = dns - this.doh = doh + constructor(dns, doh) { + this.dns = dns; + this.doh = doh; } - async checkSrv (aDomain) { + async checkSrv(aDomain) { return new Promise((resolve, reject) => { this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { try { @@ -31,301 +31,306 @@ class DnsClient { domain: aDomain, port: 443, isSecure: true - }) + }); } if (err) { - return reject(err) + return reject(err); } const { name: domainFromDns, port, isSecure - } = result[0] + } = result[0]; resolve({ domain: domainFromDns, port, isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure - }) + }); } catch (err) { - return reject(err) + return reject(err); } - }) + }); }).then(result => { if (result.isSecure) { - return result + return result; } else { - return this.validateDnssec(aDomain) + return this.validateDnssec(aDomain); } }, err => { - console.error(err) - return err - }) + console.error(err); + return err; + }); } - checkDomainIsSecure (srvResponseDomain, originalDomain) { + checkDomainIsSecure(srvResponseDomain, originalDomain) { if (this.domainsAreEqual(srvResponseDomain, originalDomain)) { - return true + return true; } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) { - return true + return true; } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :) - return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain) + return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain); } else if (this.isHandcashInternalDomain(originalDomain)) { - return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain) + return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain); } else if (this.domainsAreEqual('localhost', srvResponseDomain)) { - return true + return true; } else if (this.isMoneyButtonDomain(srvResponseDomain)) { - return true + return true; } else { - return false + return false; } } - isMoneyButtonDomain (aDomain) { - return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com') + isMoneyButtonDomain(aDomain) { + return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com'); } - responseIsWwwSubdomain (srvResponseDomain, originalDomain) { - return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`) + responseIsWwwSubdomain(srvResponseDomain, originalDomain) { + return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`); } - isHandcashDomain (aDomain) { - return this.domainsAreEqual('handcash.io', aDomain) + isHandcashDomain(aDomain) { + return this.domainsAreEqual('handcash.io', aDomain); } - isHandcashInternalDomain (aDomain) { - return this.domainsAreEqual('internal.handcash.io', aDomain) + isHandcashInternalDomain(aDomain) { + return this.domainsAreEqual('internal.handcash.io', aDomain); } - async validateDnssec (aDomain) { - const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain) + async validateDnssec(aDomain) { + const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { - throw new Error('Insecure domain.') + throw new Error('Insecure domain.'); } - const data = dnsResponse.Answer[0].data.split(' ') - const port = data[2] - const responseDomain = data[3] + const data = dnsResponse.Answer[0].data.split(' '); + const port = data[2]; + const responseDomain = data[3]; if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) { - throw new Error('Insecure domain.') + throw new Error('Insecure domain.'); } return { port, domain: responseDomain, isSecure: dnsResponse.AD - } + }; } - domainsAreEqual (domain1, domain2) { - return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, '') + domainsAreEqual(domain1, domain2) { + return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, ''); } + } class DnsOverHttps { - constructor (fetch, config) { - this.fetch = fetch - this.config = config + constructor(fetch, config) { + this.fetch = fetch; + this.config = config; } - async resolveSrv (aDomain) { - const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`) - const body = await response.json() - return body + async resolveSrv(aDomain) { + const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); + const body = await response.json(); + return body; } - async queryBsvaliasDomain (aDomain) { - return this.resolveSrv(`_bsvalias._tcp.${aDomain}`) + async queryBsvaliasDomain(aDomain) { + return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); } + } -function ownKeys (object, enumerableOnly) { const keys = Object.keys(object); if (Object.getOwnPropertySymbols) { let symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable }) } keys.push.apply(keys, symbols) } return keys } +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } -function _objectSpread (target) { for (let i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]) }) } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)) }) } } return target } +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } class Http { - constructor (fetch) { - this.fetch = fetch + constructor(fetch) { + this.fetch = fetch; } - async get (url) { - return this._basicRequest(url) + async get(url) { + return this._basicRequest(url); } - async postJson (url, body) { + async postJson(url, body) { return this._basicRequest(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) - }) + }); } - async _basicRequest (url, options = {}) { - const controller = new AbortController() - const timer = setTimeout(() => controller.abort(), 30000) + async _basicRequest(url, options = {}) { + const controller = new AbortController(); + const timer = setTimeout(() => controller.abort(), 30000); return this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { credentials: 'omit', signal: controller.signal })).then(result => { - clearTimeout(timer) - return result - }) + clearTimeout(timer); + return result; + }); } + } class EndpointResolver { - constructor (dns = null, fetch) { + constructor(dns = null, fetch) { this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - })) - this.http = new Http(fetch) - this._cache = {} + })); + this.http = new Http(fetch); + this._cache = {}; } - static create (dnsClient, fetch) { - const instance = new EndpointResolver(null, fetch) - instance.dnsClient = dnsClient - return instance + static create(dnsClient, fetch) { + const instance = new EndpointResolver(null, fetch); + instance.dnsClient = dnsClient; + return instance; } - async getIdentityUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.pki) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain) - return identityUrl + async getIdentityUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.pki); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain); + return identityUrl; } - async getAddressUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain) - return addressUrl + async getAddressUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain); + return addressUrl; } - async getVerifyUrlFor (aPaymail, aPubkey) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey) - return url + async getVerifyUrlFor(aPaymail, aPubkey) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey); + return url; } - async getPublicProfileUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain) - return url + async getPublicProfileUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; } - async getSendTxUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain) - return url + async getSendTxUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; } - async getP2pPatmentDestinationUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain) - return url + async getP2pPatmentDestinationUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; } - async domainHasCapability (aDomain, capability) { - const apiDescriptor = await this.getApiDescriptionFor(aDomain) - return !!apiDescriptor.capabilities[capability] + async domainHasCapability(aDomain, capability) { + const apiDescriptor = await this.getApiDescriptionFor(aDomain); + return !!apiDescriptor.capabilities[capability]; } - async getApiDescriptionFor (aDomain) { + async getApiDescriptionFor(aDomain) { if (this._cache[aDomain]) { - return this._cache[aDomain] + return this._cache[aDomain]; } const { domain, port - } = await this.getWellKnownBaseUrl(aDomain) - const apiDescriptor = this.fetchApiDescriptor(domain, port) - this._cache[aDomain] = apiDescriptor - return apiDescriptor + } = await this.getWellKnownBaseUrl(aDomain); + const apiDescriptor = this.fetchApiDescriptor(domain, port); + this._cache[aDomain] = apiDescriptor; + return apiDescriptor; } - async fetchApiDescriptor (domain, port) { - const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https' - const requestPort = port.toString() === '443' ? '' : `:${port}` - const requestDomain = /^(.*?)\.?$/.exec(domain)[1] // Get value from capture group + async fetchApiDescriptor(domain, port) { + const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https'; + const requestPort = port === undefined || port.toString() === '443' ? '' : `:${port}`; + const requestDomain = /^(.*?)\.?$/.exec(domain)[1]; // Get value from capture group if (!requestDomain) { - throw new Error(`Invalid domain: ${domain}`) + throw new Error(`Invalid domain: ${domain}`); } - const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`) - const apiDescriptor = await wellKnown.json() - return apiDescriptor + const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`); + const apiDescriptor = await wellKnown.json(); + return apiDescriptor; } - async getWellKnownBaseUrl (aDomain) { - return this.dnsClient.checkSrv(aDomain) + async getWellKnownBaseUrl(aDomain) { + return this.dnsClient.checkSrv(aDomain); } - async ensureCapabilityFor (aDomain, aCapability) { + async ensureCapabilityFor(aDomain, aCapability) { if (!(await this.domainHasCapability(aDomain, aCapability))) { - throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`) + throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`); } } + } class VerifiableMessage { - constructor (parts, bsv = null) { + constructor(parts, bsv = null) { if (bsv === null) { - bsv = require('bsv') - bsv.Message = require('bsv/message') + bsv = require('bsv'); + bsv.Message = require('bsv/message'); } - this.bsv = bsv - const concatenated = Buffer.from(parts.join('')) - this.message = new this.bsv.Message(concatenated) + this.bsv = bsv; + const concatenated = Buffer.from(parts.join('')); + this.message = new this.bsv.Message(concatenated); } - static forBasicAddressResolution ({ + static forBasicAddressResolution({ senderHandle, amount, dt, purpose }) { if (dt.toISOString) { - dt = dt.toISOString() + dt = dt.toISOString(); } - return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]) + return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]); } - sign (wifPrivateKey) { - return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)) + sign(wifPrivateKey) { + return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)); } - verify (keyAddress, signature) { - return this.message.verify(keyAddress, signature) + verify(keyAddress, signature) { + return this.message.verify(keyAddress, signature); } + } class RequestBodyFactory { - constructor (clock) { - this.clock = clock + constructor(clock) { + this.clock = clock; } - buildBodyToRequestAddress (senderInfo, privateKey = null) { + buildBodyToRequestAddress(senderInfo, privateKey = null) { const { senderHandle, amount, @@ -333,29 +338,29 @@ class RequestBodyFactory { purpose, pubkey, signature: providedSignature - } = senderInfo + } = senderInfo; if (!providedSignature && privateKey === null) { - throw new Error('Missing private key or signature') + throw new Error('Missing private key or signature'); } - let dt, signature + let dt, signature; if (providedSignature) { if (!senderInfo.dt) { - throw new Error('missing datetime for given signature') + throw new Error('missing datetime for given signature'); } - dt = senderInfo.dt - signature = providedSignature + dt = senderInfo.dt; + signature = providedSignature; } else { - dt = this.clock.now() + dt = this.clock.now(); signature = VerifiableMessage.forBasicAddressResolution({ senderHandle, amount, dt, purpose - }).sign(privateKey) + }).sign(privateKey); } return { @@ -366,92 +371,96 @@ class RequestBodyFactory { amount: amount || null, pubkey, signature - } + }; } - buildBodySendTx (hexTransaction, reference, metadata) { + buildBodySendTx(hexTransaction, reference, metadata) { return { hex: hexTransaction, metadata, reference - } + }; } - buildBodyP2pPaymentDestination (satoshis) { + buildBodyP2pPaymentDestination(satoshis) { return { satoshis - } + }; } + } class Clock { - now () { - return moment() + now() { + return moment(); } + } class PaymailNotFound extends Error { - constructor (message, paymail) { - super(message) - this.paymail = paymail + constructor(message, paymail) { + super(message); + this.paymail = paymail; } + } class BrowserDns { - constructor (fetch) { + constructor(fetch) { this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - }) + }); } - async resolveSrv (aDomain, aCallback) { + async resolveSrv(aDomain, aCallback) { try { - const response = await this.doh.resolveSrv(aDomain) + const response = await this.doh.resolveSrv(aDomain); if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { - const [priority, weight, port, name] = record.data.split(' ') + const [priority, weight, port, name] = record.data.split(' '); return { priority, weight, port, name, isSecure: response.AD - } - }) - aCallback(null, data) + }; + }); + aCallback(null, data); } else if (!response.Answer) { // ignore check response.Status === 0 aCallback({ code: 'ENODATA' - }) + }); } else { - aCallback(new Error('error during dns query')) + aCallback(new Error('error during dns query')); } } catch (e) { - aCallback(e) + aCallback(e); } } + } class PaymailClient { - constructor (dns = null, fetch2 = null, clock = null, bsv = null) { + constructor(dns = null, fetch2 = null, clock = null, bsv = null) { if (fetch2 === null) { - fetch2 = fetch + fetch2 = fetch; } if (dns === null) { - dns = new BrowserDns(fetch2) + dns = new BrowserDns(fetch2); } if (bsv === null) { - bsv = require('bsv') + bsv = require('bsv'); } - this.bsv = bsv - this.resolver = new EndpointResolver(dns, fetch2) - this.http = new Http(fetch2) - this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()) + this.bsv = bsv; + this.resolver = new EndpointResolver(dns, fetch2); + this.http = new Http(fetch2); + this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); } /** * Uses pki flow to query for an identity key for a given paymail address. @@ -459,13 +468,14 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - async getPublicKey (paymail) { - const identityUrl = await this.resolver.getIdentityUrlFor(paymail) - const response = await this.http.get(identityUrl) + + async getPublicKey(paymail) { + const identityUrl = await this.resolver.getIdentityUrlFor(paymail); + const response = await this.http.get(identityUrl); const { pubkey - } = await response.json() - return pubkey + } = await response.json(); + return pubkey; } /** * Uses `Basic Address Resolution` flow to query for a payment for output for the @@ -482,18 +492,19 @@ class PaymailClient { * @param {String} privateKey - Optional. private key to sign the request. */ - async getOutputFor (aPaymail, senderInfo, privateKey = null) { - const addressUrl = await this.resolver.getAddressUrlFor(aPaymail) - const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)) + + async getOutputFor(aPaymail, senderInfo, privateKey = null) { + const addressUrl = await this.resolver.getAddressUrlFor(aPaymail); + const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)); if (!response.ok) { - throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail) + throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail); } const { output - } = await response.json() - return output + } = await response.json(); + return output; } /** * Verify if the given public address belongs to the given @@ -503,14 +514,15 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - async verifyPubkeyOwner (pubkey, paymail) { - const url = await this.resolver.getVerifyUrlFor(paymail, pubkey) - const response = await this.http.get(url) - const body = await response.json() + + async verifyPubkeyOwner(pubkey, paymail) { + const url = await this.resolver.getVerifyUrlFor(paymail, pubkey); + const response = await this.http.get(url); + const body = await response.json(); const { match - } = body - return match + } = body; + return match; } /** * Verifies if a given signature is valid for a given message. It uses @@ -527,39 +539,40 @@ class PaymailClient { * @param {String} pubkey - Optional. Public key that validates the signature. */ - async isValidSignature (message, signature, paymail = null, pubkey = null) { + + async isValidSignature(message, signature, paymail = null, pubkey = null) { if (paymail == null && pubkey === null) { - throw new Error('Must specify either paymail or pubkey') + throw new Error('Must specify either paymail or pubkey'); } - let senderPublicKey + let senderPublicKey; if (paymail) { if (pubkey && (await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner))) { if (await this.verifyPubkeyOwner(pubkey, paymail)) { - senderPublicKey = this.bsv.PublicKey.fromString(pubkey) + senderPublicKey = this.bsv.PublicKey.fromString(pubkey); } else { - return false + return false; } } else { - const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki) + const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki); if (hasPki) { - const identityKey = await this.getPublicKey(paymail) - senderPublicKey = this.bsv.PublicKey.fromString(identityKey) + const identityKey = await this.getPublicKey(paymail); + senderPublicKey = this.bsv.PublicKey.fromString(identityKey); } else { - return false + return false; } } } - const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey) + const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey); try { - const verified = message.verify(senderKeyAddress.toString(), signature) - return verified + const verified = message.verify(senderKeyAddress.toString(), signature); + return verified; } catch (err) { - return false + return false; } } /** @@ -569,63 +582,65 @@ class PaymailClient { * @param {String} s - the preferred size of the image */ - async getPublicProfile (paymail) { - const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail) - const response = await this.http.get(publicProfileUrl) + + async getPublicProfile(paymail) { + const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail); + const response = await this.http.get(publicProfileUrl); if (!response.ok) { - const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); } const { avatar, name - } = await response.json() + } = await response.json(); return { avatar, name - } + }; } - async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) { + async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { if (!hexTransaction) { - throw new Error('transaction hex cannot be empty') + throw new Error('transaction hex cannot be empty'); } - const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail) - const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)) + const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail); + const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)); if (!response.ok) { - const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); } - return response.json() + return response.json(); } - async getP2pPaymentDestination (targetPaymail, satoshis) { + async getP2pPaymentDestination(targetPaymail, satoshis) { if (!satoshis) { - throw new Error('Amount in satohis needs to be specified') + throw new Error('Amount in satohis needs to be specified'); } - const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail) - const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)) + const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail); + const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)); if (!response.ok) { - const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); } - const body = await response.json() + const body = await response.json(); if (!body.outputs) { - throw new Error('Server answered with a wrong format. Missing outputs') + throw new Error('Server answered with a wrong format. Missing outputs'); } - return body + return body; } + } -export { BrowserDns, CapabilityCodes, Clock, PaymailClient, PaymailNotFound, RequestBodyFactory, VerifiableMessage } -// # sourceMappingURL=paymail-client.esm.js.map +export { BrowserDns, CapabilityCodes, Clock, PaymailClient, PaymailNotFound, RequestBodyFactory, VerifiableMessage }; +//# sourceMappingURL=paymail-client.esm.js.map diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 4b4034b..dcd2184 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error(`Insecure domain.`)\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error(`Insecure domain.`)\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n var controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [ alias, domain ] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = port.toString() === '443' ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [ priority, weight, port, name ] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n let publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n let receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n let paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port===undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/src/EndpointResolver.js b/src/EndpointResolver.js index 0f9acba..6e980dc 100644 --- a/src/EndpointResolver.js +++ b/src/EndpointResolver.js @@ -88,7 +88,7 @@ class EndpointResolver { async fetchApiDescriptor (domain, port) { const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https' - const requestPort = port.toString() === '443' ? '' : `:${port}` + const requestPort = (port===undefined || port.toString() === '443') ? '' : `:${port}` const requestDomain = /^(.*?)\.?$/.exec(domain)[1] // Get value from capture group if (!requestDomain) { throw new Error(`Invalid domain: ${domain}`) From 804722d792ff757fd11e79f84744f24ef7bc71b2 Mon Sep 17 00:00:00 2001 From: Long Li Date: Sun, 30 May 2021 23:45:31 +0900 Subject: [PATCH 17/33] cross fetch --- dist/paymail-client.cjs.js | 529 ++++++++++++++++----------------- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 503 +++++++++++++++---------------- dist/paymail-client.esm.js.map | 2 +- package-lock.json | 198 ++++++------ package.json | 3 +- src/EndpointResolver.js | 2 +- src/PaymailClient.js | 2 +- 8 files changed, 599 insertions(+), 642 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index f5d0465..ee6987f 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -1,20 +1,20 @@ -'use strict'; +'use strict' -Object.defineProperty(exports, '__esModule', { value: true }); +Object.defineProperty(exports, '__esModule', { value: true }) -var brfc = require('@moneybutton/brfc'); -var _defineProperty = require('@babel/runtime/helpers/defineProperty'); -require('abort-controller/polyfill'); -var AbortController = require('abort-controller'); -var moment = require('moment'); -var fetch = require('isomorphic-fetch'); +const brfc = require('@moneybutton/brfc') +const _defineProperty = require('@babel/runtime/helpers/defineProperty') +require('abort-controller/polyfill') +const AbortController = require('abort-controller') +const moment = require('moment') +const fetch = require('cross-fetch') -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e } } -var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); -var AbortController__default = /*#__PURE__*/_interopDefaultLegacy(AbortController); -var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment); -var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch); +const _defineProperty__default = /* #__PURE__ */_interopDefaultLegacy(_defineProperty) +const AbortController__default = /* #__PURE__ */_interopDefaultLegacy(AbortController) +const moment__default = /* #__PURE__ */_interopDefaultLegacy(moment) +const fetch__default = /* #__PURE__ */_interopDefaultLegacy(fetch) const CapabilityCodes = { pki: 'pki', @@ -24,16 +24,16 @@ const CapabilityCodes = { publicProfile: brfc.brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), receiveTransaction: brfc.brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), p2pPaymentDestination: brfc.brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') -}; +} // import { DnsOverHttps } from "./dns-over-https" class DnsClient { - constructor(dns, doh) { - this.dns = dns; - this.doh = doh; + constructor (dns, doh) { + this.dns = dns + this.doh = doh } - async checkSrv(aDomain) { + async checkSrv (aDomain) { return new Promise((resolve, reject) => { this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { try { @@ -42,306 +42,301 @@ class DnsClient { domain: aDomain, port: 443, isSecure: true - }); + }) } if (err) { - return reject(err); + return reject(err) } const { name: domainFromDns, port, isSecure - } = result[0]; + } = result[0] resolve({ domain: domainFromDns, port, isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure - }); + }) } catch (err) { - return reject(err); + return reject(err) } - }); + }) }).then(result => { if (result.isSecure) { - return result; + return result } else { - return this.validateDnssec(aDomain); + return this.validateDnssec(aDomain) } }, err => { - console.error(err); - return err; - }); + console.error(err) + return err + }) } - checkDomainIsSecure(srvResponseDomain, originalDomain) { + checkDomainIsSecure (srvResponseDomain, originalDomain) { if (this.domainsAreEqual(srvResponseDomain, originalDomain)) { - return true; + return true } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) { - return true; + return true } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :) - return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain); + return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain) } else if (this.isHandcashInternalDomain(originalDomain)) { - return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain); + return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain) } else if (this.domainsAreEqual('localhost', srvResponseDomain)) { - return true; + return true } else if (this.isMoneyButtonDomain(srvResponseDomain)) { - return true; + return true } else { - return false; + return false } } - isMoneyButtonDomain(aDomain) { - return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com'); + isMoneyButtonDomain (aDomain) { + return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com') } - responseIsWwwSubdomain(srvResponseDomain, originalDomain) { - return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`); + responseIsWwwSubdomain (srvResponseDomain, originalDomain) { + return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`) } - isHandcashDomain(aDomain) { - return this.domainsAreEqual('handcash.io', aDomain); + isHandcashDomain (aDomain) { + return this.domainsAreEqual('handcash.io', aDomain) } - isHandcashInternalDomain(aDomain) { - return this.domainsAreEqual('internal.handcash.io', aDomain); + isHandcashInternalDomain (aDomain) { + return this.domainsAreEqual('internal.handcash.io', aDomain) } - async validateDnssec(aDomain) { - const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); + async validateDnssec (aDomain) { + const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain) if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { - throw new Error('Insecure domain.'); + throw new Error('Insecure domain.') } - const data = dnsResponse.Answer[0].data.split(' '); - const port = data[2]; - const responseDomain = data[3]; + const data = dnsResponse.Answer[0].data.split(' ') + const port = data[2] + const responseDomain = data[3] if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) { - throw new Error('Insecure domain.'); + throw new Error('Insecure domain.') } return { port, domain: responseDomain, isSecure: dnsResponse.AD - }; + } } - domainsAreEqual(domain1, domain2) { - return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, ''); + domainsAreEqual (domain1, domain2) { + return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, '') } - } class DnsOverHttps { - constructor(fetch, config) { - this.fetch = fetch; - this.config = config; + constructor (fetch, config) { + this.fetch = fetch + this.config = config } - async resolveSrv(aDomain) { - const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); - const body = await response.json(); - return body; + async resolveSrv (aDomain) { + const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`) + const body = await response.json() + return body } - async queryBsvaliasDomain(aDomain) { - return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); + async queryBsvaliasDomain (aDomain) { + return this.resolveSrv(`_bsvalias._tcp.${aDomain}`) } - } -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } +function ownKeys (object, enumerableOnly) { const keys = Object.keys(object); if (Object.getOwnPropertySymbols) { let symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable }) } keys.push.apply(keys, symbols) } return keys } -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } +function _objectSpread (target) { for (let i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default.default(target, key, source[key]) }) } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)) }) } } return target } class Http { - constructor(fetch) { - this.fetch = fetch; + constructor (fetch) { + this.fetch = fetch } - async get(url) { - return this._basicRequest(url); + async get (url) { + return this._basicRequest(url) } - async postJson(url, body) { + async postJson (url, body) { return this._basicRequest(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) - }); + }) } - async _basicRequest(url, options = {}) { - const controller = new AbortController__default['default'](); - const timer = setTimeout(() => controller.abort(), 30000); + async _basicRequest (url, options = {}) { + const controller = new AbortController__default.default() + const timer = setTimeout(() => controller.abort(), 30000) return this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { credentials: 'omit', signal: controller.signal })).then(result => { - clearTimeout(timer); - return result; - }); + clearTimeout(timer) + return result + }) } - } class EndpointResolver { - constructor(dns = null, fetch) { + constructor (dns = null, fetch) { this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - })); - this.http = new Http(fetch); - this._cache = {}; + })) + this.http = new Http(fetch) + this._cache = {} } - static create(dnsClient, fetch) { - const instance = new EndpointResolver(null, fetch); - instance.dnsClient = dnsClient; - return instance; + static create (dnsClient, fetch) { + const instance = new EndpointResolver(null, fetch) + instance.dnsClient = dnsClient + return instance } - async getIdentityUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.pki); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain); - return identityUrl; + async getIdentityUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.pki) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain) + return identityUrl } - async getAddressUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain); - return addressUrl; + async getAddressUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain) + return addressUrl } - async getVerifyUrlFor(aPaymail, aPubkey) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey); - return url; + async getVerifyUrlFor (aPaymail, aPubkey) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey) + return url } - async getPublicProfileUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; + async getPublicProfileUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain) + return url } - async getSendTxUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; + async getSendTxUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain) + return url } - async getP2pPatmentDestinationUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; + async getP2pPatmentDestinationUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain) + return url } - async domainHasCapability(aDomain, capability) { - const apiDescriptor = await this.getApiDescriptionFor(aDomain); - return !!apiDescriptor.capabilities[capability]; + async domainHasCapability (aDomain, capability) { + const apiDescriptor = await this.getApiDescriptionFor(aDomain) + return !!apiDescriptor.capabilities[capability] } - async getApiDescriptionFor(aDomain) { + async getApiDescriptionFor (aDomain) { if (this._cache[aDomain]) { - return this._cache[aDomain]; + return this._cache[aDomain] } const { domain, port - } = await this.getWellKnownBaseUrl(aDomain); - const apiDescriptor = this.fetchApiDescriptor(domain, port); - this._cache[aDomain] = apiDescriptor; - return apiDescriptor; + } = await this.getWellKnownBaseUrl(aDomain) + const apiDescriptor = this.fetchApiDescriptor(domain, port) + this._cache[aDomain] = apiDescriptor + return apiDescriptor } - async fetchApiDescriptor(domain, port) { - const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https'; - const requestPort = port === undefined || port.toString() === '443' ? '' : `:${port}`; - const requestDomain = /^(.*?)\.?$/.exec(domain)[1]; // Get value from capture group + async fetchApiDescriptor (domain, port) { + const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https' + const requestPort = port === undefined || port.toString() === '443' ? '' : `:${port}` + const requestDomain = /^(.*?)\.?$/.exec(domain)[1] // Get value from capture group if (!requestDomain) { - throw new Error(`Invalid domain: ${domain}`); + throw new Error(`Invalid domain: ${domain}`) } - const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`); - const apiDescriptor = await wellKnown.json(); - return apiDescriptor; + const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`) + const apiDescriptor = await wellKnown.json() + return apiDescriptor } - async getWellKnownBaseUrl(aDomain) { - return this.dnsClient.checkSrv(aDomain); + async getWellKnownBaseUrl (aDomain) { + return this.dnsClient.checkSrv(aDomain) } - async ensureCapabilityFor(aDomain, aCapability) { + async ensureCapabilityFor (aDomain, aCapability) { if (!(await this.domainHasCapability(aDomain, aCapability))) { - throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`); + throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`) } } - } class VerifiableMessage { - constructor(parts, bsv = null) { + constructor (parts, bsv = null) { if (bsv === null) { - bsv = require('bsv'); - bsv.Message = require('bsv/message'); + bsv = require('bsv') + bsv.Message = require('bsv/message') } - this.bsv = bsv; - const concatenated = Buffer.from(parts.join('')); - this.message = new this.bsv.Message(concatenated); + this.bsv = bsv + const concatenated = Buffer.from(parts.join('')) + this.message = new this.bsv.Message(concatenated) } - static forBasicAddressResolution({ + static forBasicAddressResolution ({ senderHandle, amount, dt, purpose }) { if (dt.toISOString) { - dt = dt.toISOString(); + dt = dt.toISOString() } - return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]); + return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]) } - sign(wifPrivateKey) { - return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)); + sign (wifPrivateKey) { + return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)) } - verify(keyAddress, signature) { - return this.message.verify(keyAddress, signature); + verify (keyAddress, signature) { + return this.message.verify(keyAddress, signature) } - } class RequestBodyFactory { - constructor(clock) { - this.clock = clock; + constructor (clock) { + this.clock = clock } - buildBodyToRequestAddress(senderInfo, privateKey = null) { + buildBodyToRequestAddress (senderInfo, privateKey = null) { const { senderHandle, amount, @@ -349,29 +344,29 @@ class RequestBodyFactory { purpose, pubkey, signature: providedSignature - } = senderInfo; + } = senderInfo if (!providedSignature && privateKey === null) { - throw new Error('Missing private key or signature'); + throw new Error('Missing private key or signature') } - let dt, signature; + let dt, signature if (providedSignature) { if (!senderInfo.dt) { - throw new Error('missing datetime for given signature'); + throw new Error('missing datetime for given signature') } - dt = senderInfo.dt; - signature = providedSignature; + dt = senderInfo.dt + signature = providedSignature } else { - dt = this.clock.now(); + dt = this.clock.now() signature = VerifiableMessage.forBasicAddressResolution({ senderHandle, amount, dt, purpose - }).sign(privateKey); + }).sign(privateKey) } return { @@ -382,96 +377,92 @@ class RequestBodyFactory { amount: amount || null, pubkey, signature - }; + } } - buildBodySendTx(hexTransaction, reference, metadata) { + buildBodySendTx (hexTransaction, reference, metadata) { return { hex: hexTransaction, metadata, reference - }; + } } - buildBodyP2pPaymentDestination(satoshis) { + buildBodyP2pPaymentDestination (satoshis) { return { satoshis - }; + } } - } class Clock { - now() { - return moment__default['default'](); + now () { + return moment__default.default() } - } class PaymailNotFound extends Error { - constructor(message, paymail) { - super(message); - this.paymail = paymail; + constructor (message, paymail) { + super(message) + this.paymail = paymail } - } class BrowserDns { - constructor(fetch) { + constructor (fetch) { this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - }); + }) } - async resolveSrv(aDomain, aCallback) { + async resolveSrv (aDomain, aCallback) { try { - const response = await this.doh.resolveSrv(aDomain); + const response = await this.doh.resolveSrv(aDomain) if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { - const [priority, weight, port, name] = record.data.split(' '); + const [priority, weight, port, name] = record.data.split(' ') return { priority, weight, port, name, isSecure: response.AD - }; - }); - aCallback(null, data); + } + }) + aCallback(null, data) } else if (!response.Answer) { // ignore check response.Status === 0 aCallback({ code: 'ENODATA' - }); + }) } else { - aCallback(new Error('error during dns query')); + aCallback(new Error('error during dns query')) } } catch (e) { - aCallback(e); + aCallback(e) } } - } class PaymailClient { - constructor(dns = null, fetch2 = null, clock = null, bsv = null) { + constructor (dns = null, fetch2 = null, clock = null, bsv = null) { if (fetch2 === null) { - fetch2 = fetch__default['default']; + fetch2 = fetch__default.default } if (dns === null) { - dns = new BrowserDns(fetch2); + dns = new BrowserDns(fetch2) } if (bsv === null) { - bsv = require('bsv'); + bsv = require('bsv') } - this.bsv = bsv; - this.resolver = new EndpointResolver(dns, fetch2); - this.http = new Http(fetch2); - this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); + this.bsv = bsv + this.resolver = new EndpointResolver(dns, fetch2) + this.http = new Http(fetch2) + this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()) } /** * Uses pki flow to query for an identity key for a given paymail address. @@ -479,14 +470,13 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - - async getPublicKey(paymail) { - const identityUrl = await this.resolver.getIdentityUrlFor(paymail); - const response = await this.http.get(identityUrl); + async getPublicKey (paymail) { + const identityUrl = await this.resolver.getIdentityUrlFor(paymail) + const response = await this.http.get(identityUrl) const { pubkey - } = await response.json(); - return pubkey; + } = await response.json() + return pubkey } /** * Uses `Basic Address Resolution` flow to query for a payment for output for the @@ -503,19 +493,18 @@ class PaymailClient { * @param {String} privateKey - Optional. private key to sign the request. */ - - async getOutputFor(aPaymail, senderInfo, privateKey = null) { - const addressUrl = await this.resolver.getAddressUrlFor(aPaymail); - const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)); + async getOutputFor (aPaymail, senderInfo, privateKey = null) { + const addressUrl = await this.resolver.getAddressUrlFor(aPaymail) + const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)) if (!response.ok) { - throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail); + throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail) } const { output - } = await response.json(); - return output; + } = await response.json() + return output } /** * Verify if the given public address belongs to the given @@ -525,15 +514,14 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - - async verifyPubkeyOwner(pubkey, paymail) { - const url = await this.resolver.getVerifyUrlFor(paymail, pubkey); - const response = await this.http.get(url); - const body = await response.json(); + async verifyPubkeyOwner (pubkey, paymail) { + const url = await this.resolver.getVerifyUrlFor(paymail, pubkey) + const response = await this.http.get(url) + const body = await response.json() const { match - } = body; - return match; + } = body + return match } /** * Verifies if a given signature is valid for a given message. It uses @@ -550,40 +538,39 @@ class PaymailClient { * @param {String} pubkey - Optional. Public key that validates the signature. */ - - async isValidSignature(message, signature, paymail = null, pubkey = null) { + async isValidSignature (message, signature, paymail = null, pubkey = null) { if (paymail == null && pubkey === null) { - throw new Error('Must specify either paymail or pubkey'); + throw new Error('Must specify either paymail or pubkey') } - let senderPublicKey; + let senderPublicKey if (paymail) { if (pubkey && (await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner))) { if (await this.verifyPubkeyOwner(pubkey, paymail)) { - senderPublicKey = this.bsv.PublicKey.fromString(pubkey); + senderPublicKey = this.bsv.PublicKey.fromString(pubkey) } else { - return false; + return false } } else { - const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki); + const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki) if (hasPki) { - const identityKey = await this.getPublicKey(paymail); - senderPublicKey = this.bsv.PublicKey.fromString(identityKey); + const identityKey = await this.getPublicKey(paymail) + senderPublicKey = this.bsv.PublicKey.fromString(identityKey) } else { - return false; + return false } } } - const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey); + const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey) try { - const verified = message.verify(senderKeyAddress.toString(), signature); - return verified; + const verified = message.verify(senderKeyAddress.toString(), signature) + return verified } catch (err) { - return false; + return false } } /** @@ -593,71 +580,69 @@ class PaymailClient { * @param {String} s - the preferred size of the image */ - - async getPublicProfile(paymail) { - const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail); - const response = await this.http.get(publicProfileUrl); + async getPublicProfile (paymail) { + const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail) + const response = await this.http.get(publicProfileUrl) if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); + const body = await response.json() + throw new Error(`Server failed with: ${JSON.stringify(body)}`) } const { avatar, name - } = await response.json(); + } = await response.json() return { avatar, name - }; + } } - async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { + async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) { if (!hexTransaction) { - throw new Error('transaction hex cannot be empty'); + throw new Error('transaction hex cannot be empty') } - const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail); - const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)); + const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail) + const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)) if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); + const body = await response.json() + throw new Error(`Server failed with: ${JSON.stringify(body)}`) } - return response.json(); + return response.json() } - async getP2pPaymentDestination(targetPaymail, satoshis) { + async getP2pPaymentDestination (targetPaymail, satoshis) { if (!satoshis) { - throw new Error('Amount in satohis needs to be specified'); + throw new Error('Amount in satohis needs to be specified') } - const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail); - const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)); + const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail) + const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)) if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); + const body = await response.json() + throw new Error(`Server failed with: ${JSON.stringify(body)}`) } - const body = await response.json(); + const body = await response.json() if (!body.outputs) { - throw new Error('Server answered with a wrong format. Missing outputs'); + throw new Error('Server answered with a wrong format. Missing outputs') } - return body; + return body } - } -exports.BrowserDns = BrowserDns; -exports.CapabilityCodes = CapabilityCodes; -exports.Clock = Clock; -exports.PaymailClient = PaymailClient; -exports.PaymailNotFound = PaymailNotFound; -exports.RequestBodyFactory = RequestBodyFactory; -exports.VerifiableMessage = VerifiableMessage; -//# sourceMappingURL=paymail-client.cjs.js.map +exports.BrowserDns = BrowserDns +exports.CapabilityCodes = CapabilityCodes +exports.Clock = Clock +exports.PaymailClient = PaymailClient +exports.PaymailNotFound = PaymailNotFound +exports.RequestBodyFactory = RequestBodyFactory +exports.VerifiableMessage = VerifiableMessage +// # sourceMappingURL=paymail-client.cjs.js.map diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index c3d9469..534fd0e 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port===undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port===undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index 165b45e..514ddc5 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -1,9 +1,9 @@ -import { brfc } from '@moneybutton/brfc'; -import _defineProperty from '@babel/runtime/helpers/defineProperty'; -import 'abort-controller/polyfill'; -import AbortController from 'abort-controller'; -import moment from 'moment'; -import fetch from 'isomorphic-fetch'; +import { brfc } from '@moneybutton/brfc' +import _defineProperty from '@babel/runtime/helpers/defineProperty' +import 'abort-controller/polyfill' +import AbortController from 'abort-controller' +import moment from 'moment' +import fetch from 'cross-fetch' const CapabilityCodes = { pki: 'pki', @@ -13,16 +13,16 @@ const CapabilityCodes = { publicProfile: brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), receiveTransaction: brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), p2pPaymentDestination: brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') -}; +} // import { DnsOverHttps } from "./dns-over-https" class DnsClient { - constructor(dns, doh) { - this.dns = dns; - this.doh = doh; + constructor (dns, doh) { + this.dns = dns + this.doh = doh } - async checkSrv(aDomain) { + async checkSrv (aDomain) { return new Promise((resolve, reject) => { this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { try { @@ -31,306 +31,301 @@ class DnsClient { domain: aDomain, port: 443, isSecure: true - }); + }) } if (err) { - return reject(err); + return reject(err) } const { name: domainFromDns, port, isSecure - } = result[0]; + } = result[0] resolve({ domain: domainFromDns, port, isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure - }); + }) } catch (err) { - return reject(err); + return reject(err) } - }); + }) }).then(result => { if (result.isSecure) { - return result; + return result } else { - return this.validateDnssec(aDomain); + return this.validateDnssec(aDomain) } }, err => { - console.error(err); - return err; - }); + console.error(err) + return err + }) } - checkDomainIsSecure(srvResponseDomain, originalDomain) { + checkDomainIsSecure (srvResponseDomain, originalDomain) { if (this.domainsAreEqual(srvResponseDomain, originalDomain)) { - return true; + return true } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) { - return true; + return true } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :) - return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain); + return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain) } else if (this.isHandcashInternalDomain(originalDomain)) { - return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain); + return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain) } else if (this.domainsAreEqual('localhost', srvResponseDomain)) { - return true; + return true } else if (this.isMoneyButtonDomain(srvResponseDomain)) { - return true; + return true } else { - return false; + return false } } - isMoneyButtonDomain(aDomain) { - return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com'); + isMoneyButtonDomain (aDomain) { + return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com') } - responseIsWwwSubdomain(srvResponseDomain, originalDomain) { - return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`); + responseIsWwwSubdomain (srvResponseDomain, originalDomain) { + return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`) } - isHandcashDomain(aDomain) { - return this.domainsAreEqual('handcash.io', aDomain); + isHandcashDomain (aDomain) { + return this.domainsAreEqual('handcash.io', aDomain) } - isHandcashInternalDomain(aDomain) { - return this.domainsAreEqual('internal.handcash.io', aDomain); + isHandcashInternalDomain (aDomain) { + return this.domainsAreEqual('internal.handcash.io', aDomain) } - async validateDnssec(aDomain) { - const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); + async validateDnssec (aDomain) { + const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain) if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { - throw new Error('Insecure domain.'); + throw new Error('Insecure domain.') } - const data = dnsResponse.Answer[0].data.split(' '); - const port = data[2]; - const responseDomain = data[3]; + const data = dnsResponse.Answer[0].data.split(' ') + const port = data[2] + const responseDomain = data[3] if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) { - throw new Error('Insecure domain.'); + throw new Error('Insecure domain.') } return { port, domain: responseDomain, isSecure: dnsResponse.AD - }; + } } - domainsAreEqual(domain1, domain2) { - return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, ''); + domainsAreEqual (domain1, domain2) { + return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, '') } - } class DnsOverHttps { - constructor(fetch, config) { - this.fetch = fetch; - this.config = config; + constructor (fetch, config) { + this.fetch = fetch + this.config = config } - async resolveSrv(aDomain) { - const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); - const body = await response.json(); - return body; + async resolveSrv (aDomain) { + const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`) + const body = await response.json() + return body } - async queryBsvaliasDomain(aDomain) { - return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); + async queryBsvaliasDomain (aDomain) { + return this.resolveSrv(`_bsvalias._tcp.${aDomain}`) } - } -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } +function ownKeys (object, enumerableOnly) { const keys = Object.keys(object); if (Object.getOwnPropertySymbols) { let symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable }) } keys.push.apply(keys, symbols) } return keys } -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } +function _objectSpread (target) { for (let i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]) }) } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)) }) } } return target } class Http { - constructor(fetch) { - this.fetch = fetch; + constructor (fetch) { + this.fetch = fetch } - async get(url) { - return this._basicRequest(url); + async get (url) { + return this._basicRequest(url) } - async postJson(url, body) { + async postJson (url, body) { return this._basicRequest(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) - }); + }) } - async _basicRequest(url, options = {}) { - const controller = new AbortController(); - const timer = setTimeout(() => controller.abort(), 30000); + async _basicRequest (url, options = {}) { + const controller = new AbortController() + const timer = setTimeout(() => controller.abort(), 30000) return this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { credentials: 'omit', signal: controller.signal })).then(result => { - clearTimeout(timer); - return result; - }); + clearTimeout(timer) + return result + }) } - } class EndpointResolver { - constructor(dns = null, fetch) { + constructor (dns = null, fetch) { this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - })); - this.http = new Http(fetch); - this._cache = {}; + })) + this.http = new Http(fetch) + this._cache = {} } - static create(dnsClient, fetch) { - const instance = new EndpointResolver(null, fetch); - instance.dnsClient = dnsClient; - return instance; + static create (dnsClient, fetch) { + const instance = new EndpointResolver(null, fetch) + instance.dnsClient = dnsClient + return instance } - async getIdentityUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.pki); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain); - return identityUrl; + async getIdentityUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.pki) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain) + return identityUrl } - async getAddressUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain); - return addressUrl; + async getAddressUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain) + return addressUrl } - async getVerifyUrlFor(aPaymail, aPubkey) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey); - return url; + async getVerifyUrlFor (aPaymail, aPubkey) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey) + return url } - async getPublicProfileUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; + async getPublicProfileUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain) + return url } - async getSendTxUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; + async getSendTxUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain) + return url } - async getP2pPatmentDestinationUrlFor(aPaymail) { - const [alias, domain] = aPaymail.split('@'); - await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination); - const apiDescriptor = await this.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain); - return url; + async getP2pPatmentDestinationUrlFor (aPaymail) { + const [alias, domain] = aPaymail.split('@') + await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination) + const apiDescriptor = await this.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain) + return url } - async domainHasCapability(aDomain, capability) { - const apiDescriptor = await this.getApiDescriptionFor(aDomain); - return !!apiDescriptor.capabilities[capability]; + async domainHasCapability (aDomain, capability) { + const apiDescriptor = await this.getApiDescriptionFor(aDomain) + return !!apiDescriptor.capabilities[capability] } - async getApiDescriptionFor(aDomain) { + async getApiDescriptionFor (aDomain) { if (this._cache[aDomain]) { - return this._cache[aDomain]; + return this._cache[aDomain] } const { domain, port - } = await this.getWellKnownBaseUrl(aDomain); - const apiDescriptor = this.fetchApiDescriptor(domain, port); - this._cache[aDomain] = apiDescriptor; - return apiDescriptor; + } = await this.getWellKnownBaseUrl(aDomain) + const apiDescriptor = this.fetchApiDescriptor(domain, port) + this._cache[aDomain] = apiDescriptor + return apiDescriptor } - async fetchApiDescriptor(domain, port) { - const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https'; - const requestPort = port === undefined || port.toString() === '443' ? '' : `:${port}`; - const requestDomain = /^(.*?)\.?$/.exec(domain)[1]; // Get value from capture group + async fetchApiDescriptor (domain, port) { + const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https' + const requestPort = port === undefined || port.toString() === '443' ? '' : `:${port}` + const requestDomain = /^(.*?)\.?$/.exec(domain)[1] // Get value from capture group if (!requestDomain) { - throw new Error(`Invalid domain: ${domain}`); + throw new Error(`Invalid domain: ${domain}`) } - const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`); - const apiDescriptor = await wellKnown.json(); - return apiDescriptor; + const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`) + const apiDescriptor = await wellKnown.json() + return apiDescriptor } - async getWellKnownBaseUrl(aDomain) { - return this.dnsClient.checkSrv(aDomain); + async getWellKnownBaseUrl (aDomain) { + return this.dnsClient.checkSrv(aDomain) } - async ensureCapabilityFor(aDomain, aCapability) { + async ensureCapabilityFor (aDomain, aCapability) { if (!(await this.domainHasCapability(aDomain, aCapability))) { - throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`); + throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`) } } - } class VerifiableMessage { - constructor(parts, bsv = null) { + constructor (parts, bsv = null) { if (bsv === null) { - bsv = require('bsv'); - bsv.Message = require('bsv/message'); + bsv = require('bsv') + bsv.Message = require('bsv/message') } - this.bsv = bsv; - const concatenated = Buffer.from(parts.join('')); - this.message = new this.bsv.Message(concatenated); + this.bsv = bsv + const concatenated = Buffer.from(parts.join('')) + this.message = new this.bsv.Message(concatenated) } - static forBasicAddressResolution({ + static forBasicAddressResolution ({ senderHandle, amount, dt, purpose }) { if (dt.toISOString) { - dt = dt.toISOString(); + dt = dt.toISOString() } - return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]); + return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]) } - sign(wifPrivateKey) { - return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)); + sign (wifPrivateKey) { + return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)) } - verify(keyAddress, signature) { - return this.message.verify(keyAddress, signature); + verify (keyAddress, signature) { + return this.message.verify(keyAddress, signature) } - } class RequestBodyFactory { - constructor(clock) { - this.clock = clock; + constructor (clock) { + this.clock = clock } - buildBodyToRequestAddress(senderInfo, privateKey = null) { + buildBodyToRequestAddress (senderInfo, privateKey = null) { const { senderHandle, amount, @@ -338,29 +333,29 @@ class RequestBodyFactory { purpose, pubkey, signature: providedSignature - } = senderInfo; + } = senderInfo if (!providedSignature && privateKey === null) { - throw new Error('Missing private key or signature'); + throw new Error('Missing private key or signature') } - let dt, signature; + let dt, signature if (providedSignature) { if (!senderInfo.dt) { - throw new Error('missing datetime for given signature'); + throw new Error('missing datetime for given signature') } - dt = senderInfo.dt; - signature = providedSignature; + dt = senderInfo.dt + signature = providedSignature } else { - dt = this.clock.now(); + dt = this.clock.now() signature = VerifiableMessage.forBasicAddressResolution({ senderHandle, amount, dt, purpose - }).sign(privateKey); + }).sign(privateKey) } return { @@ -371,96 +366,92 @@ class RequestBodyFactory { amount: amount || null, pubkey, signature - }; + } } - buildBodySendTx(hexTransaction, reference, metadata) { + buildBodySendTx (hexTransaction, reference, metadata) { return { hex: hexTransaction, metadata, reference - }; + } } - buildBodyP2pPaymentDestination(satoshis) { + buildBodyP2pPaymentDestination (satoshis) { return { satoshis - }; + } } - } class Clock { - now() { - return moment(); + now () { + return moment() } - } class PaymailNotFound extends Error { - constructor(message, paymail) { - super(message); - this.paymail = paymail; + constructor (message, paymail) { + super(message) + this.paymail = paymail } - } class BrowserDns { - constructor(fetch) { + constructor (fetch) { this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - }); + }) } - async resolveSrv(aDomain, aCallback) { + async resolveSrv (aDomain, aCallback) { try { - const response = await this.doh.resolveSrv(aDomain); + const response = await this.doh.resolveSrv(aDomain) if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { - const [priority, weight, port, name] = record.data.split(' '); + const [priority, weight, port, name] = record.data.split(' ') return { priority, weight, port, name, isSecure: response.AD - }; - }); - aCallback(null, data); + } + }) + aCallback(null, data) } else if (!response.Answer) { // ignore check response.Status === 0 aCallback({ code: 'ENODATA' - }); + }) } else { - aCallback(new Error('error during dns query')); + aCallback(new Error('error during dns query')) } } catch (e) { - aCallback(e); + aCallback(e) } } - } class PaymailClient { - constructor(dns = null, fetch2 = null, clock = null, bsv = null) { + constructor (dns = null, fetch2 = null, clock = null, bsv = null) { if (fetch2 === null) { - fetch2 = fetch; + fetch2 = fetch } if (dns === null) { - dns = new BrowserDns(fetch2); + dns = new BrowserDns(fetch2) } if (bsv === null) { - bsv = require('bsv'); + bsv = require('bsv') } - this.bsv = bsv; - this.resolver = new EndpointResolver(dns, fetch2); - this.http = new Http(fetch2); - this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); + this.bsv = bsv + this.resolver = new EndpointResolver(dns, fetch2) + this.http = new Http(fetch2) + this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()) } /** * Uses pki flow to query for an identity key for a given paymail address. @@ -468,14 +459,13 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - - async getPublicKey(paymail) { - const identityUrl = await this.resolver.getIdentityUrlFor(paymail); - const response = await this.http.get(identityUrl); + async getPublicKey (paymail) { + const identityUrl = await this.resolver.getIdentityUrlFor(paymail) + const response = await this.http.get(identityUrl) const { pubkey - } = await response.json(); - return pubkey; + } = await response.json() + return pubkey } /** * Uses `Basic Address Resolution` flow to query for a payment for output for the @@ -492,19 +482,18 @@ class PaymailClient { * @param {String} privateKey - Optional. private key to sign the request. */ - - async getOutputFor(aPaymail, senderInfo, privateKey = null) { - const addressUrl = await this.resolver.getAddressUrlFor(aPaymail); - const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)); + async getOutputFor (aPaymail, senderInfo, privateKey = null) { + const addressUrl = await this.resolver.getAddressUrlFor(aPaymail) + const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)) if (!response.ok) { - throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail); + throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail) } const { output - } = await response.json(); - return output; + } = await response.json() + return output } /** * Verify if the given public address belongs to the given @@ -514,15 +503,14 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - - async verifyPubkeyOwner(pubkey, paymail) { - const url = await this.resolver.getVerifyUrlFor(paymail, pubkey); - const response = await this.http.get(url); - const body = await response.json(); + async verifyPubkeyOwner (pubkey, paymail) { + const url = await this.resolver.getVerifyUrlFor(paymail, pubkey) + const response = await this.http.get(url) + const body = await response.json() const { match - } = body; - return match; + } = body + return match } /** * Verifies if a given signature is valid for a given message. It uses @@ -539,40 +527,39 @@ class PaymailClient { * @param {String} pubkey - Optional. Public key that validates the signature. */ - - async isValidSignature(message, signature, paymail = null, pubkey = null) { + async isValidSignature (message, signature, paymail = null, pubkey = null) { if (paymail == null && pubkey === null) { - throw new Error('Must specify either paymail or pubkey'); + throw new Error('Must specify either paymail or pubkey') } - let senderPublicKey; + let senderPublicKey if (paymail) { if (pubkey && (await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner))) { if (await this.verifyPubkeyOwner(pubkey, paymail)) { - senderPublicKey = this.bsv.PublicKey.fromString(pubkey); + senderPublicKey = this.bsv.PublicKey.fromString(pubkey) } else { - return false; + return false } } else { - const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki); + const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki) if (hasPki) { - const identityKey = await this.getPublicKey(paymail); - senderPublicKey = this.bsv.PublicKey.fromString(identityKey); + const identityKey = await this.getPublicKey(paymail) + senderPublicKey = this.bsv.PublicKey.fromString(identityKey) } else { - return false; + return false } } } - const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey); + const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey) try { - const verified = message.verify(senderKeyAddress.toString(), signature); - return verified; + const verified = message.verify(senderKeyAddress.toString(), signature) + return verified } catch (err) { - return false; + return false } } /** @@ -582,65 +569,63 @@ class PaymailClient { * @param {String} s - the preferred size of the image */ - - async getPublicProfile(paymail) { - const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail); - const response = await this.http.get(publicProfileUrl); + async getPublicProfile (paymail) { + const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail) + const response = await this.http.get(publicProfileUrl) if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); + const body = await response.json() + throw new Error(`Server failed with: ${JSON.stringify(body)}`) } const { avatar, name - } = await response.json(); + } = await response.json() return { avatar, name - }; + } } - async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { + async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) { if (!hexTransaction) { - throw new Error('transaction hex cannot be empty'); + throw new Error('transaction hex cannot be empty') } - const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail); - const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)); + const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail) + const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)) if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); + const body = await response.json() + throw new Error(`Server failed with: ${JSON.stringify(body)}`) } - return response.json(); + return response.json() } - async getP2pPaymentDestination(targetPaymail, satoshis) { + async getP2pPaymentDestination (targetPaymail, satoshis) { if (!satoshis) { - throw new Error('Amount in satohis needs to be specified'); + throw new Error('Amount in satohis needs to be specified') } - const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail); - const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)); + const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail) + const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)) if (!response.ok) { - const body = await response.json(); - throw new Error(`Server failed with: ${JSON.stringify(body)}`); + const body = await response.json() + throw new Error(`Server failed with: ${JSON.stringify(body)}`) } - const body = await response.json(); + const body = await response.json() if (!body.outputs) { - throw new Error('Server answered with a wrong format. Missing outputs'); + throw new Error('Server answered with a wrong format. Missing outputs') } - return body; + return body } - } -export { BrowserDns, CapabilityCodes, Clock, PaymailClient, PaymailNotFound, RequestBodyFactory, VerifiableMessage }; -//# sourceMappingURL=paymail-client.esm.js.map +export { BrowserDns, CapabilityCodes, Clock, PaymailClient, PaymailNotFound, RequestBodyFactory, VerifiableMessage } +// # sourceMappingURL=paymail-client.esm.js.map diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index dcd2184..95ec31f 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port===undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'isomorphic-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port===undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index be0401a..02663a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@moneybutton/brfc": "github:baryon/brfc", "abort-controller": "3.0.0", "bsv": "^1.5.5", - "isomorphic-fetch": "^3.0.0", + "cross-fetch": "^3.1.4", "moment": "^2.24.0" }, "devDependencies": { @@ -77,9 +77,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", + "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", "dev": true }, "node_modules/@babel/core": { @@ -143,14 +143,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", + "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.15", + "@babel/compat-data": "^7.14.4", "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" }, "peerDependencies": { @@ -158,16 +158,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", - "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz", + "integrity": "sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-function-name": "^7.14.2", "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.14.3", + "@babel/helper-replace-supers": "^7.14.4", "@babel/helper-split-export-declaration": "^7.12.13" }, "peerDependencies": { @@ -306,15 +306,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", - "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", + "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", "dev": true, "dependencies": { "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/types": "^7.14.4" } }, "node_modules/@babel/helper-simple-access": { @@ -391,9 +391,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -829,9 +829,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz", - "integrity": "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz", + "integrity": "sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.13.0" @@ -841,16 +841,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz", - "integrity": "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz", + "integrity": "sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-function-name": "^7.14.2", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-replace-supers": "^7.14.4", "@babel/helper-split-export-declaration": "^7.12.13", "globals": "^11.1.0" }, @@ -871,9 +871,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", - "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz", + "integrity": "sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.13.0" @@ -1378,9 +1378,9 @@ } }, "node_modules/@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.14.0", @@ -2791,9 +2791,9 @@ "hasInstallScript": true }, "node_modules/core-js-compat": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.13.0.tgz", - "integrity": "sha512-jhbI2zpVskgfDC9mGRaDo1gagd0E0i/kYW0+WvibL/rafEHKAHO653hEXIxJHqRlRLITluXtRH3AGTL5qJmifQ==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.13.1.tgz", + "integrity": "sha512-mdrcxc0WznfRd8ZicEZh1qVeJ2mu6bwQFh8YVUK48friy/FOwFV5EJj9/dlh+nMQ74YusdVfBFDuomKgUspxWQ==", "dev": true, "dependencies": { "browserslist": "^4.16.6", @@ -2865,6 +2865,14 @@ "sha.js": "^2.4.8" } }, + "node_modules/cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "dependencies": { + "node-fetch": "2.6.1" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3090,9 +3098,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.3.741", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.741.tgz", - "integrity": "sha512-4i3T0cwnHo1O4Mnp9JniEco8bZiXoqbm3PhW5hv7uu8YLg35iajYrRnNyKFaN8/8SSTskU2hYqVTeYVPceSpUA==", + "version": "1.3.742", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz", + "integrity": "sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q==", "dev": true }, "node_modules/elliptic": { @@ -5043,15 +5051,6 @@ "node": ">=0.10.0" } }, - "node_modules/isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "dependencies": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8940,11 +8939,6 @@ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -9227,9 +9221,9 @@ } }, "@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", + "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", "dev": true }, "@babel/core": { @@ -9286,28 +9280,28 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", + "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.15", + "@babel/compat-data": "^7.14.4", "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", - "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz", + "integrity": "sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-function-name": "^7.14.2", "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.14.3", + "@babel/helper-replace-supers": "^7.14.4", "@babel/helper-split-export-declaration": "^7.12.13" } }, @@ -9437,15 +9431,15 @@ } }, "@babel/helper-replace-supers": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", - "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", + "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/types": "^7.14.4" } }, "@babel/helper-simple-access": { @@ -9522,9 +9516,9 @@ } }, "@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", "dev": true }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { @@ -9852,25 +9846,25 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz", - "integrity": "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz", + "integrity": "sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-classes": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz", - "integrity": "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz", + "integrity": "sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", "@babel/helper-function-name": "^7.14.2", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-replace-supers": "^7.14.4", "@babel/helper-split-export-declaration": "^7.12.13", "globals": "^11.1.0" } @@ -9885,9 +9879,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", - "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz", + "integrity": "sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0" @@ -10301,9 +10295,9 @@ } }, "@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.0", @@ -11455,9 +11449,9 @@ "dev": true }, "core-js-compat": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.13.0.tgz", - "integrity": "sha512-jhbI2zpVskgfDC9mGRaDo1gagd0E0i/kYW0+WvibL/rafEHKAHO653hEXIxJHqRlRLITluXtRH3AGTL5qJmifQ==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.13.1.tgz", + "integrity": "sha512-mdrcxc0WznfRd8ZicEZh1qVeJ2mu6bwQFh8YVUK48friy/FOwFV5EJj9/dlh+nMQ74YusdVfBFDuomKgUspxWQ==", "dev": true, "requires": { "browserslist": "^4.16.6", @@ -11521,6 +11515,14 @@ "sha.js": "^2.4.8" } }, + "cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "requires": { + "node-fetch": "2.6.1" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -11696,9 +11698,9 @@ } }, "electron-to-chromium": { - "version": "1.3.741", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.741.tgz", - "integrity": "sha512-4i3T0cwnHo1O4Mnp9JniEco8bZiXoqbm3PhW5hv7uu8YLg35iajYrRnNyKFaN8/8SSTskU2hYqVTeYVPceSpUA==", + "version": "1.3.742", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz", + "integrity": "sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q==", "dev": true }, "elliptic": { @@ -13186,15 +13188,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, - "isomorphic-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", - "requires": { - "node-fetch": "^2.6.1", - "whatwg-fetch": "^3.4.1" - } - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -16327,11 +16320,6 @@ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index fcbf8cb..c3ea0c8 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,6 @@ ], "scripts": { "lint": "standard --parser=babel-eslint --fix", - "pretest": "npm run lint", "test": "mocha", "build": "npx rollup -c", "build:dev": "npx rollup -c", @@ -30,7 +29,7 @@ "@moneybutton/brfc": "github:baryon/brfc", "abort-controller": "3.0.0", "bsv": "^1.5.5", - "isomorphic-fetch": "^3.0.0", + "cross-fetch": "^3.1.4", "moment": "^2.24.0" }, "devDependencies": { diff --git a/src/EndpointResolver.js b/src/EndpointResolver.js index 6e980dc..1ee96cd 100644 --- a/src/EndpointResolver.js +++ b/src/EndpointResolver.js @@ -88,7 +88,7 @@ class EndpointResolver { async fetchApiDescriptor (domain, port) { const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https' - const requestPort = (port===undefined || port.toString() === '443') ? '' : `:${port}` + const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}` const requestDomain = /^(.*?)\.?$/.exec(domain)[1] // Get value from capture group if (!requestDomain) { throw new Error(`Invalid domain: ${domain}`) diff --git a/src/PaymailClient.js b/src/PaymailClient.js index ab20dfe..97f714e 100644 --- a/src/PaymailClient.js +++ b/src/PaymailClient.js @@ -3,7 +3,7 @@ import { RequestBodyFactory } from './RequestBodyFactory' import { Clock } from './Clock' import { PaymailNotFound } from './errors/PaymailNotFound' import { CapabilityCodes } from './constants' -import fetch from 'isomorphic-fetch' +import fetch from 'cross-fetch' import { BrowserDns } from './BrowserDns' import { Http } from './http' From 52f3eb860a503814c271b8731d44ddc07b1f9e4f Mon Sep 17 00:00:00 2001 From: Long Li Date: Sat, 10 Jul 2021 17:46:18 +0900 Subject: [PATCH 18/33] fix depends --- dist/paymail-client.cjs.js | 529 +++--- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 503 ++--- dist/paymail-client.esm.js.map | 2 +- package-lock.json | 3223 ++++++++++++++++++-------------- package.json | 22 +- test/endpoint-resolver.js | 6 + test/mocha.opts | 1 + test/paymail-client.js | 5 + test/request-body-factory.js | 5 + test/verificable-message.js | 5 + 11 files changed, 2377 insertions(+), 1926 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index ee6987f..08c585b 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -1,20 +1,20 @@ -'use strict' +'use strict'; -Object.defineProperty(exports, '__esModule', { value: true }) +Object.defineProperty(exports, '__esModule', { value: true }); -const brfc = require('@moneybutton/brfc') -const _defineProperty = require('@babel/runtime/helpers/defineProperty') -require('abort-controller/polyfill') -const AbortController = require('abort-controller') -const moment = require('moment') -const fetch = require('cross-fetch') +var brfc = require('@moneybutton/brfc'); +var _defineProperty = require('@babel/runtime/helpers/defineProperty'); +require('abort-controller/polyfill'); +var AbortController = require('abort-controller'); +var moment = require('moment'); +var fetch = require('cross-fetch'); -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e } } +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } -const _defineProperty__default = /* #__PURE__ */_interopDefaultLegacy(_defineProperty) -const AbortController__default = /* #__PURE__ */_interopDefaultLegacy(AbortController) -const moment__default = /* #__PURE__ */_interopDefaultLegacy(moment) -const fetch__default = /* #__PURE__ */_interopDefaultLegacy(fetch) +var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); +var AbortController__default = /*#__PURE__*/_interopDefaultLegacy(AbortController); +var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment); +var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch); const CapabilityCodes = { pki: 'pki', @@ -24,16 +24,16 @@ const CapabilityCodes = { publicProfile: brfc.brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), receiveTransaction: brfc.brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), p2pPaymentDestination: brfc.brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') -} +}; // import { DnsOverHttps } from "./dns-over-https" class DnsClient { - constructor (dns, doh) { - this.dns = dns - this.doh = doh + constructor(dns, doh) { + this.dns = dns; + this.doh = doh; } - async checkSrv (aDomain) { + async checkSrv(aDomain) { return new Promise((resolve, reject) => { this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { try { @@ -42,301 +42,306 @@ class DnsClient { domain: aDomain, port: 443, isSecure: true - }) + }); } if (err) { - return reject(err) + return reject(err); } const { name: domainFromDns, port, isSecure - } = result[0] + } = result[0]; resolve({ domain: domainFromDns, port, isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure - }) + }); } catch (err) { - return reject(err) + return reject(err); } - }) + }); }).then(result => { if (result.isSecure) { - return result + return result; } else { - return this.validateDnssec(aDomain) + return this.validateDnssec(aDomain); } }, err => { - console.error(err) - return err - }) + console.error(err); + return err; + }); } - checkDomainIsSecure (srvResponseDomain, originalDomain) { + checkDomainIsSecure(srvResponseDomain, originalDomain) { if (this.domainsAreEqual(srvResponseDomain, originalDomain)) { - return true + return true; } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) { - return true + return true; } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :) - return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain) + return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain); } else if (this.isHandcashInternalDomain(originalDomain)) { - return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain) + return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain); } else if (this.domainsAreEqual('localhost', srvResponseDomain)) { - return true + return true; } else if (this.isMoneyButtonDomain(srvResponseDomain)) { - return true + return true; } else { - return false + return false; } } - isMoneyButtonDomain (aDomain) { - return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com') + isMoneyButtonDomain(aDomain) { + return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com'); } - responseIsWwwSubdomain (srvResponseDomain, originalDomain) { - return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`) + responseIsWwwSubdomain(srvResponseDomain, originalDomain) { + return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`); } - isHandcashDomain (aDomain) { - return this.domainsAreEqual('handcash.io', aDomain) + isHandcashDomain(aDomain) { + return this.domainsAreEqual('handcash.io', aDomain); } - isHandcashInternalDomain (aDomain) { - return this.domainsAreEqual('internal.handcash.io', aDomain) + isHandcashInternalDomain(aDomain) { + return this.domainsAreEqual('internal.handcash.io', aDomain); } - async validateDnssec (aDomain) { - const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain) + async validateDnssec(aDomain) { + const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { - throw new Error('Insecure domain.') + throw new Error('Insecure domain.'); } - const data = dnsResponse.Answer[0].data.split(' ') - const port = data[2] - const responseDomain = data[3] + const data = dnsResponse.Answer[0].data.split(' '); + const port = data[2]; + const responseDomain = data[3]; if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) { - throw new Error('Insecure domain.') + throw new Error('Insecure domain.'); } return { port, domain: responseDomain, isSecure: dnsResponse.AD - } + }; } - domainsAreEqual (domain1, domain2) { - return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, '') + domainsAreEqual(domain1, domain2) { + return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, ''); } + } class DnsOverHttps { - constructor (fetch, config) { - this.fetch = fetch - this.config = config + constructor(fetch, config) { + this.fetch = fetch; + this.config = config; } - async resolveSrv (aDomain) { - const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`) - const body = await response.json() - return body + async resolveSrv(aDomain) { + const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); + const body = await response.json(); + return body; } - async queryBsvaliasDomain (aDomain) { - return this.resolveSrv(`_bsvalias._tcp.${aDomain}`) + async queryBsvaliasDomain(aDomain) { + return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); } + } -function ownKeys (object, enumerableOnly) { const keys = Object.keys(object); if (Object.getOwnPropertySymbols) { let symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable }) } keys.push.apply(keys, symbols) } return keys } +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } -function _objectSpread (target) { for (let i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default.default(target, key, source[key]) }) } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)) }) } } return target } +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } class Http { - constructor (fetch) { - this.fetch = fetch + constructor(fetch) { + this.fetch = fetch; } - async get (url) { - return this._basicRequest(url) + async get(url) { + return this._basicRequest(url); } - async postJson (url, body) { + async postJson(url, body) { return this._basicRequest(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) - }) + }); } - async _basicRequest (url, options = {}) { - const controller = new AbortController__default.default() - const timer = setTimeout(() => controller.abort(), 30000) + async _basicRequest(url, options = {}) { + const controller = new AbortController__default['default'](); + const timer = setTimeout(() => controller.abort(), 30000); return this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { credentials: 'omit', signal: controller.signal })).then(result => { - clearTimeout(timer) - return result - }) + clearTimeout(timer); + return result; + }); } + } class EndpointResolver { - constructor (dns = null, fetch) { + constructor(dns = null, fetch) { this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - })) - this.http = new Http(fetch) - this._cache = {} + })); + this.http = new Http(fetch); + this._cache = {}; } - static create (dnsClient, fetch) { - const instance = new EndpointResolver(null, fetch) - instance.dnsClient = dnsClient - return instance + static create(dnsClient, fetch) { + const instance = new EndpointResolver(null, fetch); + instance.dnsClient = dnsClient; + return instance; } - async getIdentityUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.pki) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain) - return identityUrl + async getIdentityUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.pki); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain); + return identityUrl; } - async getAddressUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain) - return addressUrl + async getAddressUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain); + return addressUrl; } - async getVerifyUrlFor (aPaymail, aPubkey) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey) - return url + async getVerifyUrlFor(aPaymail, aPubkey) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey); + return url; } - async getPublicProfileUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain) - return url + async getPublicProfileUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; } - async getSendTxUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain) - return url + async getSendTxUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; } - async getP2pPatmentDestinationUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain) - return url + async getP2pPatmentDestinationUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; } - async domainHasCapability (aDomain, capability) { - const apiDescriptor = await this.getApiDescriptionFor(aDomain) - return !!apiDescriptor.capabilities[capability] + async domainHasCapability(aDomain, capability) { + const apiDescriptor = await this.getApiDescriptionFor(aDomain); + return !!apiDescriptor.capabilities[capability]; } - async getApiDescriptionFor (aDomain) { + async getApiDescriptionFor(aDomain) { if (this._cache[aDomain]) { - return this._cache[aDomain] + return this._cache[aDomain]; } const { domain, port - } = await this.getWellKnownBaseUrl(aDomain) - const apiDescriptor = this.fetchApiDescriptor(domain, port) - this._cache[aDomain] = apiDescriptor - return apiDescriptor + } = await this.getWellKnownBaseUrl(aDomain); + const apiDescriptor = this.fetchApiDescriptor(domain, port); + this._cache[aDomain] = apiDescriptor; + return apiDescriptor; } - async fetchApiDescriptor (domain, port) { - const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https' - const requestPort = port === undefined || port.toString() === '443' ? '' : `:${port}` - const requestDomain = /^(.*?)\.?$/.exec(domain)[1] // Get value from capture group + async fetchApiDescriptor(domain, port) { + const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https'; + const requestPort = port === undefined || port.toString() === '443' ? '' : `:${port}`; + const requestDomain = /^(.*?)\.?$/.exec(domain)[1]; // Get value from capture group if (!requestDomain) { - throw new Error(`Invalid domain: ${domain}`) + throw new Error(`Invalid domain: ${domain}`); } - const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`) - const apiDescriptor = await wellKnown.json() - return apiDescriptor + const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`); + const apiDescriptor = await wellKnown.json(); + return apiDescriptor; } - async getWellKnownBaseUrl (aDomain) { - return this.dnsClient.checkSrv(aDomain) + async getWellKnownBaseUrl(aDomain) { + return this.dnsClient.checkSrv(aDomain); } - async ensureCapabilityFor (aDomain, aCapability) { + async ensureCapabilityFor(aDomain, aCapability) { if (!(await this.domainHasCapability(aDomain, aCapability))) { - throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`) + throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`); } } + } class VerifiableMessage { - constructor (parts, bsv = null) { + constructor(parts, bsv = null) { if (bsv === null) { - bsv = require('bsv') - bsv.Message = require('bsv/message') + bsv = require('bsv'); + bsv.Message = require('bsv/message'); } - this.bsv = bsv - const concatenated = Buffer.from(parts.join('')) - this.message = new this.bsv.Message(concatenated) + this.bsv = bsv; + const concatenated = Buffer.from(parts.join('')); + this.message = new this.bsv.Message(concatenated); } - static forBasicAddressResolution ({ + static forBasicAddressResolution({ senderHandle, amount, dt, purpose }) { if (dt.toISOString) { - dt = dt.toISOString() + dt = dt.toISOString(); } - return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]) + return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]); } - sign (wifPrivateKey) { - return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)) + sign(wifPrivateKey) { + return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)); } - verify (keyAddress, signature) { - return this.message.verify(keyAddress, signature) + verify(keyAddress, signature) { + return this.message.verify(keyAddress, signature); } + } class RequestBodyFactory { - constructor (clock) { - this.clock = clock + constructor(clock) { + this.clock = clock; } - buildBodyToRequestAddress (senderInfo, privateKey = null) { + buildBodyToRequestAddress(senderInfo, privateKey = null) { const { senderHandle, amount, @@ -344,29 +349,29 @@ class RequestBodyFactory { purpose, pubkey, signature: providedSignature - } = senderInfo + } = senderInfo; if (!providedSignature && privateKey === null) { - throw new Error('Missing private key or signature') + throw new Error('Missing private key or signature'); } - let dt, signature + let dt, signature; if (providedSignature) { if (!senderInfo.dt) { - throw new Error('missing datetime for given signature') + throw new Error('missing datetime for given signature'); } - dt = senderInfo.dt - signature = providedSignature + dt = senderInfo.dt; + signature = providedSignature; } else { - dt = this.clock.now() + dt = this.clock.now(); signature = VerifiableMessage.forBasicAddressResolution({ senderHandle, amount, dt, purpose - }).sign(privateKey) + }).sign(privateKey); } return { @@ -377,92 +382,96 @@ class RequestBodyFactory { amount: amount || null, pubkey, signature - } + }; } - buildBodySendTx (hexTransaction, reference, metadata) { + buildBodySendTx(hexTransaction, reference, metadata) { return { hex: hexTransaction, metadata, reference - } + }; } - buildBodyP2pPaymentDestination (satoshis) { + buildBodyP2pPaymentDestination(satoshis) { return { satoshis - } + }; } + } class Clock { - now () { - return moment__default.default() + now() { + return moment__default['default'](); } + } class PaymailNotFound extends Error { - constructor (message, paymail) { - super(message) - this.paymail = paymail + constructor(message, paymail) { + super(message); + this.paymail = paymail; } + } class BrowserDns { - constructor (fetch) { + constructor(fetch) { this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - }) + }); } - async resolveSrv (aDomain, aCallback) { + async resolveSrv(aDomain, aCallback) { try { - const response = await this.doh.resolveSrv(aDomain) + const response = await this.doh.resolveSrv(aDomain); if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { - const [priority, weight, port, name] = record.data.split(' ') + const [priority, weight, port, name] = record.data.split(' '); return { priority, weight, port, name, isSecure: response.AD - } - }) - aCallback(null, data) + }; + }); + aCallback(null, data); } else if (!response.Answer) { // ignore check response.Status === 0 aCallback({ code: 'ENODATA' - }) + }); } else { - aCallback(new Error('error during dns query')) + aCallback(new Error('error during dns query')); } } catch (e) { - aCallback(e) + aCallback(e); } } + } class PaymailClient { - constructor (dns = null, fetch2 = null, clock = null, bsv = null) { + constructor(dns = null, fetch2 = null, clock = null, bsv = null) { if (fetch2 === null) { - fetch2 = fetch__default.default + fetch2 = fetch__default['default']; } if (dns === null) { - dns = new BrowserDns(fetch2) + dns = new BrowserDns(fetch2); } if (bsv === null) { - bsv = require('bsv') + bsv = require('bsv'); } - this.bsv = bsv - this.resolver = new EndpointResolver(dns, fetch2) - this.http = new Http(fetch2) - this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()) + this.bsv = bsv; + this.resolver = new EndpointResolver(dns, fetch2); + this.http = new Http(fetch2); + this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); } /** * Uses pki flow to query for an identity key for a given paymail address. @@ -470,13 +479,14 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - async getPublicKey (paymail) { - const identityUrl = await this.resolver.getIdentityUrlFor(paymail) - const response = await this.http.get(identityUrl) + + async getPublicKey(paymail) { + const identityUrl = await this.resolver.getIdentityUrlFor(paymail); + const response = await this.http.get(identityUrl); const { pubkey - } = await response.json() - return pubkey + } = await response.json(); + return pubkey; } /** * Uses `Basic Address Resolution` flow to query for a payment for output for the @@ -493,18 +503,19 @@ class PaymailClient { * @param {String} privateKey - Optional. private key to sign the request. */ - async getOutputFor (aPaymail, senderInfo, privateKey = null) { - const addressUrl = await this.resolver.getAddressUrlFor(aPaymail) - const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)) + + async getOutputFor(aPaymail, senderInfo, privateKey = null) { + const addressUrl = await this.resolver.getAddressUrlFor(aPaymail); + const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)); if (!response.ok) { - throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail) + throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail); } const { output - } = await response.json() - return output + } = await response.json(); + return output; } /** * Verify if the given public address belongs to the given @@ -514,14 +525,15 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - async verifyPubkeyOwner (pubkey, paymail) { - const url = await this.resolver.getVerifyUrlFor(paymail, pubkey) - const response = await this.http.get(url) - const body = await response.json() + + async verifyPubkeyOwner(pubkey, paymail) { + const url = await this.resolver.getVerifyUrlFor(paymail, pubkey); + const response = await this.http.get(url); + const body = await response.json(); const { match - } = body - return match + } = body; + return match; } /** * Verifies if a given signature is valid for a given message. It uses @@ -538,39 +550,40 @@ class PaymailClient { * @param {String} pubkey - Optional. Public key that validates the signature. */ - async isValidSignature (message, signature, paymail = null, pubkey = null) { + + async isValidSignature(message, signature, paymail = null, pubkey = null) { if (paymail == null && pubkey === null) { - throw new Error('Must specify either paymail or pubkey') + throw new Error('Must specify either paymail or pubkey'); } - let senderPublicKey + let senderPublicKey; if (paymail) { if (pubkey && (await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner))) { if (await this.verifyPubkeyOwner(pubkey, paymail)) { - senderPublicKey = this.bsv.PublicKey.fromString(pubkey) + senderPublicKey = this.bsv.PublicKey.fromString(pubkey); } else { - return false + return false; } } else { - const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki) + const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki); if (hasPki) { - const identityKey = await this.getPublicKey(paymail) - senderPublicKey = this.bsv.PublicKey.fromString(identityKey) + const identityKey = await this.getPublicKey(paymail); + senderPublicKey = this.bsv.PublicKey.fromString(identityKey); } else { - return false + return false; } } } - const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey) + const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey); try { - const verified = message.verify(senderKeyAddress.toString(), signature) - return verified + const verified = message.verify(senderKeyAddress.toString(), signature); + return verified; } catch (err) { - return false + return false; } } /** @@ -580,69 +593,71 @@ class PaymailClient { * @param {String} s - the preferred size of the image */ - async getPublicProfile (paymail) { - const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail) - const response = await this.http.get(publicProfileUrl) + + async getPublicProfile(paymail) { + const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail); + const response = await this.http.get(publicProfileUrl); if (!response.ok) { - const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); } const { avatar, name - } = await response.json() + } = await response.json(); return { avatar, name - } + }; } - async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) { + async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { if (!hexTransaction) { - throw new Error('transaction hex cannot be empty') + throw new Error('transaction hex cannot be empty'); } - const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail) - const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)) + const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail); + const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)); if (!response.ok) { - const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); } - return response.json() + return response.json(); } - async getP2pPaymentDestination (targetPaymail, satoshis) { + async getP2pPaymentDestination(targetPaymail, satoshis) { if (!satoshis) { - throw new Error('Amount in satohis needs to be specified') + throw new Error('Amount in satohis needs to be specified'); } - const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail) - const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)) + const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail); + const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)); if (!response.ok) { - const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); } - const body = await response.json() + const body = await response.json(); if (!body.outputs) { - throw new Error('Server answered with a wrong format. Missing outputs') + throw new Error('Server answered with a wrong format. Missing outputs'); } - return body + return body; } + } -exports.BrowserDns = BrowserDns -exports.CapabilityCodes = CapabilityCodes -exports.Clock = Clock -exports.PaymailClient = PaymailClient -exports.PaymailNotFound = PaymailNotFound -exports.RequestBodyFactory = RequestBodyFactory -exports.VerifiableMessage = VerifiableMessage -// # sourceMappingURL=paymail-client.cjs.js.map +exports.BrowserDns = BrowserDns; +exports.CapabilityCodes = CapabilityCodes; +exports.Clock = Clock; +exports.PaymailClient = PaymailClient; +exports.PaymailNotFound = PaymailNotFound; +exports.RequestBodyFactory = RequestBodyFactory; +exports.VerifiableMessage = VerifiableMessage; +//# sourceMappingURL=paymail-client.cjs.js.map diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index 534fd0e..2cef2db 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port===undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index 514ddc5..5314194 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -1,9 +1,9 @@ -import { brfc } from '@moneybutton/brfc' -import _defineProperty from '@babel/runtime/helpers/defineProperty' -import 'abort-controller/polyfill' -import AbortController from 'abort-controller' -import moment from 'moment' -import fetch from 'cross-fetch' +import { brfc } from '@moneybutton/brfc'; +import _defineProperty from '@babel/runtime/helpers/defineProperty'; +import 'abort-controller/polyfill'; +import AbortController from 'abort-controller'; +import moment from 'moment'; +import fetch from 'cross-fetch'; const CapabilityCodes = { pki: 'pki', @@ -13,16 +13,16 @@ const CapabilityCodes = { publicProfile: brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), receiveTransaction: brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), p2pPaymentDestination: brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') -} +}; // import { DnsOverHttps } from "./dns-over-https" class DnsClient { - constructor (dns, doh) { - this.dns = dns - this.doh = doh + constructor(dns, doh) { + this.dns = dns; + this.doh = doh; } - async checkSrv (aDomain) { + async checkSrv(aDomain) { return new Promise((resolve, reject) => { this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { try { @@ -31,301 +31,306 @@ class DnsClient { domain: aDomain, port: 443, isSecure: true - }) + }); } if (err) { - return reject(err) + return reject(err); } const { name: domainFromDns, port, isSecure - } = result[0] + } = result[0]; resolve({ domain: domainFromDns, port, isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure - }) + }); } catch (err) { - return reject(err) + return reject(err); } - }) + }); }).then(result => { if (result.isSecure) { - return result + return result; } else { - return this.validateDnssec(aDomain) + return this.validateDnssec(aDomain); } }, err => { - console.error(err) - return err - }) + console.error(err); + return err; + }); } - checkDomainIsSecure (srvResponseDomain, originalDomain) { + checkDomainIsSecure(srvResponseDomain, originalDomain) { if (this.domainsAreEqual(srvResponseDomain, originalDomain)) { - return true + return true; } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) { - return true + return true; } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :) - return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain) + return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain); } else if (this.isHandcashInternalDomain(originalDomain)) { - return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain) + return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain); } else if (this.domainsAreEqual('localhost', srvResponseDomain)) { - return true + return true; } else if (this.isMoneyButtonDomain(srvResponseDomain)) { - return true + return true; } else { - return false + return false; } } - isMoneyButtonDomain (aDomain) { - return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com') + isMoneyButtonDomain(aDomain) { + return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com'); } - responseIsWwwSubdomain (srvResponseDomain, originalDomain) { - return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`) + responseIsWwwSubdomain(srvResponseDomain, originalDomain) { + return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`); } - isHandcashDomain (aDomain) { - return this.domainsAreEqual('handcash.io', aDomain) + isHandcashDomain(aDomain) { + return this.domainsAreEqual('handcash.io', aDomain); } - isHandcashInternalDomain (aDomain) { - return this.domainsAreEqual('internal.handcash.io', aDomain) + isHandcashInternalDomain(aDomain) { + return this.domainsAreEqual('internal.handcash.io', aDomain); } - async validateDnssec (aDomain) { - const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain) + async validateDnssec(aDomain) { + const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { - throw new Error('Insecure domain.') + throw new Error('Insecure domain.'); } - const data = dnsResponse.Answer[0].data.split(' ') - const port = data[2] - const responseDomain = data[3] + const data = dnsResponse.Answer[0].data.split(' '); + const port = data[2]; + const responseDomain = data[3]; if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) { - throw new Error('Insecure domain.') + throw new Error('Insecure domain.'); } return { port, domain: responseDomain, isSecure: dnsResponse.AD - } + }; } - domainsAreEqual (domain1, domain2) { - return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, '') + domainsAreEqual(domain1, domain2) { + return domain1.toLowerCase().replace(/\.$/, '') === domain2.toLowerCase().replace(/\.$/, ''); } + } class DnsOverHttps { - constructor (fetch, config) { - this.fetch = fetch - this.config = config + constructor(fetch, config) { + this.fetch = fetch; + this.config = config; } - async resolveSrv (aDomain) { - const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`) - const body = await response.json() - return body + async resolveSrv(aDomain) { + const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); + const body = await response.json(); + return body; } - async queryBsvaliasDomain (aDomain) { - return this.resolveSrv(`_bsvalias._tcp.${aDomain}`) + async queryBsvaliasDomain(aDomain) { + return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); } + } -function ownKeys (object, enumerableOnly) { const keys = Object.keys(object); if (Object.getOwnPropertySymbols) { let symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable }) } keys.push.apply(keys, symbols) } return keys } +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } -function _objectSpread (target) { for (let i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]) }) } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)) }) } } return target } +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } class Http { - constructor (fetch) { - this.fetch = fetch + constructor(fetch) { + this.fetch = fetch; } - async get (url) { - return this._basicRequest(url) + async get(url) { + return this._basicRequest(url); } - async postJson (url, body) { + async postJson(url, body) { return this._basicRequest(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) - }) + }); } - async _basicRequest (url, options = {}) { - const controller = new AbortController() - const timer = setTimeout(() => controller.abort(), 30000) + async _basicRequest(url, options = {}) { + const controller = new AbortController(); + const timer = setTimeout(() => controller.abort(), 30000); return this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { credentials: 'omit', signal: controller.signal })).then(result => { - clearTimeout(timer) - return result - }) + clearTimeout(timer); + return result; + }); } + } class EndpointResolver { - constructor (dns = null, fetch) { + constructor(dns = null, fetch) { this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - })) - this.http = new Http(fetch) - this._cache = {} + })); + this.http = new Http(fetch); + this._cache = {}; } - static create (dnsClient, fetch) { - const instance = new EndpointResolver(null, fetch) - instance.dnsClient = dnsClient - return instance + static create(dnsClient, fetch) { + const instance = new EndpointResolver(null, fetch); + instance.dnsClient = dnsClient; + return instance; } - async getIdentityUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.pki) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain) - return identityUrl + async getIdentityUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.pki); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const identityUrl = apiDescriptor.capabilities.pki.replace('{alias}', alias).replace('{domain.tld}', domain); + return identityUrl; } - async getAddressUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain) - return addressUrl + async getAddressUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const addressUrl = apiDescriptor.capabilities.paymentDestination.replace('{alias}', alias).replace('{domain.tld}', domain); + return addressUrl; } - async getVerifyUrlFor (aPaymail, aPubkey) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey) - return url + async getVerifyUrlFor(aPaymail, aPubkey) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner].replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey); + return url; } - async getPublicProfileUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain) - return url + async getPublicProfileUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; } - async getSendTxUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain) - return url + async getSendTxUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; } - async getP2pPatmentDestinationUrlFor (aPaymail) { - const [alias, domain] = aPaymail.split('@') - await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination) - const apiDescriptor = await this.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain) - return url + async getP2pPatmentDestinationUrlFor(aPaymail) { + const [alias, domain] = aPaymail.split('@'); + await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination); + const apiDescriptor = await this.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination].replace('{alias}', alias).replace('{domain.tld}', domain); + return url; } - async domainHasCapability (aDomain, capability) { - const apiDescriptor = await this.getApiDescriptionFor(aDomain) - return !!apiDescriptor.capabilities[capability] + async domainHasCapability(aDomain, capability) { + const apiDescriptor = await this.getApiDescriptionFor(aDomain); + return !!apiDescriptor.capabilities[capability]; } - async getApiDescriptionFor (aDomain) { + async getApiDescriptionFor(aDomain) { if (this._cache[aDomain]) { - return this._cache[aDomain] + return this._cache[aDomain]; } const { domain, port - } = await this.getWellKnownBaseUrl(aDomain) - const apiDescriptor = this.fetchApiDescriptor(domain, port) - this._cache[aDomain] = apiDescriptor - return apiDescriptor + } = await this.getWellKnownBaseUrl(aDomain); + const apiDescriptor = this.fetchApiDescriptor(domain, port); + this._cache[aDomain] = apiDescriptor; + return apiDescriptor; } - async fetchApiDescriptor (domain, port) { - const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https' - const requestPort = port === undefined || port.toString() === '443' ? '' : `:${port}` - const requestDomain = /^(.*?)\.?$/.exec(domain)[1] // Get value from capture group + async fetchApiDescriptor(domain, port) { + const protocol = domain === 'localhost' || domain === 'localhost.' ? 'http' : 'https'; + const requestPort = port === undefined || port.toString() === '443' ? '' : `:${port}`; + const requestDomain = /^(.*?)\.?$/.exec(domain)[1]; // Get value from capture group if (!requestDomain) { - throw new Error(`Invalid domain: ${domain}`) + throw new Error(`Invalid domain: ${domain}`); } - const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`) - const apiDescriptor = await wellKnown.json() - return apiDescriptor + const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`); + const apiDescriptor = await wellKnown.json(); + return apiDescriptor; } - async getWellKnownBaseUrl (aDomain) { - return this.dnsClient.checkSrv(aDomain) + async getWellKnownBaseUrl(aDomain) { + return this.dnsClient.checkSrv(aDomain); } - async ensureCapabilityFor (aDomain, aCapability) { + async ensureCapabilityFor(aDomain, aCapability) { if (!(await this.domainHasCapability(aDomain, aCapability))) { - throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`) + throw new Error(`Unknown capability "${aCapability}" for "${aDomain}"`); } } + } class VerifiableMessage { - constructor (parts, bsv = null) { + constructor(parts, bsv = null) { if (bsv === null) { - bsv = require('bsv') - bsv.Message = require('bsv/message') + bsv = require('bsv'); + bsv.Message = require('bsv/message'); } - this.bsv = bsv - const concatenated = Buffer.from(parts.join('')) - this.message = new this.bsv.Message(concatenated) + this.bsv = bsv; + const concatenated = Buffer.from(parts.join('')); + this.message = new this.bsv.Message(concatenated); } - static forBasicAddressResolution ({ + static forBasicAddressResolution({ senderHandle, amount, dt, purpose }) { if (dt.toISOString) { - dt = dt.toISOString() + dt = dt.toISOString(); } - return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]) + return new VerifiableMessage([senderHandle, amount || '0', dt, purpose]); } - sign (wifPrivateKey) { - return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)) + sign(wifPrivateKey) { + return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey)); } - verify (keyAddress, signature) { - return this.message.verify(keyAddress, signature) + verify(keyAddress, signature) { + return this.message.verify(keyAddress, signature); } + } class RequestBodyFactory { - constructor (clock) { - this.clock = clock + constructor(clock) { + this.clock = clock; } - buildBodyToRequestAddress (senderInfo, privateKey = null) { + buildBodyToRequestAddress(senderInfo, privateKey = null) { const { senderHandle, amount, @@ -333,29 +338,29 @@ class RequestBodyFactory { purpose, pubkey, signature: providedSignature - } = senderInfo + } = senderInfo; if (!providedSignature && privateKey === null) { - throw new Error('Missing private key or signature') + throw new Error('Missing private key or signature'); } - let dt, signature + let dt, signature; if (providedSignature) { if (!senderInfo.dt) { - throw new Error('missing datetime for given signature') + throw new Error('missing datetime for given signature'); } - dt = senderInfo.dt - signature = providedSignature + dt = senderInfo.dt; + signature = providedSignature; } else { - dt = this.clock.now() + dt = this.clock.now(); signature = VerifiableMessage.forBasicAddressResolution({ senderHandle, amount, dt, purpose - }).sign(privateKey) + }).sign(privateKey); } return { @@ -366,92 +371,96 @@ class RequestBodyFactory { amount: amount || null, pubkey, signature - } + }; } - buildBodySendTx (hexTransaction, reference, metadata) { + buildBodySendTx(hexTransaction, reference, metadata) { return { hex: hexTransaction, metadata, reference - } + }; } - buildBodyP2pPaymentDestination (satoshis) { + buildBodyP2pPaymentDestination(satoshis) { return { satoshis - } + }; } + } class Clock { - now () { - return moment() + now() { + return moment(); } + } class PaymailNotFound extends Error { - constructor (message, paymail) { - super(message) - this.paymail = paymail + constructor(message, paymail) { + super(message); + this.paymail = paymail; } + } class BrowserDns { - constructor (fetch) { + constructor(fetch) { this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' - }) + }); } - async resolveSrv (aDomain, aCallback) { + async resolveSrv(aDomain, aCallback) { try { - const response = await this.doh.resolveSrv(aDomain) + const response = await this.doh.resolveSrv(aDomain); if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { - const [priority, weight, port, name] = record.data.split(' ') + const [priority, weight, port, name] = record.data.split(' '); return { priority, weight, port, name, isSecure: response.AD - } - }) - aCallback(null, data) + }; + }); + aCallback(null, data); } else if (!response.Answer) { // ignore check response.Status === 0 aCallback({ code: 'ENODATA' - }) + }); } else { - aCallback(new Error('error during dns query')) + aCallback(new Error('error during dns query')); } } catch (e) { - aCallback(e) + aCallback(e); } } + } class PaymailClient { - constructor (dns = null, fetch2 = null, clock = null, bsv = null) { + constructor(dns = null, fetch2 = null, clock = null, bsv = null) { if (fetch2 === null) { - fetch2 = fetch + fetch2 = fetch; } if (dns === null) { - dns = new BrowserDns(fetch2) + dns = new BrowserDns(fetch2); } if (bsv === null) { - bsv = require('bsv') + bsv = require('bsv'); } - this.bsv = bsv - this.resolver = new EndpointResolver(dns, fetch2) - this.http = new Http(fetch2) - this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()) + this.bsv = bsv; + this.resolver = new EndpointResolver(dns, fetch2); + this.http = new Http(fetch2); + this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); } /** * Uses pki flow to query for an identity key for a given paymail address. @@ -459,13 +468,14 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - async getPublicKey (paymail) { - const identityUrl = await this.resolver.getIdentityUrlFor(paymail) - const response = await this.http.get(identityUrl) + + async getPublicKey(paymail) { + const identityUrl = await this.resolver.getIdentityUrlFor(paymail); + const response = await this.http.get(identityUrl); const { pubkey - } = await response.json() - return pubkey + } = await response.json(); + return pubkey; } /** * Uses `Basic Address Resolution` flow to query for a payment for output for the @@ -482,18 +492,19 @@ class PaymailClient { * @param {String} privateKey - Optional. private key to sign the request. */ - async getOutputFor (aPaymail, senderInfo, privateKey = null) { - const addressUrl = await this.resolver.getAddressUrlFor(aPaymail) - const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)) + + async getOutputFor(aPaymail, senderInfo, privateKey = null) { + const addressUrl = await this.resolver.getAddressUrlFor(aPaymail); + const response = await this.http.postJson(addressUrl, this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)); if (!response.ok) { - throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail) + throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail); } const { output - } = await response.json() - return output + } = await response.json(); + return output; } /** * Verify if the given public address belongs to the given @@ -503,14 +514,15 @@ class PaymailClient { * @param {String} paymail - a paymail address */ - async verifyPubkeyOwner (pubkey, paymail) { - const url = await this.resolver.getVerifyUrlFor(paymail, pubkey) - const response = await this.http.get(url) - const body = await response.json() + + async verifyPubkeyOwner(pubkey, paymail) { + const url = await this.resolver.getVerifyUrlFor(paymail, pubkey); + const response = await this.http.get(url); + const body = await response.json(); const { match - } = body - return match + } = body; + return match; } /** * Verifies if a given signature is valid for a given message. It uses @@ -527,39 +539,40 @@ class PaymailClient { * @param {String} pubkey - Optional. Public key that validates the signature. */ - async isValidSignature (message, signature, paymail = null, pubkey = null) { + + async isValidSignature(message, signature, paymail = null, pubkey = null) { if (paymail == null && pubkey === null) { - throw new Error('Must specify either paymail or pubkey') + throw new Error('Must specify either paymail or pubkey'); } - let senderPublicKey + let senderPublicKey; if (paymail) { if (pubkey && (await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner))) { if (await this.verifyPubkeyOwner(pubkey, paymail)) { - senderPublicKey = this.bsv.PublicKey.fromString(pubkey) + senderPublicKey = this.bsv.PublicKey.fromString(pubkey); } else { - return false + return false; } } else { - const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki) + const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki); if (hasPki) { - const identityKey = await this.getPublicKey(paymail) - senderPublicKey = this.bsv.PublicKey.fromString(identityKey) + const identityKey = await this.getPublicKey(paymail); + senderPublicKey = this.bsv.PublicKey.fromString(identityKey); } else { - return false + return false; } } } - const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey) + const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey); try { - const verified = message.verify(senderKeyAddress.toString(), signature) - return verified + const verified = message.verify(senderKeyAddress.toString(), signature); + return verified; } catch (err) { - return false + return false; } } /** @@ -569,63 +582,65 @@ class PaymailClient { * @param {String} s - the preferred size of the image */ - async getPublicProfile (paymail) { - const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail) - const response = await this.http.get(publicProfileUrl) + + async getPublicProfile(paymail) { + const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail); + const response = await this.http.get(publicProfileUrl); if (!response.ok) { - const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); } const { avatar, name - } = await response.json() + } = await response.json(); return { avatar, name - } + }; } - async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) { + async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { if (!hexTransaction) { - throw new Error('transaction hex cannot be empty') + throw new Error('transaction hex cannot be empty'); } - const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail) - const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)) + const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail); + const response = await this.http.postJson(receiveTxUrl, this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)); if (!response.ok) { - const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); } - return response.json() + return response.json(); } - async getP2pPaymentDestination (targetPaymail, satoshis) { + async getP2pPaymentDestination(targetPaymail, satoshis) { if (!satoshis) { - throw new Error('Amount in satohis needs to be specified') + throw new Error('Amount in satohis needs to be specified'); } - const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail) - const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)) + const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail); + const response = await this.http.postJson(paymentDestinationUrl, this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)); if (!response.ok) { - const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + const body = await response.json(); + throw new Error(`Server failed with: ${JSON.stringify(body)}`); } - const body = await response.json() + const body = await response.json(); if (!body.outputs) { - throw new Error('Server answered with a wrong format. Missing outputs') + throw new Error('Server answered with a wrong format. Missing outputs'); } - return body + return body; } + } -export { BrowserDns, CapabilityCodes, Clock, PaymailClient, PaymailNotFound, RequestBodyFactory, VerifiableMessage } -// # sourceMappingURL=paymail-client.esm.js.map +export { BrowserDns, CapabilityCodes, Clock, PaymailClient, PaymailNotFound, RequestBodyFactory, VerifiableMessage }; +//# sourceMappingURL=paymail-client.esm.js.map diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 95ec31f..984120a 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port===undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 02663a1..868592c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,20 +9,20 @@ "version": "0.38.3", "license": "Open-BSV", "dependencies": { - "@babel/runtime": "7.14.0", - "@moneybutton/brfc": "github:baryon/brfc", + "@babel/runtime": "7.14.6", + "@moneybutton/brfc": "github:chainbow/brfc", "abort-controller": "3.0.0", "bsv": "^1.5.5", "cross-fetch": "^3.1.4", "moment": "^2.24.0" }, "devDependencies": { - "@babel/cli": "7.14.3", - "@babel/core": "7.14.3", - "@babel/plugin-proposal-object-rest-spread": "7.14.2", - "@babel/plugin-transform-runtime": "7.14.3", + "@babel/cli": "7.14.5", + "@babel/core": "7.14.6", + "@babel/plugin-proposal-object-rest-spread": "7.14.7", + "@babel/plugin-transform-runtime": "7.14.5", "@babel/polyfill": "^7.10.4", - "@babel/preset-env": "7.14.2", + "@babel/preset-env": "7.14.7", "@babel/register": "^7.10.5", "@rollup/plugin-commonjs": "19.0.0", "@rollup/plugin-node-resolve": "13.0.0", @@ -32,19 +32,21 @@ "chai": "4.3.4", "dotenv-cli": "4.0.0", "http-server": "0.12.3", - "mocha": "8.4.0", - "rollup": "2.48.0", + "mocha": "9.0.2", + "mocha-define": "^0.2.0", + "rollup": "2.53.0", "rollup-plugin-babel": "4.4.0", "rollup-plugin-node-builtins": "2.1.2", "rollup-plugin-node-globals": "1.4.0", "should": "13.2.3", - "standard": "16.0.3" + "standard": "16.0.3", + "ts-node": "^10.1.0" } }, "node_modules/@babel/cli": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.3.tgz", - "integrity": "sha512-zU4JLvwk32ay1lhhyGfqiRUSPoltVDjhYkA3aQq8+Yby9z30s/EsFw1EPOHxWG9YZo2pAGfgdRNeHZQAYU5m9A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.5.tgz", + "integrity": "sha512-poegjhRvXHWO0EAsnYajwYZuqcz7gyfxwfaecUESxDujrqOivf3zrjFbub8IJkrqEaz3fvJWh001EzxBub54fg==", "dev": true, "dependencies": { "commander": "^4.0.1", @@ -59,8 +61,11 @@ "babel": "bin/babel.js", "babel-external-helpers": "bin/babel-external-helpers.js" }, + "engines": { + "node": ">=6.9.0" + }, "optionalDependencies": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.2", "chokidar": "^3.4.0" }, "peerDependencies": { @@ -68,35 +73,41 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", - "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", - "dev": true + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -113,76 +124,94 @@ } }, "node_modules/@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "dev": true, "dependencies": { - "@babel/types": "^7.14.2", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", "dev": true, "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", - "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-validator-option": "^7.12.17", + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz", - "integrity": "sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.14.4", - "@babel/helper-split-export-declaration": "^7.12.13" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", - "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-annotate-as-pure": "^7.14.5", "regexpu-core": "^4.7.1" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0" } @@ -207,193 +236,249 @@ } }, "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", "dev": true, "dependencies": { - "@babel/types": "^7.13.0" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dev": true, "dependencies": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", - "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.4" + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", "dev": true, "dependencies": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", "dev": true, "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", - "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -403,217 +488,262 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", - "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", + "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", "@babel/plugin-syntax-async-generators": "^7.8.4" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", - "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", + "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.3", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", - "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", - "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", - "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-json-strings": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", - "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", - "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", - "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", - "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.2" + "@babel/plugin-transform-parameters": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", - "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", - "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=4" @@ -647,12 +777,15 @@ } }, "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -767,449 +900,555 @@ } }, "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz", - "integrity": "sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz", - "integrity": "sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.14.4", - "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", "globals": "^11.1.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz", - "integrity": "sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", - "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", + "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", - "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", "dev": true, "dependencies": { "regenerator-transform": "^0.14.2" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", - "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", + "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -1227,34 +1466,34 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz", - "integrity": "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.14.2", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.13.11", - "@babel/plugin-proposal-dynamic-import": "^7.14.2", - "@babel/plugin-proposal-export-namespace-from": "^7.14.2", - "@babel/plugin-proposal-json-strings": "^7.14.2", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", - "@babel/plugin-proposal-numeric-separator": "^7.14.2", - "@babel/plugin-proposal-object-rest-spread": "^7.14.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", - "@babel/plugin-proposal-optional-chaining": "^7.14.2", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", + "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-async-generator-functions": "^7.14.7", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", @@ -1264,48 +1503,51 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.14.2", - "@babel/plugin-transform-classes": "^7.14.2", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.17", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.2", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.14.2", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.5", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.14.6", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.2", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", + "@babel/types": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.15.0", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } @@ -1327,9 +1569,9 @@ } }, "node_modules/@babel/register": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", - "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.14.5.tgz", + "integrity": "sha512-TjJpGz/aDjFGWsItRBQMOFTrmTI9tr79CHOK+KIvLeCkbxuOAk2M5QHjvruIMGoo9OuccMh5euplPzc5FjAKGg==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", @@ -1338,66 +1580,82 @@ "pirates": "^4.0.0", "source-map-support": "^0.5.16" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", "dependencies": { "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", "dev": true, "peer": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", @@ -1409,13 +1667,13 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "peer": true, "dependencies": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -1424,25 +1682,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "peer": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true, + "peer": true + }, "node_modules/@moneybutton/brfc": { "version": "0.38.3", - "resolved": "git+ssh://git@github.com/baryon/brfc.git#aba3a22013ebbe41be7ec27e8de34b7b6a948135", + "resolved": "git+ssh://git@github.com/chainbow/brfc.git#aba3a22013ebbe41be7ec27e8de34b7b6a948135", "license": "Open-BSV", "peerDependencies": { "bsv": "^1.5.5" } }, "node_modules/@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz", - "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==", + "version": "2.1.8-no-fsevents.2", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.2.tgz", + "integrity": "sha512-Fb8WxUFOBQVl+CX4MWet5o7eCc6Pj04rXIwVKZ6h1NnqTo45eOQW6aWyhG25NIODvWFwTDMwBsYxrQ3imxpetg==", "dev": true, "optional": true, "dependencies": { "anymatch": "^2.0.0", "async-each": "^1.0.1", "braces": "^2.3.2", - "glob-parent": "^3.1.0", + "glob-parent": "^5.1.2", "inherits": "^2.0.3", "is-binary-path": "^1.0.0", "is-glob": "^4.0.0", @@ -1529,22 +1809,40 @@ "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", "dev": true }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz", + "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", + "dev": true + }, "node_modules/@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, "node_modules/@types/node": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.1.tgz", - "integrity": "sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.3.1.tgz", + "integrity": "sha512-N87VuQi7HEeRJkhzovao/JviiqKjDKMVKxKMfUvSKw+MbkbW8R0nA3fi/MQhhlxV2fQ+2ReM+/Nt4efdrJx3zA==", "dev": true }, "node_modules/@types/resolve": { @@ -1604,9 +1902,9 @@ } }, "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -1687,6 +1985,12 @@ "node": ">=0.10.0" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1905,13 +2209,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz", - "integrity": "sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", + "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.9.1" + "core-js-compat": "^3.14.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -2339,9 +2643,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "version": "1.0.30001243", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz", + "integrity": "sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA==", "dev": true, "funding": { "type": "opencollective", @@ -2389,24 +2693,24 @@ } }, "node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "dependencies": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "glob-parent": "~5.1.0", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { - "fsevents": "~2.3.1" + "fsevents": "~2.3.2" } }, "node_modules/chokidar/node_modules/anymatch": { @@ -2455,18 +2759,6 @@ "node": ">=8" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/chokidar/node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2489,9 +2781,9 @@ } }, "node_modules/chokidar/node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { "picomatch": "^2.2.1" @@ -2758,9 +3050,9 @@ } }, "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "dependencies": { "safe-buffer": "~5.1.1" @@ -2791,9 +3083,9 @@ "hasInstallScript": true }, "node_modules/core-js-compat": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.13.1.tgz", - "integrity": "sha512-mdrcxc0WznfRd8ZicEZh1qVeJ2mu6bwQFh8YVUK48friy/FOwFV5EJj9/dlh+nMQ74YusdVfBFDuomKgUspxWQ==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", + "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", "dev": true, "dependencies": { "browserslist": "^4.16.6", @@ -2865,6 +3157,12 @@ "sha.js": "^2.4.8" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-fetch": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", @@ -2910,9 +3208,9 @@ } }, "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -3098,9 +3396,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.3.742", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz", - "integrity": "sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q==", + "version": "1.3.772", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.772.tgz", + "integrity": "sha512-X/6VRCXWALzdX+RjCtBU6cyg8WZgoxm9YA02COmDOiNJEZ59WkQggDbWZ4t/giHi/3GS+cvdrP6gbLISANAGYA==", "dev": true }, "node_modules/elliptic": { @@ -3222,14 +3520,15 @@ } }, "node_modules/eslint": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz", - "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==", + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", + "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", "dev": true, "peer": true, "dependencies": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", + "@eslint/eslintrc": "^0.4.2", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3246,7 +3545,7 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", @@ -3717,23 +4016,10 @@ "node": ">=10" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "peer": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/eslint/node_modules/globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "peer": true, "dependencies": { @@ -3785,19 +4071,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", @@ -4188,9 +4461,9 @@ } }, "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", + "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", "dev": true, "peer": true }, @@ -4398,27 +4671,15 @@ } }, "node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "optional": true, "dependencies": { - "is-extglob": "^2.1.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, "node_modules/globals": { @@ -5015,6 +5276,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -5439,15 +5712,19 @@ "peer": true }, "node_modules/log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { - "chalk": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-symbols/node_modules/ansi-styles": { @@ -5581,6 +5858,12 @@ "semver": "bin/semver" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -5760,33 +6043,33 @@ } }, "node_modules/mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.2.tgz", + "integrity": "sha512-FpspiWU+UT9Sixx/wKimvnpkeW0mh6ROAKkIaPokj3xZgxeRhcna/k5X57jJghEr8X+Cgu/Vegf8zCX5ugSuTA==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.5.1", + "chokidar": "3.5.2", "debug": "4.3.1", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.1.6", + "glob": "7.1.7", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", "minimatch": "3.0.4", "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", + "nanoid": "3.1.23", + "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", "wide-align": "1.1.3", - "workerpool": "6.1.0", + "workerpool": "6.1.5", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" @@ -5796,19 +6079,48 @@ "mocha": "bin/mocha" }, "engines": { - "node": ">= 10.12.0" + "node": ">= 12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mochajs" } }, + "node_modules/mocha-define": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/mocha-define/-/mocha-define-0.2.0.tgz", + "integrity": "sha1-b3GITK4m7twOnsuet6Xn91xrtCY=", + "dev": true + }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -5821,26 +6133,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -5851,9 +6143,9 @@ } }, "node_modules/mocha/node_modules/js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { "argparse": "^2.0.1" @@ -5898,9 +6190,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -5983,9 +6275,9 @@ } }, "node_modules/node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", "dev": true }, "node_modules/normalize-package-data": { @@ -6357,13 +6649,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true, - "optional": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -7033,9 +7318,9 @@ } }, "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "engines": { "node": ">=8" @@ -7207,9 +7492,9 @@ } }, "node_modules/rollup": { - "version": "2.48.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.48.0.tgz", - "integrity": "sha512-wl9ZSSSsi5579oscSDYSzGn092tCS076YB+TQrzsGuSfYyJeep8eEWj0eaRjuC5McuMNmcnR8icBqiE/FWNB1A==", + "version": "2.53.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.53.0.tgz", + "integrity": "sha512-spgrY78Toh+m0+zaOoeaayJKuzFuWy6o1PdFIBMVwRcuxT0xCOX9A5rChyKe+2ruL4lePKWUMImS4mMW1QAkmQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -7218,7 +7503,7 @@ "node": ">=10.0.0" }, "optionalDependencies": { - "fsevents": "~2.3.1" + "fsevents": "~2.3.2" } }, "node_modules/rollup-plugin-babel": { @@ -7355,9 +7640,9 @@ } }, "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -8123,18 +8408,6 @@ "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, - "node_modules/standard/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/standard/node_modules/globals": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", @@ -8289,6 +8562,15 @@ "node": ">=6.0.0" } }, + "node_modules/standard/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -8537,9 +8819,9 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", - "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", + "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", "dev": true, "peer": true, "dependencies": { @@ -8658,28 +8940,66 @@ "node": ">=0.10.0" } }, - "node_modules/tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "node_modules/ts-node": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.1.0.tgz", + "integrity": "sha512-6szn3+J9WyG2hE+5W8e0ruZrzyk1uFLYye6IGMBadnOzDh8aP7t8CbFpsfCiEx2+wMixAhjFt7lOZC4+l+WbEA==", "dev": true, "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz", + "integrity": "sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q==", + "dev": true, + "dependencies": { + "json5": "^2.2.0", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" } }, "node_modules/type-check": { @@ -8704,12 +9024,16 @@ } }, "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/typedarray": { @@ -8724,6 +9048,20 @@ "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=", "dev": true }, + "node_modules/typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -9032,9 +9370,9 @@ } }, "node_modules/workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", "dev": true }, "node_modules/wrap-ansi": { @@ -9180,6 +9518,15 @@ "node": ">=10" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -9195,12 +9542,12 @@ }, "dependencies": { "@babel/cli": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.3.tgz", - "integrity": "sha512-zU4JLvwk32ay1lhhyGfqiRUSPoltVDjhYkA3aQq8+Yby9z30s/EsFw1EPOHxWG9YZo2pAGfgdRNeHZQAYU5m9A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.5.tgz", + "integrity": "sha512-poegjhRvXHWO0EAsnYajwYZuqcz7gyfxwfaecUESxDujrqOivf3zrjFbub8IJkrqEaz3fvJWh001EzxBub54fg==", "dev": true, "requires": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.2", "chokidar": "^3.4.0", "commander": "^4.0.1", "convert-source-map": "^1.1.0", @@ -9212,35 +9559,35 @@ } }, "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" } }, "@babel/compat-data": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", - "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", "dev": true }, "@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -9250,68 +9597,68 @@ } }, "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "dev": true, "requires": { - "@babel/types": "^7.14.2", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-compilation-targets": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", - "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "dev": true, "requires": { - "@babel/compat-data": "^7.14.4", - "@babel/helper-validator-option": "^7.12.17", + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz", - "integrity": "sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.14.4", - "@babel/helper-split-export-declaration": "^7.12.13" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", - "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-annotate-as-pure": "^7.14.5", "regexpu-core": "^4.7.1" } }, @@ -9332,362 +9679,361 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", "dev": true, "requires": { - "@babel/types": "^7.13.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" } }, "@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dev": true, "requires": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" + "@babel/types": "^7.14.5" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" } }, "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" } }, "@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" } }, "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-replace-supers": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", - "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.4" + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" } }, "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", "dev": true, "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", - "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", "dev": true }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", - "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", + "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", - "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", + "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.3", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", - "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", - "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", - "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", - "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", - "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", - "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", - "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", "dev": true, "requires": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.2" + "@babel/plugin-transform-parameters": "^7.14.5" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", - "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", - "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-async-generators": { @@ -9709,12 +10055,12 @@ } }, "@babel/plugin-syntax-class-static-block": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-dynamic-import": { @@ -9799,347 +10145,347 @@ } }, "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz", - "integrity": "sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz", - "integrity": "sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.14.4", - "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-destructuring": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz", - "integrity": "sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", - "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", + "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5" } }, "@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" } }, "@babel/plugin-transform-parameters": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", - "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-runtime": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", - "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", + "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", "semver": "^6.3.0" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/polyfill": { @@ -10153,34 +10499,34 @@ } }, "@babel/preset-env": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz", - "integrity": "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.14.2", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.13.11", - "@babel/plugin-proposal-dynamic-import": "^7.14.2", - "@babel/plugin-proposal-export-namespace-from": "^7.14.2", - "@babel/plugin-proposal-json-strings": "^7.14.2", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", - "@babel/plugin-proposal-numeric-separator": "^7.14.2", - "@babel/plugin-proposal-object-rest-spread": "^7.14.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", - "@babel/plugin-proposal-optional-chaining": "^7.14.2", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", + "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-async-generator-functions": "^7.14.7", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", @@ -10190,46 +10536,46 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.14.2", - "@babel/plugin-transform-classes": "^7.14.2", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.17", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.2", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.14.2", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.5", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.14.6", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.2", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", + "@babel/types": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.15.0", "semver": "^6.3.0" } }, @@ -10247,9 +10593,9 @@ } }, "@babel/register": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.16.tgz", - "integrity": "sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.14.5.tgz", + "integrity": "sha512-TjJpGz/aDjFGWsItRBQMOFTrmTI9tr79CHOK+KIvLeCkbxuOAk2M5QHjvruIMGoo9OuccMh5euplPzc5FjAKGg==", "dev": true, "requires": { "clone-deep": "^4.0.1", @@ -10260,61 +10606,62 @@ } }, "@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dev": true, "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.14.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", - "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } }, "@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", "dev": true, "peer": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", @@ -10323,33 +10670,52 @@ }, "dependencies": { "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "peer": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } } } }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "peer": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true, + "peer": true + }, "@moneybutton/brfc": { - "version": "git+ssh://git@github.com/baryon/brfc.git#aba3a22013ebbe41be7ec27e8de34b7b6a948135", - "from": "@moneybutton/brfc@github:baryon/brfc", + "version": "git+ssh://git@github.com/chainbow/brfc.git#aba3a22013ebbe41be7ec27e8de34b7b6a948135", + "from": "@moneybutton/brfc@github:chainbow/brfc", "requires": {} }, "@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz", - "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==", + "version": "2.1.8-no-fsevents.2", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.2.tgz", + "integrity": "sha512-Fb8WxUFOBQVl+CX4MWet5o7eCc6Pj04rXIwVKZ6h1NnqTo45eOQW6aWyhG25NIODvWFwTDMwBsYxrQ3imxpetg==", "dev": true, "optional": true, "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.1", "braces": "^2.3.2", - "glob-parent": "^3.1.0", + "glob-parent": "^5.1.2", "inherits": "^2.0.3", "is-binary-path": "^1.0.0", "is-glob": "^4.0.0", @@ -10417,22 +10783,40 @@ } } }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz", + "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", + "dev": true + }, "@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, "@types/node": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.1.tgz", - "integrity": "sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.3.1.tgz", + "integrity": "sha512-N87VuQi7HEeRJkhzovao/JviiqKjDKMVKxKMfUvSKw+MbkbW8R0nA3fi/MQhhlxV2fQ+2ReM+/Nt4efdrJx3zA==", "dev": true }, "@types/resolve": { @@ -10482,9 +10866,9 @@ "dev": true }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, @@ -10549,6 +10933,12 @@ } } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -10712,13 +11102,13 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz", - "integrity": "sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", + "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.9.1" + "core-js-compat": "^3.14.0" } }, "babel-plugin-polyfill-regenerator": { @@ -11082,9 +11472,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "version": "1.0.30001243", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz", + "integrity": "sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA==", "dev": true }, "chai": { @@ -11119,19 +11509,19 @@ "dev": true }, "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" }, "dependencies": { "anymatch": { @@ -11168,15 +11558,6 @@ "to-regex-range": "^5.0.1" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -11193,9 +11574,9 @@ "dev": true }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" @@ -11419,9 +11800,9 @@ "dev": true }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -11449,9 +11830,9 @@ "dev": true }, "core-js-compat": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.13.1.tgz", - "integrity": "sha512-mdrcxc0WznfRd8ZicEZh1qVeJ2mu6bwQFh8YVUK48friy/FOwFV5EJj9/dlh+nMQ74YusdVfBFDuomKgUspxWQ==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", + "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", "dev": true, "requires": { "browserslist": "^4.16.6", @@ -11515,6 +11896,12 @@ "sha.js": "^2.4.8" } }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-fetch": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", @@ -11554,9 +11941,9 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -11698,9 +12085,9 @@ } }, "electron-to-chromium": { - "version": "1.3.742", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz", - "integrity": "sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q==", + "version": "1.3.772", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.772.tgz", + "integrity": "sha512-X/6VRCXWALzdX+RjCtBU6cyg8WZgoxm9YA02COmDOiNJEZ59WkQggDbWZ4t/giHi/3GS+cvdrP6gbLISANAGYA==", "dev": true }, "elliptic": { @@ -11798,14 +12185,15 @@ "dev": true }, "eslint": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.27.0.tgz", - "integrity": "sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==", + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", + "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", "dev": true, "peer": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", + "@eslint/eslintrc": "^0.4.2", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -11822,7 +12210,7 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", @@ -11907,20 +12295,10 @@ "dev": true, "peer": true }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "peer": true, - "requires": { - "is-glob": "^4.0.1" - } - }, "globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "peer": true, "requires": { @@ -11953,13 +12331,6 @@ "requires": { "has-flag": "^4.0.0" } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "peer": true } } }, @@ -12535,9 +12906,9 @@ } }, "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", + "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", "dev": true, "peer": true }, @@ -12693,26 +13064,12 @@ } }, "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "optional": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-glob": "^4.0.1" } }, "globals": { @@ -13158,6 +13515,12 @@ "has-symbols": "^1.0.2" } }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -13537,12 +13900,13 @@ "peer": true }, "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "chalk": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "dependencies": { "ansi-styles": { @@ -13647,6 +14011,12 @@ } } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -13794,33 +14164,33 @@ } }, "mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.2.tgz", + "integrity": "sha512-FpspiWU+UT9Sixx/wKimvnpkeW0mh6ROAKkIaPokj3xZgxeRhcna/k5X57jJghEr8X+Cgu/Vegf8zCX5ugSuTA==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.5.1", + "chokidar": "3.5.2", "debug": "4.3.1", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.1.6", + "glob": "7.1.7", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", "minimatch": "3.0.4", "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", + "nanoid": "3.1.23", + "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", "wide-align": "1.1.3", - "workerpool": "6.1.0", + "workerpool": "6.1.5", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" @@ -13832,26 +14202,29 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -13859,9 +14232,9 @@ "dev": true }, "js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -13884,6 +14257,12 @@ } } }, + "mocha-define": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/mocha-define/-/mocha-define-0.2.0.tgz", + "integrity": "sha1-b3GITK4m7twOnsuet6Xn91xrtCY=", + "dev": true + }, "moment": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", @@ -13896,9 +14275,9 @@ "dev": true }, "nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", "dev": true }, "nanomatch": { @@ -13962,9 +14341,9 @@ "dev": true }, "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", "dev": true }, "normalize-package-data": { @@ -14249,13 +14628,6 @@ "dev": true, "optional": true }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true, - "optional": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -14786,9 +15158,9 @@ } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "regexpu-core": { @@ -14919,12 +15291,12 @@ } }, "rollup": { - "version": "2.48.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.48.0.tgz", - "integrity": "sha512-wl9ZSSSsi5579oscSDYSzGn092tCS076YB+TQrzsGuSfYyJeep8eEWj0eaRjuC5McuMNmcnR8icBqiE/FWNB1A==", + "version": "2.53.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.53.0.tgz", + "integrity": "sha512-spgrY78Toh+m0+zaOoeaayJKuzFuWy6o1PdFIBMVwRcuxT0xCOX9A5rChyKe+2ruL4lePKWUMImS4mMW1QAkmQ==", "dev": true, "requires": { - "fsevents": "~2.3.1" + "fsevents": "~2.3.2" } }, "rollup-plugin-babel": { @@ -15037,9 +15409,9 @@ "dev": true }, "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -15643,15 +16015,6 @@ "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, "globals": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", @@ -15770,6 +16133,12 @@ "slice-ansi": "^2.1.0", "string-width": "^3.0.0" } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true } } }, @@ -15987,9 +16356,9 @@ }, "dependencies": { "ajv": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.5.0.tgz", - "integrity": "sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ==", + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", + "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", "dev": true, "peer": true, "requires": { @@ -16089,27 +16458,41 @@ "repeat-string": "^1.6.1" } }, + "ts-node": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.1.0.tgz", + "integrity": "sha512-6szn3+J9WyG2hE+5W8e0ruZrzyk1uFLYye6IGMBadnOzDh8aP7t8CbFpsfCiEx2+wMixAhjFt7lOZC4+l+WbEA==", + "dev": true, + "requires": { + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz", + "integrity": "sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q==", "dev": true, "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^2.2.0", "minimist": "^1.2.0", "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } } }, "type-check": { @@ -16128,10 +16511,11 @@ "dev": true }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "peer": true }, "typedarray": { "version": "0.0.6", @@ -16145,6 +16529,13 @@ "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=", "dev": true }, + "typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true, + "peer": true + }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -16391,9 +16782,9 @@ "dev": true }, "workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", "dev": true }, "wrap-ansi": { @@ -16505,6 +16896,12 @@ "is-plain-obj": "^2.1.0" } }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index c3ea0c8..0769ba0 100644 --- a/package.json +++ b/package.json @@ -25,20 +25,20 @@ "access": "public" }, "dependencies": { - "@babel/runtime": "7.14.0", - "@moneybutton/brfc": "github:baryon/brfc", + "@babel/runtime": "7.14.6", + "@moneybutton/brfc": "github:chainbow/brfc", "abort-controller": "3.0.0", "bsv": "^1.5.5", "cross-fetch": "^3.1.4", "moment": "^2.24.0" }, "devDependencies": { - "@babel/cli": "7.14.3", - "@babel/core": "7.14.3", - "@babel/plugin-proposal-object-rest-spread": "7.14.2", - "@babel/plugin-transform-runtime": "7.14.3", + "@babel/cli": "7.14.5", + "@babel/core": "7.14.6", + "@babel/plugin-proposal-object-rest-spread": "7.14.7", + "@babel/plugin-transform-runtime": "7.14.5", "@babel/polyfill": "^7.10.4", - "@babel/preset-env": "7.14.2", + "@babel/preset-env": "7.14.7", "@babel/register": "^7.10.5", "@rollup/plugin-commonjs": "19.0.0", "@rollup/plugin-node-resolve": "13.0.0", @@ -48,13 +48,15 @@ "chai": "4.3.4", "dotenv-cli": "4.0.0", "http-server": "0.12.3", - "mocha": "8.4.0", - "rollup": "2.48.0", + "mocha": "9.0.2", + "mocha-define": "^0.2.0", + "rollup": "2.53.0", "rollup-plugin-babel": "4.4.0", "rollup-plugin-node-builtins": "2.1.2", "rollup-plugin-node-globals": "1.4.0", "should": "13.2.3", - "standard": "16.0.3" + "standard": "16.0.3", + "ts-node": "^10.1.0" }, "standard": { "globals": [ diff --git a/test/endpoint-resolver.js b/test/endpoint-resolver.js index 4d76766..71c3310 100644 --- a/test/endpoint-resolver.js +++ b/test/endpoint-resolver.js @@ -11,6 +11,12 @@ import { import { MockDNS } from './util/MockDNS' import { DnsClient } from '../src/dns-client' import { DnsOverHttps } from '../src/dns-over-https' +import * as md from 'mocha-define' + +const get=[] +function def(name,fn) { + get[name] = fn() +} describe('EndpointResolver', () => { def('dns', () => new MockDNS()) diff --git a/test/mocha.opts b/test/mocha.opts index ce6d19c..2d9d134 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,4 +1,5 @@ --recursive --require @babel/register --require @babel/polyfill +--require mocha-define -u bdd-lazy-var/getter diff --git a/test/paymail-client.js b/test/paymail-client.js index a30874e..ee7d878 100644 --- a/test/paymail-client.js +++ b/test/paymail-client.js @@ -10,6 +10,11 @@ import moment from 'moment' import bsv from 'bsv' import { RequestBodyFactory } from '../src/RequestBodyFactory' +const get=[] +function def(name,fn) { + get[name] = fn() +} + describe('PaymailClient', () => { def('dns', () => new MockDNS()) def('clock', () => new MockClock()) diff --git a/test/request-body-factory.js b/test/request-body-factory.js index f271b2b..149aa7f 100644 --- a/test/request-body-factory.js +++ b/test/request-body-factory.js @@ -6,6 +6,11 @@ import { MockClock } from './util/MockClock' import { VerifiableMessage } from '../src/VerifiableMessage' import moment from 'moment' +const get=[] +function def(name,fn) { + get[name] = fn() +} + describe('PaymailClient', () => { def('clock', () => new MockClock()) def('now', () => moment('2019-03-01')) diff --git a/test/verificable-message.js b/test/verificable-message.js index 5ed5bbf..8fa304d 100644 --- a/test/verificable-message.js +++ b/test/verificable-message.js @@ -3,6 +3,11 @@ import { expect } from 'chai' import { VerifiableMessage } from '../src/VerifiableMessage' import moment from 'moment' +const get=[] +function def(name,fn) { + get[name] = fn() +} + describe('VerifiableMessage', () => { def('aPrivateKey', () => 'KxWjJiTRSA7oExnvbWRaCizYB42XMKPxyD6ryzANbdXCJw1fo4sR') def('messageData', () => ({ From 000426fdb8aeee51616e58904d3cb5efe3542688 Mon Sep 17 00:00:00 2001 From: suhao Date: Tue, 3 Aug 2021 16:43:43 +0900 Subject: [PATCH 19/33] add witness public timestamp api --- .gitignore | 2 +- dist/paymail-client.cjs.js | 28 ++++++++++++++++++++++++ dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 28 ++++++++++++++++++++++++ dist/paymail-client.esm.js.map | 2 +- src/PaymailClient.js | 40 +++++++++++++++++++++++++++------- src/constants.js | 2 ++ 7 files changed, 93 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 4ef2717..eb03e3e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ - +node_modules *.log diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index 08c585b..6541dd6 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -17,6 +17,8 @@ var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment); var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch); const CapabilityCodes = { + witnessPublic: 'witnessPublic', + witnessTimestamp: 'witnessTimestamp', pki: 'pki', paymentDestination: 'paymentDestination', requestSenderValidation: brfc.brfc('bsvalias Payment Addressing (Payer Validation)', ['andy (nChain)'], ''), @@ -473,6 +475,32 @@ class PaymailClient { this.http = new Http(fetch2); this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); } + /** + * Get witness public. + * + * @param {String} paymail - a paymail address + */ + + + async witnessPublic(domain) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.witnessPublic]; + const response = await this.http.get(url); + return await response.json(); + } + /** + * Get witness public. + * + * @param {String} paymail - a paymail address + */ + + + async witnessTimestamp(domain) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.witnessTimestamp]; + const response = await this.http.get(url); + return await response.json(); + } /** * Uses pki flow to query for an identity key for a given paymail address. * diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index 2cef2db..dfc6caf 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n witnessPublic: 'witnessPublic',\n witnessTimestamp: 'witnessTimestamp',\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor(dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Get witness public.\n *\n * @param {String} paymail - a paymail address\n */\n async witnessPublic(domain) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessPublic]\n const response = await this.http.get(url)\n return await response.json()\n }\n\n /**\n * Get witness public.\n *\n * @param {String} paymail - a paymail address\n */\n async witnessTimestamp(domain) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessTimestamp]\n const response = await this.http.get(url)\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey(paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor(aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner(pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature(message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile(paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination(targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","witnessPublic","witnessTimestamp","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index 5314194..9a3e898 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -6,6 +6,8 @@ import moment from 'moment'; import fetch from 'cross-fetch'; const CapabilityCodes = { + witnessPublic: 'witnessPublic', + witnessTimestamp: 'witnessTimestamp', pki: 'pki', paymentDestination: 'paymentDestination', requestSenderValidation: brfc('bsvalias Payment Addressing (Payer Validation)', ['andy (nChain)'], ''), @@ -462,6 +464,32 @@ class PaymailClient { this.http = new Http(fetch2); this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()); } + /** + * Get witness public. + * + * @param {String} paymail - a paymail address + */ + + + async witnessPublic(domain) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.witnessPublic]; + const response = await this.http.get(url); + return await response.json(); + } + /** + * Get witness public. + * + * @param {String} paymail - a paymail address + */ + + + async witnessTimestamp(domain) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.witnessTimestamp]; + const response = await this.http.get(url); + return await response.json(); + } /** * Uses pki flow to query for an identity key for a given paymail address. * diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 984120a..1cd4858 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor (dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey (paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor (aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner (pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature (message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile (paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination (targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n witnessPublic: 'witnessPublic',\n witnessTimestamp: 'witnessTimestamp',\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor(dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Get witness public.\n *\n * @param {String} paymail - a paymail address\n */\n async witnessPublic(domain) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessPublic]\n const response = await this.http.get(url)\n return await response.json()\n }\n\n /**\n * Get witness public.\n *\n * @param {String} paymail - a paymail address\n */\n async witnessTimestamp(domain) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessTimestamp]\n const response = await this.http.get(url)\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey(paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor(aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner(pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature(message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile(paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination(targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","witnessPublic","witnessTimestamp","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/src/PaymailClient.js b/src/PaymailClient.js index 97f714e..12a21fb 100644 --- a/src/PaymailClient.js +++ b/src/PaymailClient.js @@ -8,7 +8,7 @@ import { BrowserDns } from './BrowserDns' import { Http } from './http' class PaymailClient { - constructor (dns = null, fetch2 = null, clock = null, bsv = null) { + constructor(dns = null, fetch2 = null, clock = null, bsv = null) { if (fetch2 === null) { fetch2 = fetch } @@ -24,12 +24,36 @@ class PaymailClient { this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()) } + /** + * Get witness public. + * + * @param {String} paymail - a paymail address + */ + async witnessPublic(domain) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.witnessPublic] + const response = await this.http.get(url) + return await response.json() + } + + /** + * Get witness public. + * + * @param {String} paymail - a paymail address + */ + async witnessTimestamp(domain) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.witnessTimestamp] + const response = await this.http.get(url) + return await response.json() + } + /** * Uses pki flow to query for an identity key for a given paymail address. * * @param {String} paymail - a paymail address */ - async getPublicKey (paymail) { + async getPublicKey(paymail) { const identityUrl = await this.resolver.getIdentityUrlFor(paymail) const response = await this.http.get(identityUrl) const { pubkey } = await response.json() @@ -50,7 +74,7 @@ class PaymailClient { * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification. * @param {String} privateKey - Optional. private key to sign the request. */ - async getOutputFor (aPaymail, senderInfo, privateKey = null) { + async getOutputFor(aPaymail, senderInfo, privateKey = null) { const addressUrl = await this.resolver.getAddressUrlFor(aPaymail) const response = await this.http.postJson( addressUrl, @@ -70,7 +94,7 @@ class PaymailClient { * @param {String} pubkey - Public key to check. * @param {String} paymail - a paymail address */ - async verifyPubkeyOwner (pubkey, paymail) { + async verifyPubkeyOwner(pubkey, paymail) { const url = await this.resolver.getVerifyUrlFor(paymail, pubkey) const response = await this.http.get(url) const body = await response.json() @@ -92,7 +116,7 @@ class PaymailClient { * @param {String} paymail - Signature owner paymail * @param {String} pubkey - Optional. Public key that validates the signature. */ - async isValidSignature (message, signature, paymail = null, pubkey = null) { + async isValidSignature(message, signature, paymail = null, pubkey = null) { if (paymail == null && pubkey === null) { throw new Error('Must specify either paymail or pubkey') } @@ -130,7 +154,7 @@ class PaymailClient { * @param {String} paymail - a paymail address * @param {String} s - the preferred size of the image */ - async getPublicProfile (paymail) { + async getPublicProfile(paymail) { const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail) const response = await this.http.get(publicProfileUrl) if (!response.ok) { @@ -141,7 +165,7 @@ class PaymailClient { return { avatar, name } } - async sendRawTx (targetPaymail, hexTransaction, reference, metadata = {}) { + async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { if (!hexTransaction) { throw new Error('transaction hex cannot be empty') } @@ -157,7 +181,7 @@ class PaymailClient { return response.json() } - async getP2pPaymentDestination (targetPaymail, satoshis) { + async getP2pPaymentDestination(targetPaymail, satoshis) { if (!satoshis) { throw new Error('Amount in satohis needs to be specified') } diff --git a/src/constants.js b/src/constants.js index 6385e86..7cb4e7c 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,6 +1,8 @@ import { brfc } from '@moneybutton/brfc' export const CapabilityCodes = { + witnessPublic: 'witnessPublic', + witnessTimestamp: 'witnessTimestamp', pki: 'pki', paymentDestination: 'paymentDestination', requestSenderValidation: brfc( From 79c80ba6058f313b2f415f92e5df2debac0fd3f1 Mon Sep 17 00:00:00 2001 From: suhao Date: Tue, 3 Aug 2021 19:50:24 +0900 Subject: [PATCH 20/33] add check baton and check token --- src/PaymailClient.js | 22 +++++++++++++++++----- src/constants.js | 19 ++++++++++++++++--- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/PaymailClient.js b/src/PaymailClient.js index 12a21fb..b0f701c 100644 --- a/src/PaymailClient.js +++ b/src/PaymailClient.js @@ -27,7 +27,7 @@ class PaymailClient { /** * Get witness public. * - * @param {String} paymail - a paymail address + * @param {String} domain - a domain */ async witnessPublic(domain) { const apiDescriptor = await this.resolver.getApiDescriptionFor(domain) @@ -37,13 +37,25 @@ class PaymailClient { } /** - * Get witness public. + * witness check baton. * - * @param {String} paymail - a paymail address + * @param {String} domain - a domain + */ + async witnessCheckBaton(domain) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain) + const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckBaton] + const response = await this.http.get(url) + return await response.json() + } + + /** + * witness check token. + * + * @param {String} domain - a domain */ - async witnessTimestamp(domain) { + async witnessCheckToken(domain) { const apiDescriptor = await this.resolver.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.witnessTimestamp] + const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckToken] const response = await this.http.get(url) return await response.json() } diff --git a/src/constants.js b/src/constants.js index 7cb4e7c..70c9548 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,8 +1,6 @@ import { brfc } from '@moneybutton/brfc' export const CapabilityCodes = { - witnessPublic: 'witnessPublic', - witnessTimestamp: 'witnessTimestamp', pki: 'pki', paymentDestination: 'paymentDestination', requestSenderValidation: brfc( @@ -29,5 +27,20 @@ export const CapabilityCodes = { 'Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1' - ) + ), + witnessPublic: brfc( + 'Public API of the Controllable UTXO Token Witness', + ['LI Long (ChainBow)'], + '1' + ), + witnessCheckBaton: brfc( + 'Check Baton API of the Controllable UTXO Token Witness', + ['LI Long (ChainBow)'], + '1' + ), + witnessCheckToken: brfc( + 'Check Token API of the Controllable UTXO Token Witness', + ['LI Long (ChainBow)'], + '1' + ), } From 4d87f3fccdfe650658a0f7ffbd0ae78ecfee35f8 Mon Sep 17 00:00:00 2001 From: suhao Date: Tue, 3 Aug 2021 21:49:25 +0900 Subject: [PATCH 21/33] add param to check token baton --- dist/paymail-client.cjs.js | 32 +++++++++++++++++++++++--------- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 32 +++++++++++++++++++++++--------- dist/paymail-client.esm.js.map | 2 +- src/PaymailClient.js | 8 ++++---- 5 files changed, 52 insertions(+), 24 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index 6541dd6..8b175ce 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -17,15 +17,16 @@ var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment); var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch); const CapabilityCodes = { - witnessPublic: 'witnessPublic', - witnessTimestamp: 'witnessTimestamp', pki: 'pki', paymentDestination: 'paymentDestination', requestSenderValidation: brfc.brfc('bsvalias Payment Addressing (Payer Validation)', ['andy (nChain)'], ''), verifyPublicKeyOwner: brfc.brfc('bsvalias public key verify (Verify Public Key Owner)', [], ''), publicProfile: brfc.brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), receiveTransaction: brfc.brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), - p2pPaymentDestination: brfc.brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') + p2pPaymentDestination: brfc.brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), + witnessPublic: brfc.brfc('Public API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + witnessCheckBaton: brfc.brfc('Check Baton API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + witnessCheckToken: brfc.brfc('Check Token API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1') }; // import { DnsOverHttps } from "./dns-over-https" @@ -478,7 +479,7 @@ class PaymailClient { /** * Get witness public. * - * @param {String} paymail - a paymail address + * @param {String} domain - a domain */ @@ -489,16 +490,29 @@ class PaymailClient { return await response.json(); } /** - * Get witness public. + * witness check baton. * - * @param {String} paymail - a paymail address + * @param {String} domain - a domain */ - async witnessTimestamp(domain) { + async witnessCheckBaton(domain, args) { const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.witnessTimestamp]; - const response = await this.http.get(url); + const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckBaton]; + const response = await this.http.get(`${url}?${new URLSearchParams(args)}`); + return await response.json(); + } + /** + * witness check token. + * + * @param {String} domain - a domain + */ + + + async witnessCheckToken(domain, args) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckToken]; + const response = await this.http.get(`${url}?${new URLSearchParams(args)}`); return await response.json(); } /** diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index dfc6caf..b0fc5a4 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n witnessPublic: 'witnessPublic',\n witnessTimestamp: 'witnessTimestamp',\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor(dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Get witness public.\n *\n * @param {String} paymail - a paymail address\n */\n async witnessPublic(domain) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessPublic]\n const response = await this.http.get(url)\n return await response.json()\n }\n\n /**\n * Get witness public.\n *\n * @param {String} paymail - a paymail address\n */\n async witnessTimestamp(domain) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessTimestamp]\n const response = await this.http.get(url)\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey(paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor(aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner(pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature(message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile(paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination(targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","witnessPublic","witnessTimestamp","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor(dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic(domain) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessPublic]\n const response = await this.http.get(url)\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton(domain, args) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckBaton]\n const response = await this.http.get(`${url}?${new URLSearchParams(args)}`)\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken(domain, args) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckToken]\n const response = await this.http.get(`${url}?${new URLSearchParams(args)}`)\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey(paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor(aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner(pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature(message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile(paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination(targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index 9a3e898..9dcfa5b 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -6,15 +6,16 @@ import moment from 'moment'; import fetch from 'cross-fetch'; const CapabilityCodes = { - witnessPublic: 'witnessPublic', - witnessTimestamp: 'witnessTimestamp', pki: 'pki', paymentDestination: 'paymentDestination', requestSenderValidation: brfc('bsvalias Payment Addressing (Payer Validation)', ['andy (nChain)'], ''), verifyPublicKeyOwner: brfc('bsvalias public key verify (Verify Public Key Owner)', [], ''), publicProfile: brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), receiveTransaction: brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), - p2pPaymentDestination: brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1') + p2pPaymentDestination: brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), + witnessPublic: brfc('Public API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + witnessCheckBaton: brfc('Check Baton API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + witnessCheckToken: brfc('Check Token API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1') }; // import { DnsOverHttps } from "./dns-over-https" @@ -467,7 +468,7 @@ class PaymailClient { /** * Get witness public. * - * @param {String} paymail - a paymail address + * @param {String} domain - a domain */ @@ -478,16 +479,29 @@ class PaymailClient { return await response.json(); } /** - * Get witness public. + * witness check baton. * - * @param {String} paymail - a paymail address + * @param {String} domain - a domain */ - async witnessTimestamp(domain) { + async witnessCheckBaton(domain, args) { const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); - const url = apiDescriptor.capabilities[CapabilityCodes.witnessTimestamp]; - const response = await this.http.get(url); + const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckBaton]; + const response = await this.http.get(`${url}?${new URLSearchParams(args)}`); + return await response.json(); + } + /** + * witness check token. + * + * @param {String} domain - a domain + */ + + + async witnessCheckToken(domain, args) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckToken]; + const response = await this.http.get(`${url}?${new URLSearchParams(args)}`); return await response.json(); } /** diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 1cd4858..4737c26 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n witnessPublic: 'witnessPublic',\n witnessTimestamp: 'witnessTimestamp',\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n )\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor(dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Get witness public.\n *\n * @param {String} paymail - a paymail address\n */\n async witnessPublic(domain) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessPublic]\n const response = await this.http.get(url)\n return await response.json()\n }\n\n /**\n * Get witness public.\n *\n * @param {String} paymail - a paymail address\n */\n async witnessTimestamp(domain) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessTimestamp]\n const response = await this.http.get(url)\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey(paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor(aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner(pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature(message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile(paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination(targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","witnessPublic","witnessTimestamp","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor(dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic(domain) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessPublic]\n const response = await this.http.get(url)\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton(domain, args) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckBaton]\n const response = await this.http.get(`${url}?${new URLSearchParams(args)}`)\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken(domain, args) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckToken]\n const response = await this.http.get(`${url}?${new URLSearchParams(args)}`)\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey(paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor(aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner(pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature(message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile(paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination(targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/src/PaymailClient.js b/src/PaymailClient.js index b0f701c..6d4bcc9 100644 --- a/src/PaymailClient.js +++ b/src/PaymailClient.js @@ -41,10 +41,10 @@ class PaymailClient { * * @param {String} domain - a domain */ - async witnessCheckBaton(domain) { + async witnessCheckBaton(domain, args) { const apiDescriptor = await this.resolver.getApiDescriptionFor(domain) const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckBaton] - const response = await this.http.get(url) + const response = await this.http.get(`${url}?${new URLSearchParams(args)}`) return await response.json() } @@ -53,10 +53,10 @@ class PaymailClient { * * @param {String} domain - a domain */ - async witnessCheckToken(domain) { + async witnessCheckToken(domain, args) { const apiDescriptor = await this.resolver.getApiDescriptionFor(domain) const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckToken] - const response = await this.http.get(url) + const response = await this.http.get(`${url}?${new URLSearchParams(args)}`) return await response.json() } From d625757fa42f82613689f56a2368a510078593d2 Mon Sep 17 00:00:00 2001 From: Long Li Date: Thu, 12 Aug 2021 13:10:00 +0900 Subject: [PATCH 22/33] =?UTF-8?q?Token=20Logo=E5=92=8CInfo=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/PaymailClient.js | 162 +++++++++++++++++++++++++------------------ src/constants.js | 10 +++ 2 files changed, 105 insertions(+), 67 deletions(-) diff --git a/src/PaymailClient.js b/src/PaymailClient.js index 6d4bcc9..df01b41 100644 --- a/src/PaymailClient.js +++ b/src/PaymailClient.js @@ -8,20 +8,20 @@ import { BrowserDns } from './BrowserDns' import { Http } from './http' class PaymailClient { - constructor(dns = null, fetch2 = null, clock = null, bsv = null) { - if (fetch2 === null) { + constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) { + if ( fetch2 === null ) { fetch2 = fetch } - if (dns === null) { - dns = new BrowserDns(fetch2) + if ( dns === null ) { + dns = new BrowserDns( fetch2 ) } - if (bsv === null) { - bsv = require('bsv') + if ( bsv === null ) { + bsv = require( 'bsv' ) } this.bsv = bsv - this.resolver = new EndpointResolver(dns, fetch2) - this.http = new Http(fetch2) - this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock()) + this.resolver = new EndpointResolver( dns, fetch2 ) + this.http = new Http( fetch2 ) + this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() ) } /** @@ -29,10 +29,10 @@ class PaymailClient { * * @param {String} domain - a domain */ - async witnessPublic(domain) { - const apiDescriptor = await this.resolver.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.witnessPublic] - const response = await this.http.get(url) + async witnessPublic ( domain ) { + const apiDescriptor = await this.resolver.getApiDescriptionFor( domain ) + const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ] + const response = await this.http.get( url ) return await response.json() } @@ -41,10 +41,10 @@ class PaymailClient { * * @param {String} domain - a domain */ - async witnessCheckBaton(domain, args) { - const apiDescriptor = await this.resolver.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckBaton] - const response = await this.http.get(`${url}?${new URLSearchParams(args)}`) + async witnessCheckBaton ( domain, args ) { + const apiDescriptor = await this.resolver.getApiDescriptionFor( domain ) + const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ] + const response = await this.http.get( `${url}?${new URLSearchParams( args )}` ) return await response.json() } @@ -53,10 +53,38 @@ class PaymailClient { * * @param {String} domain - a domain */ - async witnessCheckToken(domain, args) { - const apiDescriptor = await this.resolver.getApiDescriptionFor(domain) - const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckToken] - const response = await this.http.get(`${url}?${new URLSearchParams(args)}`) + async witnessCheckToken ( domain, args ) { + const apiDescriptor = await this.resolver.getApiDescriptionFor( domain ) + const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ] + const response = await this.http.get( `${url}?${new URLSearchParams( args )}` ) + return await response.json() + } + + /** + * Get token's logo uri. + * + * @param {String} domain - a domain + * @param {String} contractId - contractId of Token + * return uri string + */ + async tokenLogo ( domain, contractId ) { + const apiDescriptor = await this.resolver.getApiDescriptionFor( domain ) + let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ] + uri = uri.replace( '{contractId}', contractId ) + return uri + } + + /** + * Get token's info json. + * + * @param {String} domain - a domain + * @param {String} contractId - contractId of Token + */ + async tokenInformation ( domain, contractId ) { + const apiDescriptor = await this.resolver.getApiDescriptionFor( domain ) + let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ] + uri = uri.replace( '{contractId}', contractId ) + const response = await this.http.get( uri ) return await response.json() } @@ -65,9 +93,9 @@ class PaymailClient { * * @param {String} paymail - a paymail address */ - async getPublicKey(paymail) { - const identityUrl = await this.resolver.getIdentityUrlFor(paymail) - const response = await this.http.get(identityUrl) + async getPublicKey ( paymail ) { + const identityUrl = await this.resolver.getIdentityUrlFor( paymail ) + const response = await this.http.get( identityUrl ) const { pubkey } = await response.json() return pubkey } @@ -86,14 +114,14 @@ class PaymailClient { * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification. * @param {String} privateKey - Optional. private key to sign the request. */ - async getOutputFor(aPaymail, senderInfo, privateKey = null) { - const addressUrl = await this.resolver.getAddressUrlFor(aPaymail) + async getOutputFor ( aPaymail, senderInfo, privateKey = null ) { + const addressUrl = await this.resolver.getAddressUrlFor( aPaymail ) const response = await this.http.postJson( addressUrl, - this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey) + this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey ) ) - if (!response.ok) { - throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail) + if ( !response.ok ) { + throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail ) } const { output } = await response.json() return output @@ -106,9 +134,9 @@ class PaymailClient { * @param {String} pubkey - Public key to check. * @param {String} paymail - a paymail address */ - async verifyPubkeyOwner(pubkey, paymail) { - const url = await this.resolver.getVerifyUrlFor(paymail, pubkey) - const response = await this.http.get(url) + async verifyPubkeyOwner ( pubkey, paymail ) { + const url = await this.resolver.getVerifyUrlFor( paymail, pubkey ) + const response = await this.http.get( url ) const body = await response.json() const { match } = body return match @@ -128,34 +156,34 @@ class PaymailClient { * @param {String} paymail - Signature owner paymail * @param {String} pubkey - Optional. Public key that validates the signature. */ - async isValidSignature(message, signature, paymail = null, pubkey = null) { - if (paymail == null && pubkey === null) { - throw new Error('Must specify either paymail or pubkey') + async isValidSignature ( message, signature, paymail = null, pubkey = null ) { + if ( paymail == null && pubkey === null ) { + throw new Error( 'Must specify either paymail or pubkey' ) } let senderPublicKey - if (paymail) { - if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) { - if (await this.verifyPubkeyOwner(pubkey, paymail)) { - senderPublicKey = this.bsv.PublicKey.fromString(pubkey) + if ( paymail ) { + if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) { + if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) { + senderPublicKey = this.bsv.PublicKey.fromString( pubkey ) } else { return false } } else { - const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki) - if (hasPki) { - const identityKey = await this.getPublicKey(paymail) - senderPublicKey = this.bsv.PublicKey.fromString(identityKey) + const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki ) + if ( hasPki ) { + const identityKey = await this.getPublicKey( paymail ) + senderPublicKey = this.bsv.PublicKey.fromString( identityKey ) } else { return false } } } - const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey) + const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey ) try { - const verified = message.verify(senderKeyAddress.toString(), signature) + const verified = message.verify( senderKeyAddress.toString(), signature ) return verified - } catch (err) { + } catch ( err ) { return false } } @@ -166,50 +194,50 @@ class PaymailClient { * @param {String} paymail - a paymail address * @param {String} s - the preferred size of the image */ - async getPublicProfile(paymail) { - const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail) - const response = await this.http.get(publicProfileUrl) - if (!response.ok) { + async getPublicProfile ( paymail ) { + const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail ) + const response = await this.http.get( publicProfileUrl ) + if ( !response.ok ) { const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + throw new Error( `Server failed with: ${JSON.stringify( body )}` ) } const { avatar, name } = await response.json() return { avatar, name } } - async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) { - if (!hexTransaction) { - throw new Error('transaction hex cannot be empty') + async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) { + if ( !hexTransaction ) { + throw new Error( 'transaction hex cannot be empty' ) } - const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail) + const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail ) const response = await this.http.postJson( receiveTxUrl, - this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata) + this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata ) ) - if (!response.ok) { + if ( !response.ok ) { const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + throw new Error( `Server failed with: ${JSON.stringify( body )}` ) } return response.json() } - async getP2pPaymentDestination(targetPaymail, satoshis) { - if (!satoshis) { - throw new Error('Amount in satohis needs to be specified') + async getP2pPaymentDestination ( targetPaymail, satoshis ) { + if ( !satoshis ) { + throw new Error( 'Amount in satohis needs to be specified' ) } - const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail) + const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail ) const response = await this.http.postJson( paymentDestinationUrl, - this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis) + this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis ) ) - if (!response.ok) { + if ( !response.ok ) { const body = await response.json() - throw new Error(`Server failed with: ${JSON.stringify(body)}`) + throw new Error( `Server failed with: ${JSON.stringify( body )}` ) } const body = await response.json() - if (!body.outputs) { - throw new Error('Server answered with a wrong format. Missing outputs') + if ( !body.outputs ) { + throw new Error( 'Server answered with a wrong format. Missing outputs' ) } return body diff --git a/src/constants.js b/src/constants.js index 70c9548..559ceae 100644 --- a/src/constants.js +++ b/src/constants.js @@ -43,4 +43,14 @@ export const CapabilityCodes = { ['LI Long (ChainBow)'], '1' ), + tokenLogo: brfc( + 'Logo URI of the Controllable UTXO Token', + ['LI Long (ChainBow)'], + '1' + ), + tokenInformation: brfc( + 'Infomation URI of the Controllable UTXO Token', + ['LI Long (ChainBow)'], + '1' + ), } From aa18a216dffcf3bb6af20ebbf3ae4733247d5fc0 Mon Sep 17 00:00:00 2001 From: Long Li Date: Thu, 12 Aug 2021 21:29:43 +0900 Subject: [PATCH 23/33] build:prod --- dist/paymail-client.cjs.js | 34 +++++++++++++++++++++++++++++++++- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 34 +++++++++++++++++++++++++++++++++- dist/paymail-client.esm.js.map | 2 +- 4 files changed, 68 insertions(+), 4 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index 8b175ce..11c9bfa 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -26,7 +26,9 @@ const CapabilityCodes = { p2pPaymentDestination: brfc.brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), witnessPublic: brfc.brfc('Public API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), witnessCheckBaton: brfc.brfc('Check Baton API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), - witnessCheckToken: brfc.brfc('Check Token API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1') + witnessCheckToken: brfc.brfc('Check Token API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + tokenLogo: brfc.brfc('Logo URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1'), + tokenInformation: brfc.brfc('Infomation URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1') }; // import { DnsOverHttps } from "./dns-over-https" @@ -515,6 +517,36 @@ class PaymailClient { const response = await this.http.get(`${url}?${new URLSearchParams(args)}`); return await response.json(); } + /** + * Get token's logo uri. + * + * @param {String} domain - a domain + * @param {String} contractId - contractId of Token + * return uri string + */ + + + async tokenLogo(domain, contractId) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + let uri = apiDescriptor.capabilities[CapabilityCodes.tokenLogo]; + uri = uri.replace('{contractId}', contractId); + return uri; + } + /** + * Get token's info json. + * + * @param {String} domain - a domain + * @param {String} contractId - contractId of Token + */ + + + async tokenInformation(domain, contractId) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + let uri = apiDescriptor.capabilities[CapabilityCodes.tokenInformation]; + uri = uri.replace('{contractId}', contractId); + const response = await this.http.get(uri); + return await response.json(); + } /** * Uses pki flow to query for an identity key for a given paymail address. * diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index b0fc5a4..2f12189 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor(dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic(domain) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessPublic]\n const response = await this.http.get(url)\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton(domain, args) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckBaton]\n const response = await this.http.get(`${url}?${new URLSearchParams(args)}`)\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken(domain, args) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckToken]\n const response = await this.http.get(`${url}?${new URLSearchParams(args)}`)\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey(paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor(aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner(pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature(message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile(paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination(targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return uri\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index 9dcfa5b..0d279f5 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -15,7 +15,9 @@ const CapabilityCodes = { p2pPaymentDestination: brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), witnessPublic: brfc('Public API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), witnessCheckBaton: brfc('Check Baton API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), - witnessCheckToken: brfc('Check Token API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1') + witnessCheckToken: brfc('Check Token API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + tokenLogo: brfc('Logo URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1'), + tokenInformation: brfc('Infomation URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1') }; // import { DnsOverHttps } from "./dns-over-https" @@ -504,6 +506,36 @@ class PaymailClient { const response = await this.http.get(`${url}?${new URLSearchParams(args)}`); return await response.json(); } + /** + * Get token's logo uri. + * + * @param {String} domain - a domain + * @param {String} contractId - contractId of Token + * return uri string + */ + + + async tokenLogo(domain, contractId) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + let uri = apiDescriptor.capabilities[CapabilityCodes.tokenLogo]; + uri = uri.replace('{contractId}', contractId); + return uri; + } + /** + * Get token's info json. + * + * @param {String} domain - a domain + * @param {String} contractId - contractId of Token + */ + + + async tokenInformation(domain, contractId) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + let uri = apiDescriptor.capabilities[CapabilityCodes.tokenInformation]; + uri = uri.replace('{contractId}', contractId); + const response = await this.http.get(uri); + return await response.json(); + } /** * Uses pki flow to query for an identity key for a given paymail address. * diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 4737c26..8868003 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor(dns = null, fetch2 = null, clock = null, bsv = null) {\n if (fetch2 === null) {\n fetch2 = fetch\n }\n if (dns === null) {\n dns = new BrowserDns(fetch2)\n }\n if (bsv === null) {\n bsv = require('bsv')\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver(dns, fetch2)\n this.http = new Http(fetch2)\n this.requestBodyFactory = new RequestBodyFactory(clock !== null ? clock : new Clock())\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic(domain) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessPublic]\n const response = await this.http.get(url)\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton(domain, args) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckBaton]\n const response = await this.http.get(`${url}?${new URLSearchParams(args)}`)\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken(domain, args) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckToken]\n const response = await this.http.get(`${url}?${new URLSearchParams(args)}`)\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey(paymail) {\n const identityUrl = await this.resolver.getIdentityUrlFor(paymail)\n const response = await this.http.get(identityUrl)\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor(aPaymail, senderInfo, privateKey = null) {\n const addressUrl = await this.resolver.getAddressUrlFor(aPaymail)\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress(senderInfo, privateKey)\n )\n if (!response.ok) {\n throw new PaymailNotFound(`Paymail not found: ${aPaymail}`, aPaymail)\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner(pubkey, paymail) {\n const url = await this.resolver.getVerifyUrlFor(paymail, pubkey)\n const response = await this.http.get(url)\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature(message, signature, paymail = null, pubkey = null) {\n if (paymail == null && pubkey === null) {\n throw new Error('Must specify either paymail or pubkey')\n }\n let senderPublicKey\n if (paymail) {\n if (pubkey && await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.verifyPublicKeyOwner)) {\n if (await this.verifyPubkeyOwner(pubkey, paymail)) {\n senderPublicKey = this.bsv.PublicKey.fromString(pubkey)\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability(paymail.split('@')[1], CapabilityCodes.pki)\n if (hasPki) {\n const identityKey = await this.getPublicKey(paymail)\n senderPublicKey = this.bsv.PublicKey.fromString(identityKey)\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey(senderPublicKey || pubkey)\n try {\n const verified = message.verify(senderKeyAddress.toString(), signature)\n return verified\n } catch (err) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile(paymail) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor(paymail)\n const response = await this.http.get(publicProfileUrl)\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx(targetPaymail, hexTransaction, reference, metadata = {}) {\n if (!hexTransaction) {\n throw new Error('transaction hex cannot be empty')\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor(targetPaymail)\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx(hexTransaction, reference, metadata)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n return response.json()\n }\n\n async getP2pPaymentDestination(targetPaymail, satoshis) {\n if (!satoshis) {\n throw new Error('Amount in satohis needs to be specified')\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor(targetPaymail)\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination(satoshis)\n )\n if (!response.ok) {\n const body = await response.json()\n throw new Error(`Server failed with: ${JSON.stringify(body)}`)\n }\n\n const body = await response.json()\n if (!body.outputs) {\n throw new Error('Server answered with a wrong format. Missing outputs')\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return uri\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file From 5d3d94fdbbdbd653d46e80382e83c6cadc8ac59f Mon Sep 17 00:00:00 2001 From: suhao Date: Mon, 16 Aug 2021 18:51:02 +0900 Subject: [PATCH 24/33] add await --- dist/paymail-client.cjs.js | 2 +- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 2 +- dist/paymail-client.esm.js.map | 2 +- src/EndpointResolver.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index 11c9bfa..df66c79 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -275,7 +275,7 @@ class EndpointResolver { domain, port } = await this.getWellKnownBaseUrl(aDomain); - const apiDescriptor = this.fetchApiDescriptor(domain, port); + const apiDescriptor = await this.fetchApiDescriptor(domain, port); this._cache[aDomain] = apiDescriptor; return apiDescriptor; } diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index 2f12189..61083d3 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return uri\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":";;;;;;;;;;;;;;;;;;MAEaA,eAAe,GAAG;AAC7BC,EAAAA,GAAG,EAAE,KADwB;AAE7BC,EAAAA,kBAAkB,EAAE,oBAFS;AAG7BC,EAAAA,uBAAuB,EAAEC,SAAI,CAC3B,gDAD2B,EAE3B,CAAC,eAAD,CAF2B,EAG3B,EAH2B,CAHA;AAQ7BC,EAAAA,oBAAoB,EAAED,SAAI,CACxB,sDADwB,EAExB,EAFwB,EAGxB,EAHwB,CARG;AAa7BE,EAAAA,aAAa,EAAEF,SAAI,CACjB,gCADiB,EAEjB,CAAC,gCAAD,CAFiB,EAGjB,GAHiB,CAbU;AAkB7BG,EAAAA,kBAAkB,EAAEH,SAAI,CACtB,sBADsB,EAEtB,CAAC,8BAAD,EAAiC,gCAAjC,EAAmE,0BAAnE,EAA+F,iBAA/F,CAFsB,EAGtB,KAHsB,CAlBK;AAuB7BI,EAAAA,qBAAqB,EAAEJ,SAAI,CACzB,gEADyB,EAEzB,CAAC,8BAAD,EAAiC,gCAAjC,EAAmE,0BAAnE,EAA+F,iBAA/F,CAFyB,EAGzB,KAHyB,CAvBE;AA4B7BK,EAAAA,aAAa,EAAEL,SAAI,CACjB,mDADiB,EAEjB,CAAC,oBAAD,CAFiB,EAGjB,GAHiB,CA5BU;AAiC7BM,EAAAA,iBAAiB,EAAEN,SAAI,CACrB,wDADqB,EAErB,CAAC,oBAAD,CAFqB,EAGrB,GAHqB,CAjCM;AAsC7BO,EAAAA,iBAAiB,EAAEP,SAAI,CACrB,wDADqB,EAErB,CAAC,oBAAD,CAFqB,EAGrB,GAHqB,CAtCM;AA2C7BQ,EAAAA,SAAS,EAAER,SAAI,CACb,yCADa,EAEb,CAAC,oBAAD,CAFa,EAGb,GAHa,CA3Cc;AAgD7BS,EAAAA,gBAAgB,EAAET,SAAI,CACpB,+CADoB,EAEpB,CAAC,oBAAD,CAFoB,EAGpB,GAHoB;AAhDO;;ACF/B;AAEA,MAAMU,SAAN,CAAgB;AACdC,EAAAA,WAAW,CAAEC,GAAF,EAAOC,GAAP,EAAY;AACrB,SAAKD,GAAL,GAAWA,GAAX;AACA,SAAKC,GAAL,GAAWA,GAAX;AACD;;AAEa,QAARC,QAAQ,CAAEC,OAAF,EAAW;AACvB,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,WAAKN,GAAL,CAASO,UAAT,CAAqB,kBAAiBJ,OAAQ,EAA9C,EAAiD,OAAOK,GAAP,EAAYC,MAAZ,KAAuB;AACtE,YAAI;AACF,cAAID,GAAG,KAAKA,GAAG,CAACE,IAAJ,KAAa,SAAb,IAA0BF,GAAG,CAACE,IAAJ,KAAa,WAA5C,CAAP,EAAiE;AAC/D,mBAAOL,OAAO,CAAC;AACbM,cAAAA,MAAM,EAAER,OADK;AAEbS,cAAAA,IAAI,EAAE,GAFO;AAGbC,cAAAA,QAAQ,EAAE;AAHG,aAAD,CAAd;AAKD;;AACD,cAAIL,GAAJ,EAAS;AACP,mBAAOF,MAAM,CAACE,GAAD,CAAb;AACD;;AAED,gBAAM;AAAEM,YAAAA,IAAI,EAAEC,aAAR;AAAuBH,YAAAA,IAAvB;AAA6BC,YAAAA;AAA7B,cAA0CJ,MAAM,CAAC,CAAD,CAAtD;AACAJ,UAAAA,OAAO,CAAC;AACNM,YAAAA,MAAM,EAAEI,aADF;AAENH,YAAAA,IAFM;AAGNC,YAAAA,QAAQ,EAAE,KAAKG,mBAAL,CAAyBD,aAAzB,EAAwCZ,OAAxC,KAAoDU;AAHxD,WAAD,CAAP;AAKD,SAlBD,CAkBE,OAAOL,GAAP,EAAY;AACZ,iBAAOF,MAAM,CAACE,GAAD,CAAb;AACD;AACF,OAtBD;AAuBD,KAxBM,EAwBJS,IAxBI,CAwBCR,MAAM,IAAI;AAChB,UAAIA,MAAM,CAACI,QAAX,EAAqB;AACnB,eAAOJ,MAAP;AACD,OAFD,MAEO;AACL,eAAO,KAAKS,cAAL,CAAoBf,OAApB,CAAP;AACD;AACF,KA9BM,EA8BHK,GAAD,IAAS;AACVW,MAAAA,OAAO,CAACC,KAAR,CAAcZ,GAAd;AACA,aAAOA,GAAP;AACD,KAjCM,CAAP;AAkCD;;AAEDQ,EAAAA,mBAAmB,CAAEK,iBAAF,EAAqBC,cAArB,EAAqC;AACtD,QAAI,KAAKC,eAAL,CAAqBF,iBAArB,EAAwCC,cAAxC,CAAJ,EAA6D;AAC3D,aAAO,IAAP;AACD,KAFD,MAEO,IAAI,KAAKE,sBAAL,CAA4BH,iBAA5B,EAA+CC,cAA/C,CAAJ,EAAoE;AACzE,aAAO,IAAP;AACD,KAFM,MAEA,IAAI,KAAKG,gBAAL,CAAsBH,cAAtB,CAAJ,EAA2C;AAAE;AAClD,aAAO,KAAKC,eAAL,CAAqB,2CAArB,EAAkEF,iBAAlE,KAAwF,KAAKE,eAAL,CAAqB,yCAArB,EAAgEF,iBAAhE,CAA/F;AACD,KAFM,MAEA,IAAI,KAAKK,wBAAL,CAA8BJ,cAA9B,CAAJ,EAAmD;AACxD,aAAO,KAAKC,eAAL,CAAqB,sCAArB,EAA6DF,iBAA7D,CAAP;AACD,KAFM,MAEA,IAAI,KAAKE,eAAL,CAAqB,WAArB,EAAkCF,iBAAlC,CAAJ,EAA0D;AAC/D,aAAO,IAAP;AACD,KAFM,MAEA,IAAI,KAAKM,mBAAL,CAAyBN,iBAAzB,CAAJ,EAAiD;AACtD,aAAO,IAAP;AACD,KAFM,MAEA;AACL,aAAO,KAAP;AACD;AACF;;AAEDM,EAAAA,mBAAmB,CAAExB,OAAF,EAAW;AAC5B,WAAO,KAAKoB,eAAL,CAAqBpB,OAArB,EAA8B,iBAA9B,KAAoD,KAAKoB,eAAL,CAAqBpB,OAArB,EAA8B,qBAA9B,CAA3D;AACD;;AAEDqB,EAAAA,sBAAsB,CAAEH,iBAAF,EAAqBC,cAArB,EAAqC;AACzD,WAAO,KAAKC,eAAL,CAAqBF,iBAArB,EAAyC,OAAMC,cAAe,EAA9D,CAAP;AACD;;AAEDG,EAAAA,gBAAgB,CAAEtB,OAAF,EAAW;AACzB,WAAO,KAAKoB,eAAL,CAAqB,aAArB,EAAoCpB,OAApC,CAAP;AACD;;AAEDuB,EAAAA,wBAAwB,CAAEvB,OAAF,EAAW;AACjC,WAAO,KAAKoB,eAAL,CAAqB,sBAArB,EAA6CpB,OAA7C,CAAP;AACD;;AAEmB,QAAde,cAAc,CAAEf,OAAF,EAAW;AAC7B,UAAMyB,WAAW,GAAG,MAAM,KAAK3B,GAAL,CAAS4B,mBAAT,CAA6B1B,OAA7B,CAA1B;;AACA,QAAIyB,WAAW,CAACE,MAAZ,KAAuB,CAAvB,IAA4B,CAACF,WAAW,CAACG,MAA7C,EAAqD;AACnD,YAAM,IAAIC,KAAJ,CAAU,kBAAV,CAAN;AACD;;AACD,UAAMC,IAAI,GAAGL,WAAW,CAACG,MAAZ,CAAmB,CAAnB,EAAsBE,IAAtB,CAA2BC,KAA3B,CAAiC,GAAjC,CAAb;AACA,UAAMtB,IAAI,GAAGqB,IAAI,CAAC,CAAD,CAAjB;AACA,UAAME,cAAc,GAAGF,IAAI,CAAC,CAAD,CAA3B;;AACA,QAAI,CAACL,WAAW,CAACQ,EAAb,IAAmB,CAAC,KAAKb,eAAL,CAAqBpB,OAArB,EAA8BgC,cAA9B,CAAxB,EAAuE;AACrE,YAAM,IAAIH,KAAJ,CAAU,kBAAV,CAAN;AACD;;AACD,WAAO;AACLpB,MAAAA,IADK;AAELD,MAAAA,MAAM,EAAEwB,cAFH;AAGLtB,MAAAA,QAAQ,EAAEe,WAAW,CAACQ;AAHjB,KAAP;AAKD;;AAEDb,EAAAA,eAAe,CAAEc,OAAF,EAAWC,OAAX,EAAoB;AACjC,WAAOD,OAAO,CAACE,WAAR,GAAsBC,OAAtB,CAA8B,KAA9B,EAAqC,EAArC,MAA6CF,OAAO,CAACC,WAAR,GAAsBC,OAAtB,CAA8B,KAA9B,EAAqC,EAArC,CAApD;AACD;;AAjGa;;ACFhB,MAAMC,YAAN,CAAmB;AACjB1C,EAAAA,WAAW,CAAE2C,KAAF,EAASC,MAAT,EAAiB;AAC1B,SAAKD,KAAL,GAAaA,KAAb;AACA,SAAKC,MAAL,GAAcA,MAAd;AACD;;AAEe,QAAVpC,UAAU,CAAEJ,OAAF,EAAW;AACzB,UAAMyC,QAAQ,GAAG,MAAM,KAAKF,KAAL,CAAY,GAAE,KAAKC,MAAL,CAAYE,OAAQ,SAAQ1C,OAAQ,gBAAlD,CAAvB;AACA,UAAM2C,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,WAAOD,IAAP;AACD;;AAEwB,QAAnBjB,mBAAmB,CAAE1B,OAAF,EAAW;AAClC,WAAO,KAAKI,UAAL,CAAiB,kBAAiBJ,OAAQ,EAA1C,CAAP;AACD;;AAdgB;;;;;;ACGnB,MAAM6C,IAAN,CAAW;AACTjD,EAAAA,WAAW,CAAE2C,KAAF,EAAS;AAClB,SAAKA,KAAL,GAAaA,KAAb;AACD;;AAEQ,QAAHO,GAAG,CAAEC,GAAF,EAAO;AACd,WAAO,KAAKC,aAAL,CAAmBD,GAAnB,CAAP;AACD;;AAEa,QAARE,QAAQ,CAAEF,GAAF,EAAOJ,IAAP,EAAa;AACzB,WAAO,KAAKK,aAAL,CAAmBD,GAAnB,EAAwB;AAC7BG,MAAAA,MAAM,EAAE,MADqB;AAE7BC,MAAAA,OAAO,EAAE;AACP,wBAAgB;AADT,OAFoB;AAK7BR,MAAAA,IAAI,EAAES,IAAI,CAACC,SAAL,CAAeV,IAAf;AALuB,KAAxB,CAAP;AAOD;;AAEkB,QAAbK,aAAa,CAAED,GAAF,EAAOO,OAAO,GAAG,EAAjB,EAAqB;AACtC,UAAMC,UAAU,GAAG,IAAIC,mCAAJ,EAAnB;AACA,UAAMC,KAAK,GAAGC,UAAU,CAAC,MAAMH,UAAU,CAACI,KAAX,EAAP,EAA2B,KAA3B,CAAxB;AACA,WAAO,KAAKpB,KAAL,CAAWQ,GAAX,kCACFO,OADE;AAELM,MAAAA,WAAW,EAAE,MAFR;AAGLC,MAAAA,MAAM,EAAEN,UAAU,CAACM;AAHd,QAIJ/C,IAJI,CAICR,MAAM,IAAI;AAChBwD,MAAAA,YAAY,CAACL,KAAD,CAAZ;AACA,aAAOnD,MAAP;AACD,KAPM,CAAP;AAQD;;AA9BQ;;ACEX,MAAMyD,gBAAN,CAAuB;AACrBnE,EAAAA,WAAW,CAAEC,GAAG,GAAG,IAAR,EAAc0C,KAAd,EAAqB;AAC9B,SAAKyB,SAAL,GAAiB,IAAIrE,SAAJ,CAAcE,GAAd,EAAmB,IAAIyC,YAAJ,CAAiBC,KAAjB,EAAwB;AAAEG,MAAAA,OAAO,EAAE;AAAX,KAAxB,CAAnB,CAAjB;AAEA,SAAKuB,IAAL,GAAY,IAAIpB,IAAJ,CAASN,KAAT,CAAZ;AACA,SAAK2B,MAAL,GAAc,EAAd;AACD;;AAEY,SAANC,MAAM,CAAEH,SAAF,EAAazB,KAAb,EAAoB;AAC/B,UAAM6B,QAAQ,GAAG,IAAIL,gBAAJ,CAAqB,IAArB,EAA2BxB,KAA3B,CAAjB;AACA6B,IAAAA,QAAQ,CAACJ,SAAT,GAAqBA,SAArB;AACA,WAAOI,QAAP;AACD;;AAEsB,QAAjBC,iBAAiB,CAAEC,QAAF,EAAY;AACjC,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACC,GAAjD,CAAN;AACA,UAAM2F,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMmE,WAAW,GAAGF,aAAa,CAACG,YAAd,CAA2B9F,GAA3B,CACjBuD,OADiB,CACT,SADS,EACEkC,KADF,EACSlC,OADT,CACiB,cADjB,EACiC7B,MADjC,CAApB;AAEA,WAAOmE,WAAP;AACD;;AAEqB,QAAhBE,gBAAgB,CAAEP,QAAF,EAAY;AAChC,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACE,kBAAjD,CAAN;AACA,UAAM0F,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMsE,UAAU,GAAGL,aAAa,CAACG,YAAd,CAA2B7F,kBAA3B,CAChBsD,OADgB,CACR,SADQ,EACGkC,KADH,EACUlC,OADV,CACkB,cADlB,EACkC7B,MADlC,CAAnB;AAEA,WAAOsE,UAAP;AACD;;AAEoB,QAAfC,eAAe,CAAET,QAAF,EAAYU,OAAZ,EAAqB;AACxC,UAAM,CAACT,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACK,oBAAjD,CAAN;AACA,UAAMuF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B/F,eAAe,CAACK,oBAA3C,EACTmD,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,EACiD6B,OADjD,CACyD,UADzD,EACqE2C,OADrE,CAAZ;AAEA,WAAOjC,GAAP;AACD;;AAE2B,QAAtBkC,sBAAsB,CAAEX,QAAF,EAAY;AACtC,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACM,aAAjD,CAAN;AACA,UAAMsF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B/F,eAAe,CAACM,aAA3C,EACTkD,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,CAAZ;AAEA,WAAOuC,GAAP;AACD;;AAEoB,QAAfmC,eAAe,CAAEZ,QAAF,EAAY;AAC/B,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACO,kBAAjD,CAAN;AACA,UAAMqF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B/F,eAAe,CAACO,kBAA3C,EACTiD,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,CAAZ;AAEA,WAAOuC,GAAP;AACD;;AAEmC,QAA9BoC,8BAA8B,CAAEb,QAAF,EAAY;AAC9C,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACQ,qBAAjD,CAAN;AACA,UAAMoF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B/F,eAAe,CAACQ,qBAA3C,EACTgD,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,CAAZ;AAEA,WAAOuC,GAAP;AACD;;AAEwB,QAAnBqC,mBAAmB,CAAEpF,OAAF,EAAWqF,UAAX,EAAuB;AAC9C,UAAMZ,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0B1E,OAA1B,CAA5B;AACA,WAAO,CAAC,CAACyE,aAAa,CAACG,YAAd,CAA2BS,UAA3B,CAAT;AACD;;AAEyB,QAApBX,oBAAoB,CAAE1E,OAAF,EAAW;AACnC,QAAI,KAAKkE,MAAL,CAAYlE,OAAZ,CAAJ,EAA0B;AACxB,aAAO,KAAKkE,MAAL,CAAYlE,OAAZ,CAAP;AACD;;AACD,UAAM;AAAEQ,MAAAA,MAAF;AAAUC,MAAAA;AAAV,QAAmB,MAAM,KAAK6E,mBAAL,CAAyBtF,OAAzB,CAA/B;AACA,UAAMyE,aAAa,GAAG,KAAKc,kBAAL,CAAwB/E,MAAxB,EAAgCC,IAAhC,CAAtB;AACA,SAAKyD,MAAL,CAAYlE,OAAZ,IAAuByE,aAAvB;AACA,WAAOA,aAAP;AACD;;AAEuB,QAAlBc,kBAAkB,CAAE/E,MAAF,EAAUC,IAAV,EAAgB;AACtC,UAAM+E,QAAQ,GAAIhF,MAAM,KAAK,WAAX,IAA0BA,MAAM,KAAK,YAAtC,GAAsD,MAAtD,GAA+D,OAAhF;AACA,UAAMiF,WAAW,GAAIhF,IAAI,KAAKiF,SAAT,IAAsBjF,IAAI,CAACkF,QAAL,OAAoB,KAA3C,GAAoD,EAApD,GAA0D,IAAGlF,IAAK,EAAtF;AACA,UAAMmF,aAAa,GAAG,aAAaC,IAAb,CAAkBrF,MAAlB,EAA0B,CAA1B,CAAtB,CAHsC;;AAItC,QAAI,CAACoF,aAAL,EAAoB;AAClB,YAAM,IAAI/D,KAAJ,CAAW,mBAAkBrB,MAAO,EAApC,CAAN;AACD;;AACD,UAAMsF,SAAS,GAAG,MAAM,KAAK7B,IAAL,CAAUnB,GAAV,CAAe,GAAE0C,QAAS,MAAKI,aAAc,GAAEH,WAAY,uBAA3D,CAAxB;AACA,UAAMhB,aAAa,GAAG,MAAMqB,SAAS,CAAClD,IAAV,EAA5B;AACA,WAAO6B,aAAP;AACD;;AAEwB,QAAnBa,mBAAmB,CAAEtF,OAAF,EAAW;AAClC,WAAO,KAAKgE,SAAL,CAAejE,QAAf,CAAwBC,OAAxB,CAAP;AACD;;AAEwB,QAAnBwE,mBAAmB,CAAExE,OAAF,EAAW+F,WAAX,EAAwB;AAC/C,QAAI,EAAC,MAAM,KAAKX,mBAAL,CAAyBpF,OAAzB,EAAkC+F,WAAlC,CAAP,CAAJ,EAA2D;AACzD,YAAM,IAAIlE,KAAJ,CAAW,uBAAsBkE,WAAY,UAAS/F,OAAQ,GAA9D,CAAN;AACD;AACF;;AAvGoB;;ACLvB,MAAMgG,iBAAN,CAAwB;AACtBpG,EAAAA,WAAW,CAAEqG,KAAF,EAASC,GAAG,GAAG,IAAf,EAAqB;AAC9B,QAAIA,GAAG,KAAK,IAAZ,EAAkB;AAChBA,MAAAA,GAAG,GAAGC,OAAO,CAAC,KAAD,CAAb;AACAD,MAAAA,GAAG,CAACE,OAAJ,GAAcD,OAAO,CAAC,aAAD,CAArB;AACD;;AACD,SAAKD,GAAL,GAAWA,GAAX;AACA,UAAMG,YAAY,GAAGC,MAAM,CAACC,IAAP,CAAYN,KAAK,CAACO,IAAN,CAAW,EAAX,CAAZ,CAArB;AACA,SAAKC,OAAL,GAAe,IAAI,KAAKP,GAAL,CAASE,OAAb,CAAqBC,YAArB,CAAf;AACD;;AAE+B,SAAzBK,yBAAyB,CAAE;AAChCC,IAAAA,YADgC;AAEhCC,IAAAA,MAFgC;AAGhCC,IAAAA,EAHgC;AAIhCC,IAAAA;AAJgC,GAAF,EAK7B;AACD,QAAID,EAAE,CAACE,WAAP,EAAoB;AAClBF,MAAAA,EAAE,GAAGA,EAAE,CAACE,WAAH,EAAL;AACD;;AAED,WAAO,IAAIf,iBAAJ,CAAsB,CAC3BW,YAD2B,EAE3BC,MAAM,IAAI,GAFiB,EAG3BC,EAH2B,EAI3BC,OAJ2B,CAAtB,CAAP;AAMD;;AAEDE,EAAAA,IAAI,CAAEC,aAAF,EAAiB;AACnB,WAAO,KAAKR,OAAL,CAAaO,IAAb,CAAkB,KAAKd,GAAL,CAASgB,UAAT,CAAoBC,OAApB,CAA4BF,aAA5B,CAAlB,CAAP;AACD;;AAEDG,EAAAA,MAAM,CAAEC,UAAF,EAAcC,SAAd,EAAyB;AAC7B,WAAO,KAAKb,OAAL,CAAaW,MAAb,CAAoBC,UAApB,EAAgCC,SAAhC,CAAP;AACD;;AAnCqB;;ACExB,MAAMC,kBAAN,CAAyB;AACvB3H,EAAAA,WAAW,CAAE4H,KAAF,EAAS;AAClB,SAAKA,KAAL,GAAaA,KAAb;AACD;;AAEDC,EAAAA,yBAAyB,CAAEC,UAAF,EAAcC,UAAU,GAAG,IAA3B,EAAiC;AACxD,UAAM;AACJhB,MAAAA,YADI;AAEJC,MAAAA,MAFI;AAGJgB,MAAAA,UAHI;AAIJd,MAAAA,OAJI;AAKJe,MAAAA,MALI;AAMJP,MAAAA,SAAS,EAAEQ;AANP,QAOFJ,UAPJ;;AASA,QAAI,CAACI,iBAAD,IAAsBH,UAAU,KAAK,IAAzC,EAA+C;AAC7C,YAAM,IAAI9F,KAAJ,CAAU,kCAAV,CAAN;AACD;;AAED,QAAIgF,EAAJ,EAAQS,SAAR;;AACA,QAAIQ,iBAAJ,EAAuB;AACrB,UAAI,CAACJ,UAAU,CAACb,EAAhB,EAAoB;AAClB,cAAM,IAAIhF,KAAJ,CAAU,sCAAV,CAAN;AACD;;AACDgF,MAAAA,EAAE,GAAGa,UAAU,CAACb,EAAhB;AACAS,MAAAA,SAAS,GAAGQ,iBAAZ;AACD,KAND,MAMO;AACLjB,MAAAA,EAAE,GAAG,KAAKW,KAAL,CAAWO,GAAX,EAAL;AACAT,MAAAA,SAAS,GAAGtB,iBAAiB,CAACU,yBAAlB,CAA4C;AACtDC,QAAAA,YADsD;AAEtDC,QAAAA,MAFsD;AAGtDC,QAAAA,EAHsD;AAItDC,QAAAA;AAJsD,OAA5C,EAKTE,IALS,CAKJW,UALI,CAAZ;AAMD;;AAED,WAAO;AACLhB,MAAAA,YADK;AAELiB,MAAAA,UAFK;AAGLd,MAAAA,OAHK;AAILD,MAAAA,EAJK;AAKLD,MAAAA,MAAM,EAAEA,MAAM,IAAI,IALb;AAMLiB,MAAAA,MANK;AAOLP,MAAAA;AAPK,KAAP;AASD;;AAEDU,EAAAA,eAAe,CAAEC,cAAF,EAAkBC,SAAlB,EAA6BC,QAA7B,EAAuC;AACpD,WAAO;AAAEC,MAAAA,GAAG,EAAEH,cAAP;AAAuBE,MAAAA,QAAvB;AAAiCD,MAAAA;AAAjC,KAAP;AACD;;AAEDG,EAAAA,8BAA8B,CAAEC,QAAF,EAAY;AACxC,WAAO;AAAEA,MAAAA;AAAF,KAAP;AACD;;AArDsB;;ACAzB,MAAMC,KAAN,CAAY;AACVR,EAAAA,GAAG,GAAI;AACL,WAAOS,0BAAM,EAAb;AACD;;AAHS;;ACFZ,MAAMC,eAAN,SAA8B5G,KAA9B,CAAoC;AAClCjC,EAAAA,WAAW,CAAE6G,OAAF,EAAWiC,OAAX,EAAoB;AAC7B,UAAMjC,OAAN;AACA,SAAKiC,OAAL,GAAeA,OAAf;AACD;;AAJiC;;ACEpC,MAAMC,UAAN,CAAiB;AACf/I,EAAAA,WAAW,CAAE2C,KAAF,EAAS;AAClB,SAAKzC,GAAL,GAAW,IAAIwC,YAAJ,CAAiBC,KAAjB,EAAwB;AAAEG,MAAAA,OAAO,EAAE;AAAX,KAAxB,CAAX;AACD;;AAEe,QAAVtC,UAAU,CAAEJ,OAAF,EAAW4I,SAAX,EAAsB;AACpC,QAAI;AACF,YAAMnG,QAAQ,GAAG,MAAM,KAAK3C,GAAL,CAASM,UAAT,CAAoBJ,OAApB,CAAvB;;AACA,UAAIyC,QAAQ,CAACd,MAAT,KAAoB,CAApB,IAAyBc,QAAQ,CAACb,MAAtC,EAA8C;AAC5C,cAAME,IAAI,GAAGW,QAAQ,CAACb,MAAT,CAAgBiH,GAAhB,CAAoBC,MAAM,IAAI;AACzC,gBAAM,CAACC,QAAD,EAAWC,MAAX,EAAmBvI,IAAnB,EAAyBE,IAAzB,IAAiCmI,MAAM,CAAChH,IAAP,CAAYC,KAAZ,CAAkB,GAAlB,CAAvC;AACA,iBAAO;AACLgH,YAAAA,QADK;AAELC,YAAAA,MAFK;AAGLvI,YAAAA,IAHK;AAILE,YAAAA,IAJK;AAKLD,YAAAA,QAAQ,EAAE+B,QAAQ,CAACR;AALd,WAAP;AAOD,SATY,CAAb;AAUA2G,QAAAA,SAAS,CAAC,IAAD,EAAO9G,IAAP,CAAT;AACD,OAZD,MAYO,IAAI,CAACW,QAAQ,CAACb,MAAd,EAAsB;AAC3B;AACAgH,QAAAA,SAAS,CAAC;AAAErI,UAAAA,IAAI,EAAE;AAAR,SAAD,CAAT;AACD,OAHM,MAGA;AACLqI,QAAAA,SAAS,CAAC,IAAI/G,KAAJ,CAAU,wBAAV,CAAD,CAAT;AACD;AACF,KApBD,CAoBE,OAAOoH,CAAP,EAAU;AACVL,MAAAA,SAAS,CAACK,CAAD,CAAT;AACD;AACF;;AA7Bc;;ACOjB,MAAMC,aAAN,CAAoB;AAClBtJ,EAAAA,WAAW,CAAGC,GAAG,GAAG,IAAT,EAAesJ,MAAM,GAAG,IAAxB,EAA8B3B,KAAK,GAAG,IAAtC,EAA4CtB,GAAG,GAAG,IAAlD,EAAyD;AAClE,QAAKiD,MAAM,KAAK,IAAhB,EAAuB;AACrBA,MAAAA,MAAM,GAAG5G,yBAAT;AACD;;AACD,QAAK1C,GAAG,KAAK,IAAb,EAAoB;AAClBA,MAAAA,GAAG,GAAG,IAAI8I,UAAJ,CAAgBQ,MAAhB,CAAN;AACD;;AACD,QAAKjD,GAAG,KAAK,IAAb,EAAoB;AAClBA,MAAAA,GAAG,GAAGC,OAAO,CAAE,KAAF,CAAb;AACD;;AACD,SAAKD,GAAL,GAAWA,GAAX;AACA,SAAKkD,QAAL,GAAgB,IAAIrF,gBAAJ,CAAsBlE,GAAtB,EAA2BsJ,MAA3B,CAAhB;AACA,SAAKlF,IAAL,GAAY,IAAIpB,IAAJ,CAAUsG,MAAV,CAAZ;AACA,SAAKE,kBAAL,GAA0B,IAAI9B,kBAAJ,CAAwBC,KAAK,KAAK,IAAV,GAAiBA,KAAjB,GAAyB,IAAIe,KAAJ,EAAjD,CAA1B;AACD;AAED;AACF;AACA;AACA;AACA;;;AACqB,QAAbjJ,aAAa,CAAGkB,MAAH,EAAY;AAC7B,UAAMiE,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACS,aAA5C,CAAZ;AACA,UAAMmD,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAeC,GAAf,CAAvB;AACA,WAAO,MAAMN,QAAQ,CAACG,IAAT,EAAb;AACD;AAED;AACF;AACA;AACA;AACA;;;AACyB,QAAjBrD,iBAAiB,CAAGiB,MAAH,EAAW8I,IAAX,EAAkB;AACvC,UAAM7E,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACU,iBAA5C,CAAZ;AACA,UAAMkD,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAgB,GAAEC,GAAI,IAAG,IAAIwG,eAAJ,CAAqBD,IAArB,CAA4B,EAArD,CAAvB;AACA,WAAO,MAAM7G,QAAQ,CAACG,IAAT,EAAb;AACD;AAED;AACF;AACA;AACA;AACA;;;AACyB,QAAjBpD,iBAAiB,CAAGgB,MAAH,EAAW8I,IAAX,EAAkB;AACvC,UAAM7E,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACW,iBAA5C,CAAZ;AACA,UAAMiD,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAgB,GAAEC,GAAI,IAAG,IAAIwG,eAAJ,CAAqBD,IAArB,CAA4B,EAArD,CAAvB;AACA,WAAO,MAAM7G,QAAQ,CAACG,IAAT,EAAb;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACiB,QAATnD,SAAS,CAAGe,MAAH,EAAWgJ,UAAX,EAAwB;AACrC,UAAM/E,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,QAAIiJ,GAAG,GAAGhF,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACY,SAA5C,CAAV;AACAgK,IAAAA,GAAG,GAAGA,GAAG,CAACpH,OAAJ,CAAa,cAAb,EAA6BmH,UAA7B,CAAN;AACA,WAAOC,GAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACwB,QAAhB/J,gBAAgB,CAAGc,MAAH,EAAWgJ,UAAX,EAAwB;AAC5C,UAAM/E,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,QAAIiJ,GAAG,GAAGhF,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACa,gBAA5C,CAAV;AACA+J,IAAAA,GAAG,GAAGA,GAAG,CAACpH,OAAJ,CAAa,cAAb,EAA6BmH,UAA7B,CAAN;AACA,UAAM/G,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAe2G,GAAf,CAAvB;AACA,WAAO,MAAMhH,QAAQ,CAACG,IAAT,EAAb;AACD;AAED;AACF;AACA;AACA;AACA;;;AACoB,QAAZ8G,YAAY,CAAGhB,OAAH,EAAa;AAC7B,UAAM/D,WAAW,GAAG,MAAM,KAAKyE,QAAL,CAAc/E,iBAAd,CAAiCqE,OAAjC,CAA1B;AACA,UAAMjG,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAe6B,WAAf,CAAvB;AACA,UAAM;AAAEkD,MAAAA;AAAF,QAAa,MAAMpF,QAAQ,CAACG,IAAT,EAAzB;AACA,WAAOiF,MAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACoB,QAAZ8B,YAAY,CAAGrF,QAAH,EAAaoD,UAAb,EAAyBC,UAAU,GAAG,IAAtC,EAA6C;AAC7D,UAAM7C,UAAU,GAAG,MAAM,KAAKsE,QAAL,CAAcvE,gBAAd,CAAgCP,QAAhC,CAAzB;AACA,UAAM7B,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrB6B,UADqB,EAErB,KAAKuE,kBAAL,CAAwB5B,yBAAxB,CAAmDC,UAAnD,EAA+DC,UAA/D,CAFqB,CAAvB;;AAIA,QAAK,CAAClF,QAAQ,CAACmH,EAAf,EAAoB;AAClB,YAAM,IAAInB,eAAJ,CAAsB,sBAAqBnE,QAAS,EAApD,EAAuDA,QAAvD,CAAN;AACD;;AACD,UAAM;AAAEuF,MAAAA;AAAF,QAAa,MAAMpH,QAAQ,CAACG,IAAT,EAAzB;AACA,WAAOiH,MAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACyB,QAAjBC,iBAAiB,CAAGjC,MAAH,EAAWa,OAAX,EAAqB;AAC1C,UAAM3F,GAAG,GAAG,MAAM,KAAKqG,QAAL,CAAcrE,eAAd,CAA+B2D,OAA/B,EAAwCb,MAAxC,CAAlB;AACA,UAAMpF,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAeC,GAAf,CAAvB;AACA,UAAMJ,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,UAAM;AAAEmH,MAAAA;AAAF,QAAYpH,IAAlB;AACA,WAAOoH,KAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACwB,QAAhBC,gBAAgB,CAAGvD,OAAH,EAAYa,SAAZ,EAAuBoB,OAAO,GAAG,IAAjC,EAAuCb,MAAM,GAAG,IAAhD,EAAuD;AAC3E,QAAKa,OAAO,IAAI,IAAX,IAAmBb,MAAM,KAAK,IAAnC,EAA0C;AACxC,YAAM,IAAIhG,KAAJ,CAAW,uCAAX,CAAN;AACD;;AACD,QAAIoI,eAAJ;;AACA,QAAKvB,OAAL,EAAe;AACb,UAAKb,MAAM,KAAI,MAAM,KAAKuB,QAAL,CAAchE,mBAAd,CAAmCsD,OAAO,CAAC3G,KAAR,CAAe,GAAf,EAAsB,CAAtB,CAAnC,EAA8DlD,eAAe,CAACK,oBAA9E,CAAV,CAAX,EAA4H;AAC1H,YAAK,MAAM,KAAK4K,iBAAL,CAAwBjC,MAAxB,EAAgCa,OAAhC,CAAX,EAAuD;AACrDuB,UAAAA,eAAe,GAAG,KAAK/D,GAAL,CAASgE,SAAT,CAAmBC,UAAnB,CAA+BtC,MAA/B,CAAlB;AACD,SAFD,MAEO;AACL,iBAAO,KAAP;AACD;AACF,OAND,MAMO;AACL,cAAMuC,MAAM,GAAG,MAAM,KAAKhB,QAAL,CAAchE,mBAAd,CAAmCsD,OAAO,CAAC3G,KAAR,CAAe,GAAf,EAAsB,CAAtB,CAAnC,EAA8DlD,eAAe,CAACC,GAA9E,CAArB;;AACA,YAAKsL,MAAL,EAAc;AACZ,gBAAMC,WAAW,GAAG,MAAM,KAAKX,YAAL,CAAmBhB,OAAnB,CAA1B;AACAuB,UAAAA,eAAe,GAAG,KAAK/D,GAAL,CAASgE,SAAT,CAAmBC,UAAnB,CAA+BE,WAA/B,CAAlB;AACD,SAHD,MAGO;AACL,iBAAO,KAAP;AACD;AACF;AACF;;AAED,UAAMC,gBAAgB,GAAG,KAAKpE,GAAL,CAASqE,OAAT,CAAiBC,aAAjB,CAAgCP,eAAe,IAAIpC,MAAnD,CAAzB;;AACA,QAAI;AACF,YAAM4C,QAAQ,GAAGhE,OAAO,CAACW,MAAR,CAAgBkD,gBAAgB,CAAC3E,QAAjB,EAAhB,EAA6C2B,SAA7C,CAAjB;AACA,aAAOmD,QAAP;AACD,KAHD,CAGE,OAAQpK,GAAR,EAAc;AACd,aAAO,KAAP;AACD;AACF;AAED;AACF;AACA;AACA;AACA;AACA;;;AACwB,QAAhBqK,gBAAgB,CAAGhC,OAAH,EAAa;AACjC,UAAMiC,gBAAgB,GAAG,MAAM,KAAKvB,QAAL,CAAcnE,sBAAd,CAAsCyD,OAAtC,CAA/B;AACA,UAAMjG,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAe6H,gBAAf,CAAvB;;AACA,QAAK,CAAClI,QAAQ,CAACmH,EAAf,EAAoB;AAClB,YAAMjH,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAIf,KAAJ,CAAY,uBAAsBuB,IAAI,CAACC,SAAL,CAAgBV,IAAhB,CAAuB,EAAzD,CAAN;AACD;;AACD,UAAM;AAAEiI,MAAAA,MAAF;AAAUjK,MAAAA;AAAV,QAAmB,MAAM8B,QAAQ,CAACG,IAAT,EAA/B;AACA,WAAO;AAAEgI,MAAAA,MAAF;AAAUjK,MAAAA;AAAV,KAAP;AACD;;AAEc,QAATkK,SAAS,CAAGC,aAAH,EAAkB7C,cAAlB,EAAkCC,SAAlC,EAA6CC,QAAQ,GAAG,EAAxD,EAA6D;AAC1E,QAAK,CAACF,cAAN,EAAuB;AACrB,YAAM,IAAIpG,KAAJ,CAAW,iCAAX,CAAN;AACD;;AACD,UAAMkJ,YAAY,GAAG,MAAM,KAAK3B,QAAL,CAAclE,eAAd,CAA+B4F,aAA/B,CAA3B;AACA,UAAMrI,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrB8H,YADqB,EAErB,KAAK1B,kBAAL,CAAwBrB,eAAxB,CAAyCC,cAAzC,EAAyDC,SAAzD,EAAoEC,QAApE,CAFqB,CAAvB;;AAIA,QAAK,CAAC1F,QAAQ,CAACmH,EAAf,EAAoB;AAClB,YAAMjH,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAIf,KAAJ,CAAY,uBAAsBuB,IAAI,CAACC,SAAL,CAAgBV,IAAhB,CAAuB,EAAzD,CAAN;AACD;;AACD,WAAOF,QAAQ,CAACG,IAAT,EAAP;AACD;;AAE6B,QAAxBoI,wBAAwB,CAAGF,aAAH,EAAkBxC,QAAlB,EAA6B;AACzD,QAAK,CAACA,QAAN,EAAiB;AACf,YAAM,IAAIzG,KAAJ,CAAW,yCAAX,CAAN;AACD;;AACD,UAAMoJ,qBAAqB,GAAG,MAAM,KAAK7B,QAAL,CAAcjE,8BAAd,CAA8C2F,aAA9C,CAApC;AACA,UAAMrI,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrBgI,qBADqB,EAErB,KAAK5B,kBAAL,CAAwBhB,8BAAxB,CAAwDC,QAAxD,CAFqB,CAAvB;;AAIA,QAAK,CAAC7F,QAAQ,CAACmH,EAAf,EAAoB;AAClB,YAAMjH,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAIf,KAAJ,CAAY,uBAAsBuB,IAAI,CAACC,SAAL,CAAgBV,IAAhB,CAAuB,EAAzD,CAAN;AACD;;AAED,UAAMA,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;;AACA,QAAK,CAACD,IAAI,CAACuI,OAAX,EAAqB;AACnB,YAAM,IAAIrJ,KAAJ,CAAW,sDAAX,CAAN;AACD;;AAED,WAAOc,IAAP;AACD;;AA1OiB;;;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return uri\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index 0d279f5..f083e75 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -264,7 +264,7 @@ class EndpointResolver { domain, port } = await this.getWellKnownBaseUrl(aDomain); - const apiDescriptor = this.fetchApiDescriptor(domain, port); + const apiDescriptor = await this.fetchApiDescriptor(domain, port); this._cache[aDomain] = apiDescriptor; return apiDescriptor; } diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 8868003..54c213a 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return uri\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return uri\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/src/EndpointResolver.js b/src/EndpointResolver.js index 1ee96cd..d7e836f 100644 --- a/src/EndpointResolver.js +++ b/src/EndpointResolver.js @@ -81,7 +81,7 @@ class EndpointResolver { return this._cache[aDomain] } const { domain, port } = await this.getWellKnownBaseUrl(aDomain) - const apiDescriptor = this.fetchApiDescriptor(domain, port) + const apiDescriptor = await this.fetchApiDescriptor(domain, port) this._cache[aDomain] = apiDescriptor return apiDescriptor } From c3377938f290a0e6e5a52761bf47be87fb86a66c Mon Sep 17 00:00:00 2001 From: Long Li Date: Mon, 16 Aug 2021 19:04:35 +0900 Subject: [PATCH 25/33] return tokeLogo uri --- dist/paymail-client.cjs.js | 4 +++- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 4 +++- dist/paymail-client.esm.js.map | 2 +- src/PaymailClient.js | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index df66c79..49ab460 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -530,7 +530,9 @@ class PaymailClient { const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); let uri = apiDescriptor.capabilities[CapabilityCodes.tokenLogo]; uri = uri.replace('{contractId}', contractId); - return uri; + return { + uri + }; } /** * Get token's info json. diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index 61083d3..749f3e6 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return uri\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index f083e75..263e2af 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -519,7 +519,9 @@ class PaymailClient { const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); let uri = apiDescriptor.capabilities[CapabilityCodes.tokenLogo]; uri = uri.replace('{contractId}', contractId); - return uri; + return { + uri + }; } /** * Get token's info json. diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 54c213a..8b64a9d 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return uri\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":";;;;;;;MAEaA,eAAe,GAAG;AAC7BC,EAAAA,GAAG,EAAE,KADwB;AAE7BC,EAAAA,kBAAkB,EAAE,oBAFS;AAG7BC,EAAAA,uBAAuB,EAAEC,IAAI,CAC3B,gDAD2B,EAE3B,CAAC,eAAD,CAF2B,EAG3B,EAH2B,CAHA;AAQ7BC,EAAAA,oBAAoB,EAAED,IAAI,CACxB,sDADwB,EAExB,EAFwB,EAGxB,EAHwB,CARG;AAa7BE,EAAAA,aAAa,EAAEF,IAAI,CACjB,gCADiB,EAEjB,CAAC,gCAAD,CAFiB,EAGjB,GAHiB,CAbU;AAkB7BG,EAAAA,kBAAkB,EAAEH,IAAI,CACtB,sBADsB,EAEtB,CAAC,8BAAD,EAAiC,gCAAjC,EAAmE,0BAAnE,EAA+F,iBAA/F,CAFsB,EAGtB,KAHsB,CAlBK;AAuB7BI,EAAAA,qBAAqB,EAAEJ,IAAI,CACzB,gEADyB,EAEzB,CAAC,8BAAD,EAAiC,gCAAjC,EAAmE,0BAAnE,EAA+F,iBAA/F,CAFyB,EAGzB,KAHyB,CAvBE;AA4B7BK,EAAAA,aAAa,EAAEL,IAAI,CACjB,mDADiB,EAEjB,CAAC,oBAAD,CAFiB,EAGjB,GAHiB,CA5BU;AAiC7BM,EAAAA,iBAAiB,EAAEN,IAAI,CACrB,wDADqB,EAErB,CAAC,oBAAD,CAFqB,EAGrB,GAHqB,CAjCM;AAsC7BO,EAAAA,iBAAiB,EAAEP,IAAI,CACrB,wDADqB,EAErB,CAAC,oBAAD,CAFqB,EAGrB,GAHqB,CAtCM;AA2C7BQ,EAAAA,SAAS,EAAER,IAAI,CACb,yCADa,EAEb,CAAC,oBAAD,CAFa,EAGb,GAHa,CA3Cc;AAgD7BS,EAAAA,gBAAgB,EAAET,IAAI,CACpB,+CADoB,EAEpB,CAAC,oBAAD,CAFoB,EAGpB,GAHoB;AAhDO;;ACF/B;AAEA,MAAMU,SAAN,CAAgB;AACdC,EAAAA,WAAW,CAAEC,GAAF,EAAOC,GAAP,EAAY;AACrB,SAAKD,GAAL,GAAWA,GAAX;AACA,SAAKC,GAAL,GAAWA,GAAX;AACD;;AAEa,QAARC,QAAQ,CAAEC,OAAF,EAAW;AACvB,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,WAAKN,GAAL,CAASO,UAAT,CAAqB,kBAAiBJ,OAAQ,EAA9C,EAAiD,OAAOK,GAAP,EAAYC,MAAZ,KAAuB;AACtE,YAAI;AACF,cAAID,GAAG,KAAKA,GAAG,CAACE,IAAJ,KAAa,SAAb,IAA0BF,GAAG,CAACE,IAAJ,KAAa,WAA5C,CAAP,EAAiE;AAC/D,mBAAOL,OAAO,CAAC;AACbM,cAAAA,MAAM,EAAER,OADK;AAEbS,cAAAA,IAAI,EAAE,GAFO;AAGbC,cAAAA,QAAQ,EAAE;AAHG,aAAD,CAAd;AAKD;;AACD,cAAIL,GAAJ,EAAS;AACP,mBAAOF,MAAM,CAACE,GAAD,CAAb;AACD;;AAED,gBAAM;AAAEM,YAAAA,IAAI,EAAEC,aAAR;AAAuBH,YAAAA,IAAvB;AAA6BC,YAAAA;AAA7B,cAA0CJ,MAAM,CAAC,CAAD,CAAtD;AACAJ,UAAAA,OAAO,CAAC;AACNM,YAAAA,MAAM,EAAEI,aADF;AAENH,YAAAA,IAFM;AAGNC,YAAAA,QAAQ,EAAE,KAAKG,mBAAL,CAAyBD,aAAzB,EAAwCZ,OAAxC,KAAoDU;AAHxD,WAAD,CAAP;AAKD,SAlBD,CAkBE,OAAOL,GAAP,EAAY;AACZ,iBAAOF,MAAM,CAACE,GAAD,CAAb;AACD;AACF,OAtBD;AAuBD,KAxBM,EAwBJS,IAxBI,CAwBCR,MAAM,IAAI;AAChB,UAAIA,MAAM,CAACI,QAAX,EAAqB;AACnB,eAAOJ,MAAP;AACD,OAFD,MAEO;AACL,eAAO,KAAKS,cAAL,CAAoBf,OAApB,CAAP;AACD;AACF,KA9BM,EA8BHK,GAAD,IAAS;AACVW,MAAAA,OAAO,CAACC,KAAR,CAAcZ,GAAd;AACA,aAAOA,GAAP;AACD,KAjCM,CAAP;AAkCD;;AAEDQ,EAAAA,mBAAmB,CAAEK,iBAAF,EAAqBC,cAArB,EAAqC;AACtD,QAAI,KAAKC,eAAL,CAAqBF,iBAArB,EAAwCC,cAAxC,CAAJ,EAA6D;AAC3D,aAAO,IAAP;AACD,KAFD,MAEO,IAAI,KAAKE,sBAAL,CAA4BH,iBAA5B,EAA+CC,cAA/C,CAAJ,EAAoE;AACzE,aAAO,IAAP;AACD,KAFM,MAEA,IAAI,KAAKG,gBAAL,CAAsBH,cAAtB,CAAJ,EAA2C;AAAE;AAClD,aAAO,KAAKC,eAAL,CAAqB,2CAArB,EAAkEF,iBAAlE,KAAwF,KAAKE,eAAL,CAAqB,yCAArB,EAAgEF,iBAAhE,CAA/F;AACD,KAFM,MAEA,IAAI,KAAKK,wBAAL,CAA8BJ,cAA9B,CAAJ,EAAmD;AACxD,aAAO,KAAKC,eAAL,CAAqB,sCAArB,EAA6DF,iBAA7D,CAAP;AACD,KAFM,MAEA,IAAI,KAAKE,eAAL,CAAqB,WAArB,EAAkCF,iBAAlC,CAAJ,EAA0D;AAC/D,aAAO,IAAP;AACD,KAFM,MAEA,IAAI,KAAKM,mBAAL,CAAyBN,iBAAzB,CAAJ,EAAiD;AACtD,aAAO,IAAP;AACD,KAFM,MAEA;AACL,aAAO,KAAP;AACD;AACF;;AAEDM,EAAAA,mBAAmB,CAAExB,OAAF,EAAW;AAC5B,WAAO,KAAKoB,eAAL,CAAqBpB,OAArB,EAA8B,iBAA9B,KAAoD,KAAKoB,eAAL,CAAqBpB,OAArB,EAA8B,qBAA9B,CAA3D;AACD;;AAEDqB,EAAAA,sBAAsB,CAAEH,iBAAF,EAAqBC,cAArB,EAAqC;AACzD,WAAO,KAAKC,eAAL,CAAqBF,iBAArB,EAAyC,OAAMC,cAAe,EAA9D,CAAP;AACD;;AAEDG,EAAAA,gBAAgB,CAAEtB,OAAF,EAAW;AACzB,WAAO,KAAKoB,eAAL,CAAqB,aAArB,EAAoCpB,OAApC,CAAP;AACD;;AAEDuB,EAAAA,wBAAwB,CAAEvB,OAAF,EAAW;AACjC,WAAO,KAAKoB,eAAL,CAAqB,sBAArB,EAA6CpB,OAA7C,CAAP;AACD;;AAEmB,QAAde,cAAc,CAAEf,OAAF,EAAW;AAC7B,UAAMyB,WAAW,GAAG,MAAM,KAAK3B,GAAL,CAAS4B,mBAAT,CAA6B1B,OAA7B,CAA1B;;AACA,QAAIyB,WAAW,CAACE,MAAZ,KAAuB,CAAvB,IAA4B,CAACF,WAAW,CAACG,MAA7C,EAAqD;AACnD,YAAM,IAAIC,KAAJ,CAAU,kBAAV,CAAN;AACD;;AACD,UAAMC,IAAI,GAAGL,WAAW,CAACG,MAAZ,CAAmB,CAAnB,EAAsBE,IAAtB,CAA2BC,KAA3B,CAAiC,GAAjC,CAAb;AACA,UAAMtB,IAAI,GAAGqB,IAAI,CAAC,CAAD,CAAjB;AACA,UAAME,cAAc,GAAGF,IAAI,CAAC,CAAD,CAA3B;;AACA,QAAI,CAACL,WAAW,CAACQ,EAAb,IAAmB,CAAC,KAAKb,eAAL,CAAqBpB,OAArB,EAA8BgC,cAA9B,CAAxB,EAAuE;AACrE,YAAM,IAAIH,KAAJ,CAAU,kBAAV,CAAN;AACD;;AACD,WAAO;AACLpB,MAAAA,IADK;AAELD,MAAAA,MAAM,EAAEwB,cAFH;AAGLtB,MAAAA,QAAQ,EAAEe,WAAW,CAACQ;AAHjB,KAAP;AAKD;;AAEDb,EAAAA,eAAe,CAAEc,OAAF,EAAWC,OAAX,EAAoB;AACjC,WAAOD,OAAO,CAACE,WAAR,GAAsBC,OAAtB,CAA8B,KAA9B,EAAqC,EAArC,MAA6CF,OAAO,CAACC,WAAR,GAAsBC,OAAtB,CAA8B,KAA9B,EAAqC,EAArC,CAApD;AACD;;AAjGa;;ACFhB,MAAMC,YAAN,CAAmB;AACjB1C,EAAAA,WAAW,CAAE2C,KAAF,EAASC,MAAT,EAAiB;AAC1B,SAAKD,KAAL,GAAaA,KAAb;AACA,SAAKC,MAAL,GAAcA,MAAd;AACD;;AAEe,QAAVpC,UAAU,CAAEJ,OAAF,EAAW;AACzB,UAAMyC,QAAQ,GAAG,MAAM,KAAKF,KAAL,CAAY,GAAE,KAAKC,MAAL,CAAYE,OAAQ,SAAQ1C,OAAQ,gBAAlD,CAAvB;AACA,UAAM2C,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,WAAOD,IAAP;AACD;;AAEwB,QAAnBjB,mBAAmB,CAAE1B,OAAF,EAAW;AAClC,WAAO,KAAKI,UAAL,CAAiB,kBAAiBJ,OAAQ,EAA1C,CAAP;AACD;;AAdgB;;;;;;ACGnB,MAAM6C,IAAN,CAAW;AACTjD,EAAAA,WAAW,CAAE2C,KAAF,EAAS;AAClB,SAAKA,KAAL,GAAaA,KAAb;AACD;;AAEQ,QAAHO,GAAG,CAAEC,GAAF,EAAO;AACd,WAAO,KAAKC,aAAL,CAAmBD,GAAnB,CAAP;AACD;;AAEa,QAARE,QAAQ,CAAEF,GAAF,EAAOJ,IAAP,EAAa;AACzB,WAAO,KAAKK,aAAL,CAAmBD,GAAnB,EAAwB;AAC7BG,MAAAA,MAAM,EAAE,MADqB;AAE7BC,MAAAA,OAAO,EAAE;AACP,wBAAgB;AADT,OAFoB;AAK7BR,MAAAA,IAAI,EAAES,IAAI,CAACC,SAAL,CAAeV,IAAf;AALuB,KAAxB,CAAP;AAOD;;AAEkB,QAAbK,aAAa,CAAED,GAAF,EAAOO,OAAO,GAAG,EAAjB,EAAqB;AACtC,UAAMC,UAAU,GAAG,IAAIC,eAAJ,EAAnB;AACA,UAAMC,KAAK,GAAGC,UAAU,CAAC,MAAMH,UAAU,CAACI,KAAX,EAAP,EAA2B,KAA3B,CAAxB;AACA,WAAO,KAAKpB,KAAL,CAAWQ,GAAX,kCACFO,OADE;AAELM,MAAAA,WAAW,EAAE,MAFR;AAGLC,MAAAA,MAAM,EAAEN,UAAU,CAACM;AAHd,QAIJ/C,IAJI,CAICR,MAAM,IAAI;AAChBwD,MAAAA,YAAY,CAACL,KAAD,CAAZ;AACA,aAAOnD,MAAP;AACD,KAPM,CAAP;AAQD;;AA9BQ;;ACEX,MAAMyD,gBAAN,CAAuB;AACrBnE,EAAAA,WAAW,CAAEC,GAAG,GAAG,IAAR,EAAc0C,KAAd,EAAqB;AAC9B,SAAKyB,SAAL,GAAiB,IAAIrE,SAAJ,CAAcE,GAAd,EAAmB,IAAIyC,YAAJ,CAAiBC,KAAjB,EAAwB;AAAEG,MAAAA,OAAO,EAAE;AAAX,KAAxB,CAAnB,CAAjB;AAEA,SAAKuB,IAAL,GAAY,IAAIpB,IAAJ,CAASN,KAAT,CAAZ;AACA,SAAK2B,MAAL,GAAc,EAAd;AACD;;AAEY,SAANC,MAAM,CAAEH,SAAF,EAAazB,KAAb,EAAoB;AAC/B,UAAM6B,QAAQ,GAAG,IAAIL,gBAAJ,CAAqB,IAArB,EAA2BxB,KAA3B,CAAjB;AACA6B,IAAAA,QAAQ,CAACJ,SAAT,GAAqBA,SAArB;AACA,WAAOI,QAAP;AACD;;AAEsB,QAAjBC,iBAAiB,CAAEC,QAAF,EAAY;AACjC,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACC,GAAjD,CAAN;AACA,UAAM2F,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMmE,WAAW,GAAGF,aAAa,CAACG,YAAd,CAA2B9F,GAA3B,CACjBuD,OADiB,CACT,SADS,EACEkC,KADF,EACSlC,OADT,CACiB,cADjB,EACiC7B,MADjC,CAApB;AAEA,WAAOmE,WAAP;AACD;;AAEqB,QAAhBE,gBAAgB,CAAEP,QAAF,EAAY;AAChC,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACE,kBAAjD,CAAN;AACA,UAAM0F,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMsE,UAAU,GAAGL,aAAa,CAACG,YAAd,CAA2B7F,kBAA3B,CAChBsD,OADgB,CACR,SADQ,EACGkC,KADH,EACUlC,OADV,CACkB,cADlB,EACkC7B,MADlC,CAAnB;AAEA,WAAOsE,UAAP;AACD;;AAEoB,QAAfC,eAAe,CAAET,QAAF,EAAYU,OAAZ,EAAqB;AACxC,UAAM,CAACT,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACK,oBAAjD,CAAN;AACA,UAAMuF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B/F,eAAe,CAACK,oBAA3C,EACTmD,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,EACiD6B,OADjD,CACyD,UADzD,EACqE2C,OADrE,CAAZ;AAEA,WAAOjC,GAAP;AACD;;AAE2B,QAAtBkC,sBAAsB,CAAEX,QAAF,EAAY;AACtC,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACM,aAAjD,CAAN;AACA,UAAMsF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B/F,eAAe,CAACM,aAA3C,EACTkD,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,CAAZ;AAEA,WAAOuC,GAAP;AACD;;AAEoB,QAAfmC,eAAe,CAAEZ,QAAF,EAAY;AAC/B,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACO,kBAAjD,CAAN;AACA,UAAMqF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B/F,eAAe,CAACO,kBAA3C,EACTiD,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,CAAZ;AAEA,WAAOuC,GAAP;AACD;;AAEmC,QAA9BoC,8BAA8B,CAAEb,QAAF,EAAY;AAC9C,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACQ,qBAAjD,CAAN;AACA,UAAMoF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B/F,eAAe,CAACQ,qBAA3C,EACTgD,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,CAAZ;AAEA,WAAOuC,GAAP;AACD;;AAEwB,QAAnBqC,mBAAmB,CAAEpF,OAAF,EAAWqF,UAAX,EAAuB;AAC9C,UAAMZ,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0B1E,OAA1B,CAA5B;AACA,WAAO,CAAC,CAACyE,aAAa,CAACG,YAAd,CAA2BS,UAA3B,CAAT;AACD;;AAEyB,QAApBX,oBAAoB,CAAE1E,OAAF,EAAW;AACnC,QAAI,KAAKkE,MAAL,CAAYlE,OAAZ,CAAJ,EAA0B;AACxB,aAAO,KAAKkE,MAAL,CAAYlE,OAAZ,CAAP;AACD;;AACD,UAAM;AAAEQ,MAAAA,MAAF;AAAUC,MAAAA;AAAV,QAAmB,MAAM,KAAK6E,mBAAL,CAAyBtF,OAAzB,CAA/B;AACA,UAAMyE,aAAa,GAAG,MAAM,KAAKc,kBAAL,CAAwB/E,MAAxB,EAAgCC,IAAhC,CAA5B;AACA,SAAKyD,MAAL,CAAYlE,OAAZ,IAAuByE,aAAvB;AACA,WAAOA,aAAP;AACD;;AAEuB,QAAlBc,kBAAkB,CAAE/E,MAAF,EAAUC,IAAV,EAAgB;AACtC,UAAM+E,QAAQ,GAAIhF,MAAM,KAAK,WAAX,IAA0BA,MAAM,KAAK,YAAtC,GAAsD,MAAtD,GAA+D,OAAhF;AACA,UAAMiF,WAAW,GAAIhF,IAAI,KAAKiF,SAAT,IAAsBjF,IAAI,CAACkF,QAAL,OAAoB,KAA3C,GAAoD,EAApD,GAA0D,IAAGlF,IAAK,EAAtF;AACA,UAAMmF,aAAa,GAAG,aAAaC,IAAb,CAAkBrF,MAAlB,EAA0B,CAA1B,CAAtB,CAHsC;;AAItC,QAAI,CAACoF,aAAL,EAAoB;AAClB,YAAM,IAAI/D,KAAJ,CAAW,mBAAkBrB,MAAO,EAApC,CAAN;AACD;;AACD,UAAMsF,SAAS,GAAG,MAAM,KAAK7B,IAAL,CAAUnB,GAAV,CAAe,GAAE0C,QAAS,MAAKI,aAAc,GAAEH,WAAY,uBAA3D,CAAxB;AACA,UAAMhB,aAAa,GAAG,MAAMqB,SAAS,CAAClD,IAAV,EAA5B;AACA,WAAO6B,aAAP;AACD;;AAEwB,QAAnBa,mBAAmB,CAAEtF,OAAF,EAAW;AAClC,WAAO,KAAKgE,SAAL,CAAejE,QAAf,CAAwBC,OAAxB,CAAP;AACD;;AAEwB,QAAnBwE,mBAAmB,CAAExE,OAAF,EAAW+F,WAAX,EAAwB;AAC/C,QAAI,EAAC,MAAM,KAAKX,mBAAL,CAAyBpF,OAAzB,EAAkC+F,WAAlC,CAAP,CAAJ,EAA2D;AACzD,YAAM,IAAIlE,KAAJ,CAAW,uBAAsBkE,WAAY,UAAS/F,OAAQ,GAA9D,CAAN;AACD;AACF;;AAvGoB;;ACLvB,MAAMgG,iBAAN,CAAwB;AACtBpG,EAAAA,WAAW,CAAEqG,KAAF,EAASC,GAAG,GAAG,IAAf,EAAqB;AAC9B,QAAIA,GAAG,KAAK,IAAZ,EAAkB;AAChBA,MAAAA,GAAG,GAAGC,OAAO,CAAC,KAAD,CAAb;AACAD,MAAAA,GAAG,CAACE,OAAJ,GAAcD,OAAO,CAAC,aAAD,CAArB;AACD;;AACD,SAAKD,GAAL,GAAWA,GAAX;AACA,UAAMG,YAAY,GAAGC,MAAM,CAACC,IAAP,CAAYN,KAAK,CAACO,IAAN,CAAW,EAAX,CAAZ,CAArB;AACA,SAAKC,OAAL,GAAe,IAAI,KAAKP,GAAL,CAASE,OAAb,CAAqBC,YAArB,CAAf;AACD;;AAE+B,SAAzBK,yBAAyB,CAAE;AAChCC,IAAAA,YADgC;AAEhCC,IAAAA,MAFgC;AAGhCC,IAAAA,EAHgC;AAIhCC,IAAAA;AAJgC,GAAF,EAK7B;AACD,QAAID,EAAE,CAACE,WAAP,EAAoB;AAClBF,MAAAA,EAAE,GAAGA,EAAE,CAACE,WAAH,EAAL;AACD;;AAED,WAAO,IAAIf,iBAAJ,CAAsB,CAC3BW,YAD2B,EAE3BC,MAAM,IAAI,GAFiB,EAG3BC,EAH2B,EAI3BC,OAJ2B,CAAtB,CAAP;AAMD;;AAEDE,EAAAA,IAAI,CAAEC,aAAF,EAAiB;AACnB,WAAO,KAAKR,OAAL,CAAaO,IAAb,CAAkB,KAAKd,GAAL,CAASgB,UAAT,CAAoBC,OAApB,CAA4BF,aAA5B,CAAlB,CAAP;AACD;;AAEDG,EAAAA,MAAM,CAAEC,UAAF,EAAcC,SAAd,EAAyB;AAC7B,WAAO,KAAKb,OAAL,CAAaW,MAAb,CAAoBC,UAApB,EAAgCC,SAAhC,CAAP;AACD;;AAnCqB;;ACExB,MAAMC,kBAAN,CAAyB;AACvB3H,EAAAA,WAAW,CAAE4H,KAAF,EAAS;AAClB,SAAKA,KAAL,GAAaA,KAAb;AACD;;AAEDC,EAAAA,yBAAyB,CAAEC,UAAF,EAAcC,UAAU,GAAG,IAA3B,EAAiC;AACxD,UAAM;AACJhB,MAAAA,YADI;AAEJC,MAAAA,MAFI;AAGJgB,MAAAA,UAHI;AAIJd,MAAAA,OAJI;AAKJe,MAAAA,MALI;AAMJP,MAAAA,SAAS,EAAEQ;AANP,QAOFJ,UAPJ;;AASA,QAAI,CAACI,iBAAD,IAAsBH,UAAU,KAAK,IAAzC,EAA+C;AAC7C,YAAM,IAAI9F,KAAJ,CAAU,kCAAV,CAAN;AACD;;AAED,QAAIgF,EAAJ,EAAQS,SAAR;;AACA,QAAIQ,iBAAJ,EAAuB;AACrB,UAAI,CAACJ,UAAU,CAACb,EAAhB,EAAoB;AAClB,cAAM,IAAIhF,KAAJ,CAAU,sCAAV,CAAN;AACD;;AACDgF,MAAAA,EAAE,GAAGa,UAAU,CAACb,EAAhB;AACAS,MAAAA,SAAS,GAAGQ,iBAAZ;AACD,KAND,MAMO;AACLjB,MAAAA,EAAE,GAAG,KAAKW,KAAL,CAAWO,GAAX,EAAL;AACAT,MAAAA,SAAS,GAAGtB,iBAAiB,CAACU,yBAAlB,CAA4C;AACtDC,QAAAA,YADsD;AAEtDC,QAAAA,MAFsD;AAGtDC,QAAAA,EAHsD;AAItDC,QAAAA;AAJsD,OAA5C,EAKTE,IALS,CAKJW,UALI,CAAZ;AAMD;;AAED,WAAO;AACLhB,MAAAA,YADK;AAELiB,MAAAA,UAFK;AAGLd,MAAAA,OAHK;AAILD,MAAAA,EAJK;AAKLD,MAAAA,MAAM,EAAEA,MAAM,IAAI,IALb;AAMLiB,MAAAA,MANK;AAOLP,MAAAA;AAPK,KAAP;AASD;;AAEDU,EAAAA,eAAe,CAAEC,cAAF,EAAkBC,SAAlB,EAA6BC,QAA7B,EAAuC;AACpD,WAAO;AAAEC,MAAAA,GAAG,EAAEH,cAAP;AAAuBE,MAAAA,QAAvB;AAAiCD,MAAAA;AAAjC,KAAP;AACD;;AAEDG,EAAAA,8BAA8B,CAAEC,QAAF,EAAY;AACxC,WAAO;AAAEA,MAAAA;AAAF,KAAP;AACD;;AArDsB;;ACAzB,MAAMC,KAAN,CAAY;AACVR,EAAAA,GAAG,GAAI;AACL,WAAOS,MAAM,EAAb;AACD;;AAHS;;ACFZ,MAAMC,eAAN,SAA8B5G,KAA9B,CAAoC;AAClCjC,EAAAA,WAAW,CAAE6G,OAAF,EAAWiC,OAAX,EAAoB;AAC7B,UAAMjC,OAAN;AACA,SAAKiC,OAAL,GAAeA,OAAf;AACD;;AAJiC;;ACEpC,MAAMC,UAAN,CAAiB;AACf/I,EAAAA,WAAW,CAAE2C,KAAF,EAAS;AAClB,SAAKzC,GAAL,GAAW,IAAIwC,YAAJ,CAAiBC,KAAjB,EAAwB;AAAEG,MAAAA,OAAO,EAAE;AAAX,KAAxB,CAAX;AACD;;AAEe,QAAVtC,UAAU,CAAEJ,OAAF,EAAW4I,SAAX,EAAsB;AACpC,QAAI;AACF,YAAMnG,QAAQ,GAAG,MAAM,KAAK3C,GAAL,CAASM,UAAT,CAAoBJ,OAApB,CAAvB;;AACA,UAAIyC,QAAQ,CAACd,MAAT,KAAoB,CAApB,IAAyBc,QAAQ,CAACb,MAAtC,EAA8C;AAC5C,cAAME,IAAI,GAAGW,QAAQ,CAACb,MAAT,CAAgBiH,GAAhB,CAAoBC,MAAM,IAAI;AACzC,gBAAM,CAACC,QAAD,EAAWC,MAAX,EAAmBvI,IAAnB,EAAyBE,IAAzB,IAAiCmI,MAAM,CAAChH,IAAP,CAAYC,KAAZ,CAAkB,GAAlB,CAAvC;AACA,iBAAO;AACLgH,YAAAA,QADK;AAELC,YAAAA,MAFK;AAGLvI,YAAAA,IAHK;AAILE,YAAAA,IAJK;AAKLD,YAAAA,QAAQ,EAAE+B,QAAQ,CAACR;AALd,WAAP;AAOD,SATY,CAAb;AAUA2G,QAAAA,SAAS,CAAC,IAAD,EAAO9G,IAAP,CAAT;AACD,OAZD,MAYO,IAAI,CAACW,QAAQ,CAACb,MAAd,EAAsB;AAC3B;AACAgH,QAAAA,SAAS,CAAC;AAAErI,UAAAA,IAAI,EAAE;AAAR,SAAD,CAAT;AACD,OAHM,MAGA;AACLqI,QAAAA,SAAS,CAAC,IAAI/G,KAAJ,CAAU,wBAAV,CAAD,CAAT;AACD;AACF,KApBD,CAoBE,OAAOoH,CAAP,EAAU;AACVL,MAAAA,SAAS,CAACK,CAAD,CAAT;AACD;AACF;;AA7Bc;;ACOjB,MAAMC,aAAN,CAAoB;AAClBtJ,EAAAA,WAAW,CAAGC,GAAG,GAAG,IAAT,EAAesJ,MAAM,GAAG,IAAxB,EAA8B3B,KAAK,GAAG,IAAtC,EAA4CtB,GAAG,GAAG,IAAlD,EAAyD;AAClE,QAAKiD,MAAM,KAAK,IAAhB,EAAuB;AACrBA,MAAAA,MAAM,GAAG5G,KAAT;AACD;;AACD,QAAK1C,GAAG,KAAK,IAAb,EAAoB;AAClBA,MAAAA,GAAG,GAAG,IAAI8I,UAAJ,CAAgBQ,MAAhB,CAAN;AACD;;AACD,QAAKjD,GAAG,KAAK,IAAb,EAAoB;AAClBA,MAAAA,GAAG,GAAGC,OAAO,CAAE,KAAF,CAAb;AACD;;AACD,SAAKD,GAAL,GAAWA,GAAX;AACA,SAAKkD,QAAL,GAAgB,IAAIrF,gBAAJ,CAAsBlE,GAAtB,EAA2BsJ,MAA3B,CAAhB;AACA,SAAKlF,IAAL,GAAY,IAAIpB,IAAJ,CAAUsG,MAAV,CAAZ;AACA,SAAKE,kBAAL,GAA0B,IAAI9B,kBAAJ,CAAwBC,KAAK,KAAK,IAAV,GAAiBA,KAAjB,GAAyB,IAAIe,KAAJ,EAAjD,CAA1B;AACD;AAED;AACF;AACA;AACA;AACA;;;AACqB,QAAbjJ,aAAa,CAAGkB,MAAH,EAAY;AAC7B,UAAMiE,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACS,aAA5C,CAAZ;AACA,UAAMmD,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAeC,GAAf,CAAvB;AACA,WAAO,MAAMN,QAAQ,CAACG,IAAT,EAAb;AACD;AAED;AACF;AACA;AACA;AACA;;;AACyB,QAAjBrD,iBAAiB,CAAGiB,MAAH,EAAW8I,IAAX,EAAkB;AACvC,UAAM7E,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACU,iBAA5C,CAAZ;AACA,UAAMkD,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAgB,GAAEC,GAAI,IAAG,IAAIwG,eAAJ,CAAqBD,IAArB,CAA4B,EAArD,CAAvB;AACA,WAAO,MAAM7G,QAAQ,CAACG,IAAT,EAAb;AACD;AAED;AACF;AACA;AACA;AACA;;;AACyB,QAAjBpD,iBAAiB,CAAGgB,MAAH,EAAW8I,IAAX,EAAkB;AACvC,UAAM7E,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACW,iBAA5C,CAAZ;AACA,UAAMiD,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAgB,GAAEC,GAAI,IAAG,IAAIwG,eAAJ,CAAqBD,IAArB,CAA4B,EAArD,CAAvB;AACA,WAAO,MAAM7G,QAAQ,CAACG,IAAT,EAAb;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACiB,QAATnD,SAAS,CAAGe,MAAH,EAAWgJ,UAAX,EAAwB;AACrC,UAAM/E,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,QAAIiJ,GAAG,GAAGhF,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACY,SAA5C,CAAV;AACAgK,IAAAA,GAAG,GAAGA,GAAG,CAACpH,OAAJ,CAAa,cAAb,EAA6BmH,UAA7B,CAAN;AACA,WAAOC,GAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACwB,QAAhB/J,gBAAgB,CAAGc,MAAH,EAAWgJ,UAAX,EAAwB;AAC5C,UAAM/E,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,QAAIiJ,GAAG,GAAGhF,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACa,gBAA5C,CAAV;AACA+J,IAAAA,GAAG,GAAGA,GAAG,CAACpH,OAAJ,CAAa,cAAb,EAA6BmH,UAA7B,CAAN;AACA,UAAM/G,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAe2G,GAAf,CAAvB;AACA,WAAO,MAAMhH,QAAQ,CAACG,IAAT,EAAb;AACD;AAED;AACF;AACA;AACA;AACA;;;AACoB,QAAZ8G,YAAY,CAAGhB,OAAH,EAAa;AAC7B,UAAM/D,WAAW,GAAG,MAAM,KAAKyE,QAAL,CAAc/E,iBAAd,CAAiCqE,OAAjC,CAA1B;AACA,UAAMjG,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAe6B,WAAf,CAAvB;AACA,UAAM;AAAEkD,MAAAA;AAAF,QAAa,MAAMpF,QAAQ,CAACG,IAAT,EAAzB;AACA,WAAOiF,MAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACoB,QAAZ8B,YAAY,CAAGrF,QAAH,EAAaoD,UAAb,EAAyBC,UAAU,GAAG,IAAtC,EAA6C;AAC7D,UAAM7C,UAAU,GAAG,MAAM,KAAKsE,QAAL,CAAcvE,gBAAd,CAAgCP,QAAhC,CAAzB;AACA,UAAM7B,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrB6B,UADqB,EAErB,KAAKuE,kBAAL,CAAwB5B,yBAAxB,CAAmDC,UAAnD,EAA+DC,UAA/D,CAFqB,CAAvB;;AAIA,QAAK,CAAClF,QAAQ,CAACmH,EAAf,EAAoB;AAClB,YAAM,IAAInB,eAAJ,CAAsB,sBAAqBnE,QAAS,EAApD,EAAuDA,QAAvD,CAAN;AACD;;AACD,UAAM;AAAEuF,MAAAA;AAAF,QAAa,MAAMpH,QAAQ,CAACG,IAAT,EAAzB;AACA,WAAOiH,MAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACyB,QAAjBC,iBAAiB,CAAGjC,MAAH,EAAWa,OAAX,EAAqB;AAC1C,UAAM3F,GAAG,GAAG,MAAM,KAAKqG,QAAL,CAAcrE,eAAd,CAA+B2D,OAA/B,EAAwCb,MAAxC,CAAlB;AACA,UAAMpF,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAeC,GAAf,CAAvB;AACA,UAAMJ,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,UAAM;AAAEmH,MAAAA;AAAF,QAAYpH,IAAlB;AACA,WAAOoH,KAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACwB,QAAhBC,gBAAgB,CAAGvD,OAAH,EAAYa,SAAZ,EAAuBoB,OAAO,GAAG,IAAjC,EAAuCb,MAAM,GAAG,IAAhD,EAAuD;AAC3E,QAAKa,OAAO,IAAI,IAAX,IAAmBb,MAAM,KAAK,IAAnC,EAA0C;AACxC,YAAM,IAAIhG,KAAJ,CAAW,uCAAX,CAAN;AACD;;AACD,QAAIoI,eAAJ;;AACA,QAAKvB,OAAL,EAAe;AACb,UAAKb,MAAM,KAAI,MAAM,KAAKuB,QAAL,CAAchE,mBAAd,CAAmCsD,OAAO,CAAC3G,KAAR,CAAe,GAAf,EAAsB,CAAtB,CAAnC,EAA8DlD,eAAe,CAACK,oBAA9E,CAAV,CAAX,EAA4H;AAC1H,YAAK,MAAM,KAAK4K,iBAAL,CAAwBjC,MAAxB,EAAgCa,OAAhC,CAAX,EAAuD;AACrDuB,UAAAA,eAAe,GAAG,KAAK/D,GAAL,CAASgE,SAAT,CAAmBC,UAAnB,CAA+BtC,MAA/B,CAAlB;AACD,SAFD,MAEO;AACL,iBAAO,KAAP;AACD;AACF,OAND,MAMO;AACL,cAAMuC,MAAM,GAAG,MAAM,KAAKhB,QAAL,CAAchE,mBAAd,CAAmCsD,OAAO,CAAC3G,KAAR,CAAe,GAAf,EAAsB,CAAtB,CAAnC,EAA8DlD,eAAe,CAACC,GAA9E,CAArB;;AACA,YAAKsL,MAAL,EAAc;AACZ,gBAAMC,WAAW,GAAG,MAAM,KAAKX,YAAL,CAAmBhB,OAAnB,CAA1B;AACAuB,UAAAA,eAAe,GAAG,KAAK/D,GAAL,CAASgE,SAAT,CAAmBC,UAAnB,CAA+BE,WAA/B,CAAlB;AACD,SAHD,MAGO;AACL,iBAAO,KAAP;AACD;AACF;AACF;;AAED,UAAMC,gBAAgB,GAAG,KAAKpE,GAAL,CAASqE,OAAT,CAAiBC,aAAjB,CAAgCP,eAAe,IAAIpC,MAAnD,CAAzB;;AACA,QAAI;AACF,YAAM4C,QAAQ,GAAGhE,OAAO,CAACW,MAAR,CAAgBkD,gBAAgB,CAAC3E,QAAjB,EAAhB,EAA6C2B,SAA7C,CAAjB;AACA,aAAOmD,QAAP;AACD,KAHD,CAGE,OAAQpK,GAAR,EAAc;AACd,aAAO,KAAP;AACD;AACF;AAED;AACF;AACA;AACA;AACA;AACA;;;AACwB,QAAhBqK,gBAAgB,CAAGhC,OAAH,EAAa;AACjC,UAAMiC,gBAAgB,GAAG,MAAM,KAAKvB,QAAL,CAAcnE,sBAAd,CAAsCyD,OAAtC,CAA/B;AACA,UAAMjG,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAe6H,gBAAf,CAAvB;;AACA,QAAK,CAAClI,QAAQ,CAACmH,EAAf,EAAoB;AAClB,YAAMjH,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAIf,KAAJ,CAAY,uBAAsBuB,IAAI,CAACC,SAAL,CAAgBV,IAAhB,CAAuB,EAAzD,CAAN;AACD;;AACD,UAAM;AAAEiI,MAAAA,MAAF;AAAUjK,MAAAA;AAAV,QAAmB,MAAM8B,QAAQ,CAACG,IAAT,EAA/B;AACA,WAAO;AAAEgI,MAAAA,MAAF;AAAUjK,MAAAA;AAAV,KAAP;AACD;;AAEc,QAATkK,SAAS,CAAGC,aAAH,EAAkB7C,cAAlB,EAAkCC,SAAlC,EAA6CC,QAAQ,GAAG,EAAxD,EAA6D;AAC1E,QAAK,CAACF,cAAN,EAAuB;AACrB,YAAM,IAAIpG,KAAJ,CAAW,iCAAX,CAAN;AACD;;AACD,UAAMkJ,YAAY,GAAG,MAAM,KAAK3B,QAAL,CAAclE,eAAd,CAA+B4F,aAA/B,CAA3B;AACA,UAAMrI,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrB8H,YADqB,EAErB,KAAK1B,kBAAL,CAAwBrB,eAAxB,CAAyCC,cAAzC,EAAyDC,SAAzD,EAAoEC,QAApE,CAFqB,CAAvB;;AAIA,QAAK,CAAC1F,QAAQ,CAACmH,EAAf,EAAoB;AAClB,YAAMjH,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAIf,KAAJ,CAAY,uBAAsBuB,IAAI,CAACC,SAAL,CAAgBV,IAAhB,CAAuB,EAAzD,CAAN;AACD;;AACD,WAAOF,QAAQ,CAACG,IAAT,EAAP;AACD;;AAE6B,QAAxBoI,wBAAwB,CAAGF,aAAH,EAAkBxC,QAAlB,EAA6B;AACzD,QAAK,CAACA,QAAN,EAAiB;AACf,YAAM,IAAIzG,KAAJ,CAAW,yCAAX,CAAN;AACD;;AACD,UAAMoJ,qBAAqB,GAAG,MAAM,KAAK7B,QAAL,CAAcjE,8BAAd,CAA8C2F,aAA9C,CAApC;AACA,UAAMrI,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrBgI,qBADqB,EAErB,KAAK5B,kBAAL,CAAwBhB,8BAAxB,CAAwDC,QAAxD,CAFqB,CAAvB;;AAIA,QAAK,CAAC7F,QAAQ,CAACmH,EAAf,EAAoB;AAClB,YAAMjH,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAIf,KAAJ,CAAY,uBAAsBuB,IAAI,CAACC,SAAL,CAAgBV,IAAhB,CAAuB,EAAzD,CAAN;AACD;;AAED,UAAMA,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;;AACA,QAAK,CAACD,IAAI,CAACuI,OAAX,EAAqB;AACnB,YAAM,IAAIrJ,KAAJ,CAAW,sDAAX,CAAN;AACD;;AAED,WAAOc,IAAP;AACD;;AA1OiB;;;;"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/src/PaymailClient.js b/src/PaymailClient.js index df01b41..27e1b9d 100644 --- a/src/PaymailClient.js +++ b/src/PaymailClient.js @@ -71,7 +71,7 @@ class PaymailClient { const apiDescriptor = await this.resolver.getApiDescriptionFor( domain ) let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ] uri = uri.replace( '{contractId}', contractId ) - return uri + return {uri} } /** From 52852c6abaceb3ec665a22b65f331e506e263aca Mon Sep 17 00:00:00 2001 From: suhao Date: Mon, 20 Sep 2021 15:08:05 +0800 Subject: [PATCH 26/33] =?UTF-8?q?=E6=9B=B4=E6=8D=A2DNS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/paymail-client.cjs.js | 4 +- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 4 +- dist/paymail-client.esm.js.map | 2 +- package-lock.json | 9952 +------------------------------- src/BrowserDns.js | 2 +- src/EndpointResolver.js | 2 +- 7 files changed, 31 insertions(+), 9937 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index 49ab460..93b371a 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -201,7 +201,7 @@ class Http { class EndpointResolver { constructor(dns = null, fetch) { this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { - baseUrl: 'https://dns.google.com/resolve' + baseUrl: 'https://dns.alidns.com/resolve' })); this.http = new Http(fetch); this._cache = {}; @@ -424,7 +424,7 @@ class PaymailNotFound extends Error { class BrowserDns { constructor(fetch) { this.doh = new DnsOverHttps(fetch, { - baseUrl: 'https://dns.google.com/resolve' + baseUrl: 'https://dns.alidns.com/resolve' }); } diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index 749f3e6..4617d4f 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index 263e2af..fbfb021 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -190,7 +190,7 @@ class Http { class EndpointResolver { constructor(dns = null, fetch) { this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { - baseUrl: 'https://dns.google.com/resolve' + baseUrl: 'https://dns.alidns.com/resolve' })); this.http = new Http(fetch); this._cache = {}; @@ -413,7 +413,7 @@ class PaymailNotFound extends Error { class BrowserDns { constructor(fetch) { this.doh = new DnsOverHttps(fetch, { - baseUrl: 'https://dns.google.com/resolve' + baseUrl: 'https://dns.alidns.com/resolve' }); } diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 8b64a9d..32bad3b 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":";;;;;;;MAEaA,eAAe,GAAG;AAC7BC,EAAAA,GAAG,EAAE,KADwB;AAE7BC,EAAAA,kBAAkB,EAAE,oBAFS;AAG7BC,EAAAA,uBAAuB,EAAEC,IAAI,CAC3B,gDAD2B,EAE3B,CAAC,eAAD,CAF2B,EAG3B,EAH2B,CAHA;AAQ7BC,EAAAA,oBAAoB,EAAED,IAAI,CACxB,sDADwB,EAExB,EAFwB,EAGxB,EAHwB,CARG;AAa7BE,EAAAA,aAAa,EAAEF,IAAI,CACjB,gCADiB,EAEjB,CAAC,gCAAD,CAFiB,EAGjB,GAHiB,CAbU;AAkB7BG,EAAAA,kBAAkB,EAAEH,IAAI,CACtB,sBADsB,EAEtB,CAAC,8BAAD,EAAiC,gCAAjC,EAAmE,0BAAnE,EAA+F,iBAA/F,CAFsB,EAGtB,KAHsB,CAlBK;AAuB7BI,EAAAA,qBAAqB,EAAEJ,IAAI,CACzB,gEADyB,EAEzB,CAAC,8BAAD,EAAiC,gCAAjC,EAAmE,0BAAnE,EAA+F,iBAA/F,CAFyB,EAGzB,KAHyB,CAvBE;AA4B7BK,EAAAA,aAAa,EAAEL,IAAI,CACjB,mDADiB,EAEjB,CAAC,oBAAD,CAFiB,EAGjB,GAHiB,CA5BU;AAiC7BM,EAAAA,iBAAiB,EAAEN,IAAI,CACrB,wDADqB,EAErB,CAAC,oBAAD,CAFqB,EAGrB,GAHqB,CAjCM;AAsC7BO,EAAAA,iBAAiB,EAAEP,IAAI,CACrB,wDADqB,EAErB,CAAC,oBAAD,CAFqB,EAGrB,GAHqB,CAtCM;AA2C7BQ,EAAAA,SAAS,EAAER,IAAI,CACb,yCADa,EAEb,CAAC,oBAAD,CAFa,EAGb,GAHa,CA3Cc;AAgD7BS,EAAAA,gBAAgB,EAAET,IAAI,CACpB,+CADoB,EAEpB,CAAC,oBAAD,CAFoB,EAGpB,GAHoB;AAhDO;;ACF/B;AAEA,MAAMU,SAAN,CAAgB;AACdC,EAAAA,WAAW,CAAEC,GAAF,EAAOC,GAAP,EAAY;AACrB,SAAKD,GAAL,GAAWA,GAAX;AACA,SAAKC,GAAL,GAAWA,GAAX;AACD;;AAEa,QAARC,QAAQ,CAAEC,OAAF,EAAW;AACvB,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,WAAKN,GAAL,CAASO,UAAT,CAAqB,kBAAiBJ,OAAQ,EAA9C,EAAiD,OAAOK,GAAP,EAAYC,MAAZ,KAAuB;AACtE,YAAI;AACF,cAAID,GAAG,KAAKA,GAAG,CAACE,IAAJ,KAAa,SAAb,IAA0BF,GAAG,CAACE,IAAJ,KAAa,WAA5C,CAAP,EAAiE;AAC/D,mBAAOL,OAAO,CAAC;AACbM,cAAAA,MAAM,EAAER,OADK;AAEbS,cAAAA,IAAI,EAAE,GAFO;AAGbC,cAAAA,QAAQ,EAAE;AAHG,aAAD,CAAd;AAKD;;AACD,cAAIL,GAAJ,EAAS;AACP,mBAAOF,MAAM,CAACE,GAAD,CAAb;AACD;;AAED,gBAAM;AAAEM,YAAAA,IAAI,EAAEC,aAAR;AAAuBH,YAAAA,IAAvB;AAA6BC,YAAAA;AAA7B,cAA0CJ,MAAM,CAAC,CAAD,CAAtD;AACAJ,UAAAA,OAAO,CAAC;AACNM,YAAAA,MAAM,EAAEI,aADF;AAENH,YAAAA,IAFM;AAGNC,YAAAA,QAAQ,EAAE,KAAKG,mBAAL,CAAyBD,aAAzB,EAAwCZ,OAAxC,KAAoDU;AAHxD,WAAD,CAAP;AAKD,SAlBD,CAkBE,OAAOL,GAAP,EAAY;AACZ,iBAAOF,MAAM,CAACE,GAAD,CAAb;AACD;AACF,OAtBD;AAuBD,KAxBM,EAwBJS,IAxBI,CAwBCR,MAAM,IAAI;AAChB,UAAIA,MAAM,CAACI,QAAX,EAAqB;AACnB,eAAOJ,MAAP;AACD,OAFD,MAEO;AACL,eAAO,KAAKS,cAAL,CAAoBf,OAApB,CAAP;AACD;AACF,KA9BM,EA8BHK,GAAD,IAAS;AACVW,MAAAA,OAAO,CAACC,KAAR,CAAcZ,GAAd;AACA,aAAOA,GAAP;AACD,KAjCM,CAAP;AAkCD;;AAEDQ,EAAAA,mBAAmB,CAAEK,iBAAF,EAAqBC,cAArB,EAAqC;AACtD,QAAI,KAAKC,eAAL,CAAqBF,iBAArB,EAAwCC,cAAxC,CAAJ,EAA6D;AAC3D,aAAO,IAAP;AACD,KAFD,MAEO,IAAI,KAAKE,sBAAL,CAA4BH,iBAA5B,EAA+CC,cAA/C,CAAJ,EAAoE;AACzE,aAAO,IAAP;AACD,KAFM,MAEA,IAAI,KAAKG,gBAAL,CAAsBH,cAAtB,CAAJ,EAA2C;AAAE;AAClD,aAAO,KAAKC,eAAL,CAAqB,2CAArB,EAAkEF,iBAAlE,KAAwF,KAAKE,eAAL,CAAqB,yCAArB,EAAgEF,iBAAhE,CAA/F;AACD,KAFM,MAEA,IAAI,KAAKK,wBAAL,CAA8BJ,cAA9B,CAAJ,EAAmD;AACxD,aAAO,KAAKC,eAAL,CAAqB,sCAArB,EAA6DF,iBAA7D,CAAP;AACD,KAFM,MAEA,IAAI,KAAKE,eAAL,CAAqB,WAArB,EAAkCF,iBAAlC,CAAJ,EAA0D;AAC/D,aAAO,IAAP;AACD,KAFM,MAEA,IAAI,KAAKM,mBAAL,CAAyBN,iBAAzB,CAAJ,EAAiD;AACtD,aAAO,IAAP;AACD,KAFM,MAEA;AACL,aAAO,KAAP;AACD;AACF;;AAEDM,EAAAA,mBAAmB,CAAExB,OAAF,EAAW;AAC5B,WAAO,KAAKoB,eAAL,CAAqBpB,OAArB,EAA8B,iBAA9B,KAAoD,KAAKoB,eAAL,CAAqBpB,OAArB,EAA8B,qBAA9B,CAA3D;AACD;;AAEDqB,EAAAA,sBAAsB,CAAEH,iBAAF,EAAqBC,cAArB,EAAqC;AACzD,WAAO,KAAKC,eAAL,CAAqBF,iBAArB,EAAyC,OAAMC,cAAe,EAA9D,CAAP;AACD;;AAEDG,EAAAA,gBAAgB,CAAEtB,OAAF,EAAW;AACzB,WAAO,KAAKoB,eAAL,CAAqB,aAArB,EAAoCpB,OAApC,CAAP;AACD;;AAEDuB,EAAAA,wBAAwB,CAAEvB,OAAF,EAAW;AACjC,WAAO,KAAKoB,eAAL,CAAqB,sBAArB,EAA6CpB,OAA7C,CAAP;AACD;;AAEmB,QAAde,cAAc,CAAEf,OAAF,EAAW;AAC7B,UAAMyB,WAAW,GAAG,MAAM,KAAK3B,GAAL,CAAS4B,mBAAT,CAA6B1B,OAA7B,CAA1B;;AACA,QAAIyB,WAAW,CAACE,MAAZ,KAAuB,CAAvB,IAA4B,CAACF,WAAW,CAACG,MAA7C,EAAqD;AACnD,YAAM,IAAIC,KAAJ,CAAU,kBAAV,CAAN;AACD;;AACD,UAAMC,IAAI,GAAGL,WAAW,CAACG,MAAZ,CAAmB,CAAnB,EAAsBE,IAAtB,CAA2BC,KAA3B,CAAiC,GAAjC,CAAb;AACA,UAAMtB,IAAI,GAAGqB,IAAI,CAAC,CAAD,CAAjB;AACA,UAAME,cAAc,GAAGF,IAAI,CAAC,CAAD,CAA3B;;AACA,QAAI,CAACL,WAAW,CAACQ,EAAb,IAAmB,CAAC,KAAKb,eAAL,CAAqBpB,OAArB,EAA8BgC,cAA9B,CAAxB,EAAuE;AACrE,YAAM,IAAIH,KAAJ,CAAU,kBAAV,CAAN;AACD;;AACD,WAAO;AACLpB,MAAAA,IADK;AAELD,MAAAA,MAAM,EAAEwB,cAFH;AAGLtB,MAAAA,QAAQ,EAAEe,WAAW,CAACQ;AAHjB,KAAP;AAKD;;AAEDb,EAAAA,eAAe,CAAEc,OAAF,EAAWC,OAAX,EAAoB;AACjC,WAAOD,OAAO,CAACE,WAAR,GAAsBC,OAAtB,CAA8B,KAA9B,EAAqC,EAArC,MAA6CF,OAAO,CAACC,WAAR,GAAsBC,OAAtB,CAA8B,KAA9B,EAAqC,EAArC,CAApD;AACD;;AAjGa;;ACFhB,MAAMC,YAAN,CAAmB;AACjB1C,EAAAA,WAAW,CAAE2C,KAAF,EAASC,MAAT,EAAiB;AAC1B,SAAKD,KAAL,GAAaA,KAAb;AACA,SAAKC,MAAL,GAAcA,MAAd;AACD;;AAEe,QAAVpC,UAAU,CAAEJ,OAAF,EAAW;AACzB,UAAMyC,QAAQ,GAAG,MAAM,KAAKF,KAAL,CAAY,GAAE,KAAKC,MAAL,CAAYE,OAAQ,SAAQ1C,OAAQ,gBAAlD,CAAvB;AACA,UAAM2C,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,WAAOD,IAAP;AACD;;AAEwB,QAAnBjB,mBAAmB,CAAE1B,OAAF,EAAW;AAClC,WAAO,KAAKI,UAAL,CAAiB,kBAAiBJ,OAAQ,EAA1C,CAAP;AACD;;AAdgB;;;;;;ACGnB,MAAM6C,IAAN,CAAW;AACTjD,EAAAA,WAAW,CAAE2C,KAAF,EAAS;AAClB,SAAKA,KAAL,GAAaA,KAAb;AACD;;AAEQ,QAAHO,GAAG,CAAEC,GAAF,EAAO;AACd,WAAO,KAAKC,aAAL,CAAmBD,GAAnB,CAAP;AACD;;AAEa,QAARE,QAAQ,CAAEF,GAAF,EAAOJ,IAAP,EAAa;AACzB,WAAO,KAAKK,aAAL,CAAmBD,GAAnB,EAAwB;AAC7BG,MAAAA,MAAM,EAAE,MADqB;AAE7BC,MAAAA,OAAO,EAAE;AACP,wBAAgB;AADT,OAFoB;AAK7BR,MAAAA,IAAI,EAAES,IAAI,CAACC,SAAL,CAAeV,IAAf;AALuB,KAAxB,CAAP;AAOD;;AAEkB,QAAbK,aAAa,CAAED,GAAF,EAAOO,OAAO,GAAG,EAAjB,EAAqB;AACtC,UAAMC,UAAU,GAAG,IAAIC,eAAJ,EAAnB;AACA,UAAMC,KAAK,GAAGC,UAAU,CAAC,MAAMH,UAAU,CAACI,KAAX,EAAP,EAA2B,KAA3B,CAAxB;AACA,WAAO,KAAKpB,KAAL,CAAWQ,GAAX,kCACFO,OADE;AAELM,MAAAA,WAAW,EAAE,MAFR;AAGLC,MAAAA,MAAM,EAAEN,UAAU,CAACM;AAHd,QAIJ/C,IAJI,CAICR,MAAM,IAAI;AAChBwD,MAAAA,YAAY,CAACL,KAAD,CAAZ;AACA,aAAOnD,MAAP;AACD,KAPM,CAAP;AAQD;;AA9BQ;;ACEX,MAAMyD,gBAAN,CAAuB;AACrBnE,EAAAA,WAAW,CAAEC,GAAG,GAAG,IAAR,EAAc0C,KAAd,EAAqB;AAC9B,SAAKyB,SAAL,GAAiB,IAAIrE,SAAJ,CAAcE,GAAd,EAAmB,IAAIyC,YAAJ,CAAiBC,KAAjB,EAAwB;AAAEG,MAAAA,OAAO,EAAE;AAAX,KAAxB,CAAnB,CAAjB;AAEA,SAAKuB,IAAL,GAAY,IAAIpB,IAAJ,CAASN,KAAT,CAAZ;AACA,SAAK2B,MAAL,GAAc,EAAd;AACD;;AAEY,SAANC,MAAM,CAAEH,SAAF,EAAazB,KAAb,EAAoB;AAC/B,UAAM6B,QAAQ,GAAG,IAAIL,gBAAJ,CAAqB,IAArB,EAA2BxB,KAA3B,CAAjB;AACA6B,IAAAA,QAAQ,CAACJ,SAAT,GAAqBA,SAArB;AACA,WAAOI,QAAP;AACD;;AAEsB,QAAjBC,iBAAiB,CAAEC,QAAF,EAAY;AACjC,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACC,GAAjD,CAAN;AACA,UAAM2F,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMmE,WAAW,GAAGF,aAAa,CAACG,YAAd,CAA2B9F,GAA3B,CACjBuD,OADiB,CACT,SADS,EACEkC,KADF,EACSlC,OADT,CACiB,cADjB,EACiC7B,MADjC,CAApB;AAEA,WAAOmE,WAAP;AACD;;AAEqB,QAAhBE,gBAAgB,CAAEP,QAAF,EAAY;AAChC,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACE,kBAAjD,CAAN;AACA,UAAM0F,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMsE,UAAU,GAAGL,aAAa,CAACG,YAAd,CAA2B7F,kBAA3B,CAChBsD,OADgB,CACR,SADQ,EACGkC,KADH,EACUlC,OADV,CACkB,cADlB,EACkC7B,MADlC,CAAnB;AAEA,WAAOsE,UAAP;AACD;;AAEoB,QAAfC,eAAe,CAAET,QAAF,EAAYU,OAAZ,EAAqB;AACxC,UAAM,CAACT,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACK,oBAAjD,CAAN;AACA,UAAMuF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B/F,eAAe,CAACK,oBAA3C,EACTmD,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,EACiD6B,OADjD,CACyD,UADzD,EACqE2C,OADrE,CAAZ;AAEA,WAAOjC,GAAP;AACD;;AAE2B,QAAtBkC,sBAAsB,CAAEX,QAAF,EAAY;AACtC,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACM,aAAjD,CAAN;AACA,UAAMsF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B/F,eAAe,CAACM,aAA3C,EACTkD,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,CAAZ;AAEA,WAAOuC,GAAP;AACD;;AAEoB,QAAfmC,eAAe,CAAEZ,QAAF,EAAY;AAC/B,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACO,kBAAjD,CAAN;AACA,UAAMqF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B/F,eAAe,CAACO,kBAA3C,EACTiD,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,CAAZ;AAEA,WAAOuC,GAAP;AACD;;AAEmC,QAA9BoC,8BAA8B,CAAEb,QAAF,EAAY;AAC9C,UAAM,CAACC,KAAD,EAAQ/D,MAAR,IAAkB8D,QAAQ,CAACvC,KAAT,CAAe,GAAf,CAAxB;AACA,UAAM,KAAKyC,mBAAL,CAAyBhE,MAAzB,EAAiC3B,eAAe,CAACQ,qBAAjD,CAAN;AACA,UAAMoF,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0BlE,MAA1B,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA2B/F,eAAe,CAACQ,qBAA3C,EACTgD,OADS,CACD,SADC,EACUkC,KADV,EACiBlC,OADjB,CACyB,cADzB,EACyC7B,MADzC,CAAZ;AAEA,WAAOuC,GAAP;AACD;;AAEwB,QAAnBqC,mBAAmB,CAAEpF,OAAF,EAAWqF,UAAX,EAAuB;AAC9C,UAAMZ,aAAa,GAAG,MAAM,KAAKC,oBAAL,CAA0B1E,OAA1B,CAA5B;AACA,WAAO,CAAC,CAACyE,aAAa,CAACG,YAAd,CAA2BS,UAA3B,CAAT;AACD;;AAEyB,QAApBX,oBAAoB,CAAE1E,OAAF,EAAW;AACnC,QAAI,KAAKkE,MAAL,CAAYlE,OAAZ,CAAJ,EAA0B;AACxB,aAAO,KAAKkE,MAAL,CAAYlE,OAAZ,CAAP;AACD;;AACD,UAAM;AAAEQ,MAAAA,MAAF;AAAUC,MAAAA;AAAV,QAAmB,MAAM,KAAK6E,mBAAL,CAAyBtF,OAAzB,CAA/B;AACA,UAAMyE,aAAa,GAAG,MAAM,KAAKc,kBAAL,CAAwB/E,MAAxB,EAAgCC,IAAhC,CAA5B;AACA,SAAKyD,MAAL,CAAYlE,OAAZ,IAAuByE,aAAvB;AACA,WAAOA,aAAP;AACD;;AAEuB,QAAlBc,kBAAkB,CAAE/E,MAAF,EAAUC,IAAV,EAAgB;AACtC,UAAM+E,QAAQ,GAAIhF,MAAM,KAAK,WAAX,IAA0BA,MAAM,KAAK,YAAtC,GAAsD,MAAtD,GAA+D,OAAhF;AACA,UAAMiF,WAAW,GAAIhF,IAAI,KAAKiF,SAAT,IAAsBjF,IAAI,CAACkF,QAAL,OAAoB,KAA3C,GAAoD,EAApD,GAA0D,IAAGlF,IAAK,EAAtF;AACA,UAAMmF,aAAa,GAAG,aAAaC,IAAb,CAAkBrF,MAAlB,EAA0B,CAA1B,CAAtB,CAHsC;;AAItC,QAAI,CAACoF,aAAL,EAAoB;AAClB,YAAM,IAAI/D,KAAJ,CAAW,mBAAkBrB,MAAO,EAApC,CAAN;AACD;;AACD,UAAMsF,SAAS,GAAG,MAAM,KAAK7B,IAAL,CAAUnB,GAAV,CAAe,GAAE0C,QAAS,MAAKI,aAAc,GAAEH,WAAY,uBAA3D,CAAxB;AACA,UAAMhB,aAAa,GAAG,MAAMqB,SAAS,CAAClD,IAAV,EAA5B;AACA,WAAO6B,aAAP;AACD;;AAEwB,QAAnBa,mBAAmB,CAAEtF,OAAF,EAAW;AAClC,WAAO,KAAKgE,SAAL,CAAejE,QAAf,CAAwBC,OAAxB,CAAP;AACD;;AAEwB,QAAnBwE,mBAAmB,CAAExE,OAAF,EAAW+F,WAAX,EAAwB;AAC/C,QAAI,EAAC,MAAM,KAAKX,mBAAL,CAAyBpF,OAAzB,EAAkC+F,WAAlC,CAAP,CAAJ,EAA2D;AACzD,YAAM,IAAIlE,KAAJ,CAAW,uBAAsBkE,WAAY,UAAS/F,OAAQ,GAA9D,CAAN;AACD;AACF;;AAvGoB;;ACLvB,MAAMgG,iBAAN,CAAwB;AACtBpG,EAAAA,WAAW,CAAEqG,KAAF,EAASC,GAAG,GAAG,IAAf,EAAqB;AAC9B,QAAIA,GAAG,KAAK,IAAZ,EAAkB;AAChBA,MAAAA,GAAG,GAAGC,OAAO,CAAC,KAAD,CAAb;AACAD,MAAAA,GAAG,CAACE,OAAJ,GAAcD,OAAO,CAAC,aAAD,CAArB;AACD;;AACD,SAAKD,GAAL,GAAWA,GAAX;AACA,UAAMG,YAAY,GAAGC,MAAM,CAACC,IAAP,CAAYN,KAAK,CAACO,IAAN,CAAW,EAAX,CAAZ,CAArB;AACA,SAAKC,OAAL,GAAe,IAAI,KAAKP,GAAL,CAASE,OAAb,CAAqBC,YAArB,CAAf;AACD;;AAE+B,SAAzBK,yBAAyB,CAAE;AAChCC,IAAAA,YADgC;AAEhCC,IAAAA,MAFgC;AAGhCC,IAAAA,EAHgC;AAIhCC,IAAAA;AAJgC,GAAF,EAK7B;AACD,QAAID,EAAE,CAACE,WAAP,EAAoB;AAClBF,MAAAA,EAAE,GAAGA,EAAE,CAACE,WAAH,EAAL;AACD;;AAED,WAAO,IAAIf,iBAAJ,CAAsB,CAC3BW,YAD2B,EAE3BC,MAAM,IAAI,GAFiB,EAG3BC,EAH2B,EAI3BC,OAJ2B,CAAtB,CAAP;AAMD;;AAEDE,EAAAA,IAAI,CAAEC,aAAF,EAAiB;AACnB,WAAO,KAAKR,OAAL,CAAaO,IAAb,CAAkB,KAAKd,GAAL,CAASgB,UAAT,CAAoBC,OAApB,CAA4BF,aAA5B,CAAlB,CAAP;AACD;;AAEDG,EAAAA,MAAM,CAAEC,UAAF,EAAcC,SAAd,EAAyB;AAC7B,WAAO,KAAKb,OAAL,CAAaW,MAAb,CAAoBC,UAApB,EAAgCC,SAAhC,CAAP;AACD;;AAnCqB;;ACExB,MAAMC,kBAAN,CAAyB;AACvB3H,EAAAA,WAAW,CAAE4H,KAAF,EAAS;AAClB,SAAKA,KAAL,GAAaA,KAAb;AACD;;AAEDC,EAAAA,yBAAyB,CAAEC,UAAF,EAAcC,UAAU,GAAG,IAA3B,EAAiC;AACxD,UAAM;AACJhB,MAAAA,YADI;AAEJC,MAAAA,MAFI;AAGJgB,MAAAA,UAHI;AAIJd,MAAAA,OAJI;AAKJe,MAAAA,MALI;AAMJP,MAAAA,SAAS,EAAEQ;AANP,QAOFJ,UAPJ;;AASA,QAAI,CAACI,iBAAD,IAAsBH,UAAU,KAAK,IAAzC,EAA+C;AAC7C,YAAM,IAAI9F,KAAJ,CAAU,kCAAV,CAAN;AACD;;AAED,QAAIgF,EAAJ,EAAQS,SAAR;;AACA,QAAIQ,iBAAJ,EAAuB;AACrB,UAAI,CAACJ,UAAU,CAACb,EAAhB,EAAoB;AAClB,cAAM,IAAIhF,KAAJ,CAAU,sCAAV,CAAN;AACD;;AACDgF,MAAAA,EAAE,GAAGa,UAAU,CAACb,EAAhB;AACAS,MAAAA,SAAS,GAAGQ,iBAAZ;AACD,KAND,MAMO;AACLjB,MAAAA,EAAE,GAAG,KAAKW,KAAL,CAAWO,GAAX,EAAL;AACAT,MAAAA,SAAS,GAAGtB,iBAAiB,CAACU,yBAAlB,CAA4C;AACtDC,QAAAA,YADsD;AAEtDC,QAAAA,MAFsD;AAGtDC,QAAAA,EAHsD;AAItDC,QAAAA;AAJsD,OAA5C,EAKTE,IALS,CAKJW,UALI,CAAZ;AAMD;;AAED,WAAO;AACLhB,MAAAA,YADK;AAELiB,MAAAA,UAFK;AAGLd,MAAAA,OAHK;AAILD,MAAAA,EAJK;AAKLD,MAAAA,MAAM,EAAEA,MAAM,IAAI,IALb;AAMLiB,MAAAA,MANK;AAOLP,MAAAA;AAPK,KAAP;AASD;;AAEDU,EAAAA,eAAe,CAAEC,cAAF,EAAkBC,SAAlB,EAA6BC,QAA7B,EAAuC;AACpD,WAAO;AAAEC,MAAAA,GAAG,EAAEH,cAAP;AAAuBE,MAAAA,QAAvB;AAAiCD,MAAAA;AAAjC,KAAP;AACD;;AAEDG,EAAAA,8BAA8B,CAAEC,QAAF,EAAY;AACxC,WAAO;AAAEA,MAAAA;AAAF,KAAP;AACD;;AArDsB;;ACAzB,MAAMC,KAAN,CAAY;AACVR,EAAAA,GAAG,GAAI;AACL,WAAOS,MAAM,EAAb;AACD;;AAHS;;ACFZ,MAAMC,eAAN,SAA8B5G,KAA9B,CAAoC;AAClCjC,EAAAA,WAAW,CAAE6G,OAAF,EAAWiC,OAAX,EAAoB;AAC7B,UAAMjC,OAAN;AACA,SAAKiC,OAAL,GAAeA,OAAf;AACD;;AAJiC;;ACEpC,MAAMC,UAAN,CAAiB;AACf/I,EAAAA,WAAW,CAAE2C,KAAF,EAAS;AAClB,SAAKzC,GAAL,GAAW,IAAIwC,YAAJ,CAAiBC,KAAjB,EAAwB;AAAEG,MAAAA,OAAO,EAAE;AAAX,KAAxB,CAAX;AACD;;AAEe,QAAVtC,UAAU,CAAEJ,OAAF,EAAW4I,SAAX,EAAsB;AACpC,QAAI;AACF,YAAMnG,QAAQ,GAAG,MAAM,KAAK3C,GAAL,CAASM,UAAT,CAAoBJ,OAApB,CAAvB;;AACA,UAAIyC,QAAQ,CAACd,MAAT,KAAoB,CAApB,IAAyBc,QAAQ,CAACb,MAAtC,EAA8C;AAC5C,cAAME,IAAI,GAAGW,QAAQ,CAACb,MAAT,CAAgBiH,GAAhB,CAAoBC,MAAM,IAAI;AACzC,gBAAM,CAACC,QAAD,EAAWC,MAAX,EAAmBvI,IAAnB,EAAyBE,IAAzB,IAAiCmI,MAAM,CAAChH,IAAP,CAAYC,KAAZ,CAAkB,GAAlB,CAAvC;AACA,iBAAO;AACLgH,YAAAA,QADK;AAELC,YAAAA,MAFK;AAGLvI,YAAAA,IAHK;AAILE,YAAAA,IAJK;AAKLD,YAAAA,QAAQ,EAAE+B,QAAQ,CAACR;AALd,WAAP;AAOD,SATY,CAAb;AAUA2G,QAAAA,SAAS,CAAC,IAAD,EAAO9G,IAAP,CAAT;AACD,OAZD,MAYO,IAAI,CAACW,QAAQ,CAACb,MAAd,EAAsB;AAC3B;AACAgH,QAAAA,SAAS,CAAC;AAAErI,UAAAA,IAAI,EAAE;AAAR,SAAD,CAAT;AACD,OAHM,MAGA;AACLqI,QAAAA,SAAS,CAAC,IAAI/G,KAAJ,CAAU,wBAAV,CAAD,CAAT;AACD;AACF,KApBD,CAoBE,OAAOoH,CAAP,EAAU;AACVL,MAAAA,SAAS,CAACK,CAAD,CAAT;AACD;AACF;;AA7Bc;;ACOjB,MAAMC,aAAN,CAAoB;AAClBtJ,EAAAA,WAAW,CAAGC,GAAG,GAAG,IAAT,EAAesJ,MAAM,GAAG,IAAxB,EAA8B3B,KAAK,GAAG,IAAtC,EAA4CtB,GAAG,GAAG,IAAlD,EAAyD;AAClE,QAAKiD,MAAM,KAAK,IAAhB,EAAuB;AACrBA,MAAAA,MAAM,GAAG5G,KAAT;AACD;;AACD,QAAK1C,GAAG,KAAK,IAAb,EAAoB;AAClBA,MAAAA,GAAG,GAAG,IAAI8I,UAAJ,CAAgBQ,MAAhB,CAAN;AACD;;AACD,QAAKjD,GAAG,KAAK,IAAb,EAAoB;AAClBA,MAAAA,GAAG,GAAGC,OAAO,CAAE,KAAF,CAAb;AACD;;AACD,SAAKD,GAAL,GAAWA,GAAX;AACA,SAAKkD,QAAL,GAAgB,IAAIrF,gBAAJ,CAAsBlE,GAAtB,EAA2BsJ,MAA3B,CAAhB;AACA,SAAKlF,IAAL,GAAY,IAAIpB,IAAJ,CAAUsG,MAAV,CAAZ;AACA,SAAKE,kBAAL,GAA0B,IAAI9B,kBAAJ,CAAwBC,KAAK,KAAK,IAAV,GAAiBA,KAAjB,GAAyB,IAAIe,KAAJ,EAAjD,CAA1B;AACD;AAED;AACF;AACA;AACA;AACA;;;AACqB,QAAbjJ,aAAa,CAAGkB,MAAH,EAAY;AAC7B,UAAMiE,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACS,aAA5C,CAAZ;AACA,UAAMmD,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAeC,GAAf,CAAvB;AACA,WAAO,MAAMN,QAAQ,CAACG,IAAT,EAAb;AACD;AAED;AACF;AACA;AACA;AACA;;;AACyB,QAAjBrD,iBAAiB,CAAGiB,MAAH,EAAW8I,IAAX,EAAkB;AACvC,UAAM7E,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACU,iBAA5C,CAAZ;AACA,UAAMkD,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAgB,GAAEC,GAAI,IAAG,IAAIwG,eAAJ,CAAqBD,IAArB,CAA4B,EAArD,CAAvB;AACA,WAAO,MAAM7G,QAAQ,CAACG,IAAT,EAAb;AACD;AAED;AACF;AACA;AACA;AACA;;;AACyB,QAAjBpD,iBAAiB,CAAGgB,MAAH,EAAW8I,IAAX,EAAkB;AACvC,UAAM7E,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,UAAMuC,GAAG,GAAG0B,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACW,iBAA5C,CAAZ;AACA,UAAMiD,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAgB,GAAEC,GAAI,IAAG,IAAIwG,eAAJ,CAAqBD,IAArB,CAA4B,EAArD,CAAvB;AACA,WAAO,MAAM7G,QAAQ,CAACG,IAAT,EAAb;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACiB,QAATnD,SAAS,CAAGe,MAAH,EAAWgJ,UAAX,EAAwB;AACrC,UAAM/E,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,QAAIiJ,GAAG,GAAGhF,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACY,SAA5C,CAAV;AACAgK,IAAAA,GAAG,GAAGA,GAAG,CAACpH,OAAJ,CAAa,cAAb,EAA6BmH,UAA7B,CAAN;AACA,WAAO;AAACC,MAAAA;AAAD,KAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;;;AACwB,QAAhB/J,gBAAgB,CAAGc,MAAH,EAAWgJ,UAAX,EAAwB;AAC5C,UAAM/E,aAAa,GAAG,MAAM,KAAK2E,QAAL,CAAc1E,oBAAd,CAAoClE,MAApC,CAA5B;AACA,QAAIiJ,GAAG,GAAGhF,aAAa,CAACG,YAAd,CAA4B/F,eAAe,CAACa,gBAA5C,CAAV;AACA+J,IAAAA,GAAG,GAAGA,GAAG,CAACpH,OAAJ,CAAa,cAAb,EAA6BmH,UAA7B,CAAN;AACA,UAAM/G,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAe2G,GAAf,CAAvB;AACA,WAAO,MAAMhH,QAAQ,CAACG,IAAT,EAAb;AACD;AAED;AACF;AACA;AACA;AACA;;;AACoB,QAAZ8G,YAAY,CAAGhB,OAAH,EAAa;AAC7B,UAAM/D,WAAW,GAAG,MAAM,KAAKyE,QAAL,CAAc/E,iBAAd,CAAiCqE,OAAjC,CAA1B;AACA,UAAMjG,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAe6B,WAAf,CAAvB;AACA,UAAM;AAAEkD,MAAAA;AAAF,QAAa,MAAMpF,QAAQ,CAACG,IAAT,EAAzB;AACA,WAAOiF,MAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACoB,QAAZ8B,YAAY,CAAGrF,QAAH,EAAaoD,UAAb,EAAyBC,UAAU,GAAG,IAAtC,EAA6C;AAC7D,UAAM7C,UAAU,GAAG,MAAM,KAAKsE,QAAL,CAAcvE,gBAAd,CAAgCP,QAAhC,CAAzB;AACA,UAAM7B,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrB6B,UADqB,EAErB,KAAKuE,kBAAL,CAAwB5B,yBAAxB,CAAmDC,UAAnD,EAA+DC,UAA/D,CAFqB,CAAvB;;AAIA,QAAK,CAAClF,QAAQ,CAACmH,EAAf,EAAoB;AAClB,YAAM,IAAInB,eAAJ,CAAsB,sBAAqBnE,QAAS,EAApD,EAAuDA,QAAvD,CAAN;AACD;;AACD,UAAM;AAAEuF,MAAAA;AAAF,QAAa,MAAMpH,QAAQ,CAACG,IAAT,EAAzB;AACA,WAAOiH,MAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACyB,QAAjBC,iBAAiB,CAAGjC,MAAH,EAAWa,OAAX,EAAqB;AAC1C,UAAM3F,GAAG,GAAG,MAAM,KAAKqG,QAAL,CAAcrE,eAAd,CAA+B2D,OAA/B,EAAwCb,MAAxC,CAAlB;AACA,UAAMpF,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAeC,GAAf,CAAvB;AACA,UAAMJ,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,UAAM;AAAEmH,MAAAA;AAAF,QAAYpH,IAAlB;AACA,WAAOoH,KAAP;AACD;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACwB,QAAhBC,gBAAgB,CAAGvD,OAAH,EAAYa,SAAZ,EAAuBoB,OAAO,GAAG,IAAjC,EAAuCb,MAAM,GAAG,IAAhD,EAAuD;AAC3E,QAAKa,OAAO,IAAI,IAAX,IAAmBb,MAAM,KAAK,IAAnC,EAA0C;AACxC,YAAM,IAAIhG,KAAJ,CAAW,uCAAX,CAAN;AACD;;AACD,QAAIoI,eAAJ;;AACA,QAAKvB,OAAL,EAAe;AACb,UAAKb,MAAM,KAAI,MAAM,KAAKuB,QAAL,CAAchE,mBAAd,CAAmCsD,OAAO,CAAC3G,KAAR,CAAe,GAAf,EAAsB,CAAtB,CAAnC,EAA8DlD,eAAe,CAACK,oBAA9E,CAAV,CAAX,EAA4H;AAC1H,YAAK,MAAM,KAAK4K,iBAAL,CAAwBjC,MAAxB,EAAgCa,OAAhC,CAAX,EAAuD;AACrDuB,UAAAA,eAAe,GAAG,KAAK/D,GAAL,CAASgE,SAAT,CAAmBC,UAAnB,CAA+BtC,MAA/B,CAAlB;AACD,SAFD,MAEO;AACL,iBAAO,KAAP;AACD;AACF,OAND,MAMO;AACL,cAAMuC,MAAM,GAAG,MAAM,KAAKhB,QAAL,CAAchE,mBAAd,CAAmCsD,OAAO,CAAC3G,KAAR,CAAe,GAAf,EAAsB,CAAtB,CAAnC,EAA8DlD,eAAe,CAACC,GAA9E,CAArB;;AACA,YAAKsL,MAAL,EAAc;AACZ,gBAAMC,WAAW,GAAG,MAAM,KAAKX,YAAL,CAAmBhB,OAAnB,CAA1B;AACAuB,UAAAA,eAAe,GAAG,KAAK/D,GAAL,CAASgE,SAAT,CAAmBC,UAAnB,CAA+BE,WAA/B,CAAlB;AACD,SAHD,MAGO;AACL,iBAAO,KAAP;AACD;AACF;AACF;;AAED,UAAMC,gBAAgB,GAAG,KAAKpE,GAAL,CAASqE,OAAT,CAAiBC,aAAjB,CAAgCP,eAAe,IAAIpC,MAAnD,CAAzB;;AACA,QAAI;AACF,YAAM4C,QAAQ,GAAGhE,OAAO,CAACW,MAAR,CAAgBkD,gBAAgB,CAAC3E,QAAjB,EAAhB,EAA6C2B,SAA7C,CAAjB;AACA,aAAOmD,QAAP;AACD,KAHD,CAGE,OAAQpK,GAAR,EAAc;AACd,aAAO,KAAP;AACD;AACF;AAED;AACF;AACA;AACA;AACA;AACA;;;AACwB,QAAhBqK,gBAAgB,CAAGhC,OAAH,EAAa;AACjC,UAAMiC,gBAAgB,GAAG,MAAM,KAAKvB,QAAL,CAAcnE,sBAAd,CAAsCyD,OAAtC,CAA/B;AACA,UAAMjG,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUnB,GAAV,CAAe6H,gBAAf,CAAvB;;AACA,QAAK,CAAClI,QAAQ,CAACmH,EAAf,EAAoB;AAClB,YAAMjH,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAIf,KAAJ,CAAY,uBAAsBuB,IAAI,CAACC,SAAL,CAAgBV,IAAhB,CAAuB,EAAzD,CAAN;AACD;;AACD,UAAM;AAAEiI,MAAAA,MAAF;AAAUjK,MAAAA;AAAV,QAAmB,MAAM8B,QAAQ,CAACG,IAAT,EAA/B;AACA,WAAO;AAAEgI,MAAAA,MAAF;AAAUjK,MAAAA;AAAV,KAAP;AACD;;AAEc,QAATkK,SAAS,CAAGC,aAAH,EAAkB7C,cAAlB,EAAkCC,SAAlC,EAA6CC,QAAQ,GAAG,EAAxD,EAA6D;AAC1E,QAAK,CAACF,cAAN,EAAuB;AACrB,YAAM,IAAIpG,KAAJ,CAAW,iCAAX,CAAN;AACD;;AACD,UAAMkJ,YAAY,GAAG,MAAM,KAAK3B,QAAL,CAAclE,eAAd,CAA+B4F,aAA/B,CAA3B;AACA,UAAMrI,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrB8H,YADqB,EAErB,KAAK1B,kBAAL,CAAwBrB,eAAxB,CAAyCC,cAAzC,EAAyDC,SAAzD,EAAoEC,QAApE,CAFqB,CAAvB;;AAIA,QAAK,CAAC1F,QAAQ,CAACmH,EAAf,EAAoB;AAClB,YAAMjH,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAIf,KAAJ,CAAY,uBAAsBuB,IAAI,CAACC,SAAL,CAAgBV,IAAhB,CAAuB,EAAzD,CAAN;AACD;;AACD,WAAOF,QAAQ,CAACG,IAAT,EAAP;AACD;;AAE6B,QAAxBoI,wBAAwB,CAAGF,aAAH,EAAkBxC,QAAlB,EAA6B;AACzD,QAAK,CAACA,QAAN,EAAiB;AACf,YAAM,IAAIzG,KAAJ,CAAW,yCAAX,CAAN;AACD;;AACD,UAAMoJ,qBAAqB,GAAG,MAAM,KAAK7B,QAAL,CAAcjE,8BAAd,CAA8C2F,aAA9C,CAApC;AACA,UAAMrI,QAAQ,GAAG,MAAM,KAAKwB,IAAL,CAAUhB,QAAV,CACrBgI,qBADqB,EAErB,KAAK5B,kBAAL,CAAwBhB,8BAAxB,CAAwDC,QAAxD,CAFqB,CAAvB;;AAIA,QAAK,CAAC7F,QAAQ,CAACmH,EAAf,EAAoB;AAClB,YAAMjH,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;AACA,YAAM,IAAIf,KAAJ,CAAY,uBAAsBuB,IAAI,CAACC,SAAL,CAAgBV,IAAhB,CAAuB,EAAzD,CAAN;AACD;;AAED,UAAMA,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAT,EAAnB;;AACA,QAAK,CAACD,IAAI,CAACuI,OAAX,EAAqB;AACnB,YAAM,IAAIrJ,KAAJ,CAAW,sDAAX,CAAN;AACD;;AAED,WAAOc,IAAP;AACD;;AA1OiB;;;;"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 868592c..819bb0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9545 +1,8 @@ { "name": "@moneybutton/paymail-client", "version": "0.38.3", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "@moneybutton/paymail-client", - "version": "0.38.3", - "license": "Open-BSV", - "dependencies": { - "@babel/runtime": "7.14.6", - "@moneybutton/brfc": "github:chainbow/brfc", - "abort-controller": "3.0.0", - "bsv": "^1.5.5", - "cross-fetch": "^3.1.4", - "moment": "^2.24.0" - }, - "devDependencies": { - "@babel/cli": "7.14.5", - "@babel/core": "7.14.6", - "@babel/plugin-proposal-object-rest-spread": "7.14.7", - "@babel/plugin-transform-runtime": "7.14.5", - "@babel/polyfill": "^7.10.4", - "@babel/preset-env": "7.14.7", - "@babel/register": "^7.10.5", - "@rollup/plugin-commonjs": "19.0.0", - "@rollup/plugin-node-resolve": "13.0.0", - "@rollup/plugin-replace": "2.4.2", - "babel-eslint": "10.1.0", - "bdd-lazy-var": "2.6.1", - "chai": "4.3.4", - "dotenv-cli": "4.0.0", - "http-server": "0.12.3", - "mocha": "9.0.2", - "mocha-define": "^0.2.0", - "rollup": "2.53.0", - "rollup-plugin-babel": "4.4.0", - "rollup-plugin-node-builtins": "2.1.2", - "rollup-plugin-node-globals": "1.4.0", - "should": "13.2.3", - "standard": "16.0.3", - "ts-node": "^10.1.0" - } - }, - "node_modules/@babel/cli": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.5.tgz", - "integrity": "sha512-poegjhRvXHWO0EAsnYajwYZuqcz7gyfxwfaecUESxDujrqOivf3zrjFbub8IJkrqEaz3fvJWh001EzxBub54fg==", - "dev": true, - "dependencies": { - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.0.0", - "make-dir": "^2.1.0", - "slash": "^2.0.0", - "source-map": "^0.5.0" - }, - "bin": { - "babel": "bin/babel.js", - "babel-external-helpers": "bin/babel-external-helpers.js" - }, - "engines": { - "node": ">=6.9.0" - }, - "optionalDependencies": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.2", - "chokidar": "^3.4.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", - "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", - "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", - "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", - "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", - "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", - "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", - "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", - "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", - "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", - "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", - "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", - "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", - "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", - "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", - "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", - "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", - "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", - "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", - "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", - "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", - "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", - "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", - "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", - "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", - "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", - "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", - "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", - "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", - "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", - "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", - "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", - "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", - "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", - "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", - "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", - "dev": true, - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", - "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", - "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", - "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", - "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", - "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", - "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", - "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", - "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/polyfill": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", - "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", - "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", - "dev": true, - "dependencies": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", - "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.7", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.5", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.15.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.14.5.tgz", - "integrity": "sha512-TjJpGz/aDjFGWsItRBQMOFTrmTI9tr79CHOK+KIvLeCkbxuOAk2M5QHjvruIMGoo9OuccMh5euplPzc5FjAKGg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.0", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", - "dev": true, - "peer": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "peer": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true, - "peer": true - }, - "node_modules/@moneybutton/brfc": { - "version": "0.38.3", - "resolved": "git+ssh://git@github.com/chainbow/brfc.git#aba3a22013ebbe41be7ec27e8de34b7b6a948135", - "license": "Open-BSV", - "peerDependencies": { - "bsv": "^1.5.5" - } - }, - "node_modules/@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.2", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.2.tgz", - "integrity": "sha512-Fb8WxUFOBQVl+CX4MWet5o7eCc6Pj04rXIwVKZ6h1NnqTo45eOQW6aWyhG25NIODvWFwTDMwBsYxrQ3imxpetg==", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^5.1.2", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.0.tgz", - "integrity": "sha512-adTpD6ATGbehdaQoZQ6ipDFhdjqsTgpOAhFiPwl+dzre4pPshsecptDPyEFb61JMJ1+mGljktaC4jI8ARMSNyw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^2.38.3" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.0.tgz", - "integrity": "sha512-41X411HJ3oikIDivT5OKe9EZ6ud6DXudtfNrGbC4nniaxx2esiWjkLOzgnZsWq1IM8YIeL2rzRGLZLBjlhnZtQ==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^2.42.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz", - "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", - "dev": true - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.3.1.tgz", - "integrity": "sha512-N87VuQi7HEeRJkhzovao/JviiqKjDKMVKxKMfUvSKw+MbkbW8R0nA3fi/MQhhlxV2fQ+2ReM+/Nt4efdrJx3zA==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/abstract-leveldown": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", - "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=", - "dev": true, - "dependencies": { - "xtend": "~3.0.0" - } - }, - "node_modules/abstract-leveldown/node_modules/xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/aes-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", - "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "optional": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", - "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", - "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", - "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "optional": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/basic-auth": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", - "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/bdd-lazy-var": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/bdd-lazy-var/-/bdd-lazy-var-2.6.1.tgz", - "integrity": "sha512-X3ADwcFji/IHIrYJhTTpaiWhoOx4pl4whdAx1dmvdeUPsMUb7fVYFvf/Q33VEAEAVkEwi5rgNSZ0Y9oOVeQV+A==", - "dev": true, - "peerDependencies": { - "jasmine": ">=2", - "jasmine-core": ">=2", - "jest": ">=20", - "mocha": ">=2.3" - }, - "peerDependenciesMeta": { - "jasmine": { - "optional": true - }, - "jasmine-core": { - "optional": true - }, - "jest": { - "optional": true - }, - "mocha": { - "optional": true - } - } - }, - "node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bl": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", - "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=", - "dev": true, - "dependencies": { - "readable-stream": "~1.0.26" - } - }, - "node_modules/bl/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/bl/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", - "integrity": "sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8=", - "dev": true, - "dependencies": { - "level-filesystem": "^1.0.1", - "level-js": "^2.1.3", - "levelup": "^0.18.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-rsa/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bsv": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/bsv/-/bsv-1.5.6.tgz", - "integrity": "sha512-A0g36x63lVF9Ia6/z/RjcxaQMHE5cLl2rDxjUIKz0UTMLf5bPPyLI9yVyY2JkecF77MrU+MQdKVt0MSdU5abtw==", - "dependencies": { - "aes-js": "^3.1.2", - "bn.js": "=4.11.9", - "bs58": "=4.0.1", - "clone-deep": "^4.0.1", - "elliptic": "6.5.4", - "hash.js": "^1.1.7", - "inherits": "2.0.3", - "unorm": "1.4.1" - } - }, - "node_modules/bsv/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/buffer-es6": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz", - "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=", - "dev": true - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "optional": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001243", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz", - "integrity": "sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/chokidar/node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/chokidar/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/chokidar/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", - "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "optional": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true, - "optional": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true, - "hasInstallScript": true - }, - "node_modules/core-js-compat": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", - "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "node_modules/corser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", - "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", - "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", - "dependencies": { - "node-fetch": "2.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deferred-leveldown": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", - "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=", - "dev": true, - "dependencies": { - "abstract-leveldown": "~0.12.1" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-cli": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-4.0.0.tgz", - "integrity": "sha512-ByKEec+ashePEXthZaA1fif9XDtcaRnkN7eGdBDx3HHRjwZ/rA1go83Cbs4yRrx3JshsCf96FjAyIA2M672+CQ==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.1", - "dotenv": "^8.1.0", - "dotenv-expand": "^5.1.0", - "minimist": "^1.1.3" - }, - "bin": { - "dotenv": "cli.js" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "node_modules/ecstatic": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", - "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", - "dev": true, - "dependencies": { - "he": "^1.1.1", - "mime": "^1.6.0", - "minimist": "^1.1.0", - "url-join": "^2.0.5" - }, - "bin": { - "ecstatic": "lib/ecstatic.js" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.3.772", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.772.tgz", - "integrity": "sha512-X/6VRCXWALzdX+RjCtBU6cyg8WZgoxm9YA02COmDOiNJEZ59WkQggDbWZ4t/giHi/3GS+cvdrP6gbLISANAGYA==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-standard": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", - "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1" - } - }, - "node_modules/eslint-config-standard-jsx": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", - "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-react": "^7.21.5" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "dev": true, - "dependencies": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/eslint-module-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", - "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "pkg-dir": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", - "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "dependencies": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-plugin-node/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint-plugin-promise": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", - "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", - "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.1", - "array.prototype.flatmap": "^1.2.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "object.entries": "^1.1.2", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.18.1", - "string.prototype.matchall": "^4.0.2" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "optional": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "optional": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "peer": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "peer": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", - "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", - "dev": true, - "peer": true - }, - "node_modules/follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "optional": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/fwd-stream": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", - "integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=", - "dev": true, - "dependencies": { - "readable-stream": "~1.0.26-4" - } - }, - "node_modules/fwd-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/fwd-stream/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/fwd-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "optional": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-server": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz", - "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", - "dev": true, - "dependencies": { - "basic-auth": "^1.0.3", - "colors": "^1.4.0", - "corser": "^2.0.1", - "ecstatic": "^3.3.2", - "http-proxy": "^1.18.0", - "minimist": "^1.2.5", - "opener": "^1.5.1", - "portfinder": "^1.0.25", - "secure-compare": "3.0.1", - "union": "~0.5.0" - }, - "bin": { - "hs": "bin/http-server", - "http-server": "bin/http-server" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/idb-wrapper": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", - "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", - "dev": true - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", - "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true, - "optional": true - }, - "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-object": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", - "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=", - "dev": true - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isbuffer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", - "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/level-blobs": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", - "integrity": "sha1-mrm5e7mfHtv594o0M+Ie1WOGva8=", - "dev": true, - "dependencies": { - "level-peek": "1.0.6", - "once": "^1.3.0", - "readable-stream": "^1.0.26-4" - } - }, - "node_modules/level-blobs/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/level-blobs/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/level-blobs/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/level-filesystem": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", - "integrity": "sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M=", - "dev": true, - "dependencies": { - "concat-stream": "^1.4.4", - "errno": "^0.1.1", - "fwd-stream": "^1.0.4", - "level-blobs": "^0.1.7", - "level-peek": "^1.0.6", - "level-sublevel": "^5.2.0", - "octal": "^1.0.0", - "once": "^1.3.0", - "xtend": "^2.2.0" - } - }, - "node_modules/level-fix-range": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", - "integrity": "sha1-vxW5Fa422EcMgh6IPd95zRZCCCg=", - "dev": true - }, - "node_modules/level-hooks": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", - "integrity": "sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM=", - "dev": true, - "dependencies": { - "string-range": "~1.2" - } - }, - "node_modules/level-js": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", - "integrity": "sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=", - "dev": true, - "dependencies": { - "abstract-leveldown": "~0.12.0", - "idb-wrapper": "^1.5.0", - "isbuffer": "~0.0.0", - "ltgt": "^2.1.2", - "typedarray-to-buffer": "~1.0.0", - "xtend": "~2.1.2" - } - }, - "node_modules/level-js/node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", - "dev": true - }, - "node_modules/level-js/node_modules/xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/level-peek": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", - "integrity": "sha1-vsUccqgu5GTTNkNMfIdsP8vM538=", - "dev": true, - "dependencies": { - "level-fix-range": "~1.0.2" - } - }, - "node_modules/level-sublevel": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", - "integrity": "sha1-dEwSxy0ucr543eO5tc2E1iGRQTo=", - "dev": true, - "dependencies": { - "level-fix-range": "2.0", - "level-hooks": ">=4.4.0 <5", - "string-range": "~1.2.1", - "xtend": "~2.0.4" - } - }, - "node_modules/level-sublevel/node_modules/level-fix-range": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", - "integrity": "sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug=", - "dev": true, - "dependencies": { - "clone": "~0.1.9" - } - }, - "node_modules/level-sublevel/node_modules/object-keys": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", - "integrity": "sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=", - "deprecated": "Please update to the latest object-keys", - "dev": true, - "dependencies": { - "foreach": "~2.0.1", - "indexof": "~0.0.1", - "is": "~0.2.6" - } - }, - "node_modules/level-sublevel/node_modules/xtend": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", - "integrity": "sha1-XqZXptukRwacLlnFihE4ywxebO4=", - "dev": true, - "dependencies": { - "is-object": "~0.1.2", - "object-keys": "~0.2.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/levelup": { - "version": "0.18.6", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", - "integrity": "sha1-5qAcsIlhbI7MApHCqb0/DETj5es=", - "dev": true, - "dependencies": { - "bl": "~0.8.1", - "deferred-leveldown": "~0.2.0", - "errno": "~0.1.1", - "prr": "~0.0.0", - "readable-stream": "~1.0.26", - "semver": "~2.3.1", - "xtend": "~3.0.0" - } - }, - "node_modules/levelup/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/levelup/node_modules/prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", - "dev": true - }, - "node_modules/levelup/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/levelup/node_modules/semver": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/levelup/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "node_modules/levelup/node_modules/xtend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true, - "peer": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "peer": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true, - "peer": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", - "dev": true - }, - "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "optional": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "optional": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.2.tgz", - "integrity": "sha512-FpspiWU+UT9Sixx/wKimvnpkeW0mh6ROAKkIaPokj3xZgxeRhcna/k5X57jJghEr8X+Cgu/Vegf8zCX5ugSuTA==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.7", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.23", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.5", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha-define": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/mocha-define/-/mocha-define-0.2.0.tgz", - "integrity": "sha1-b3GITK4m7twOnsuet6Xn91xrtCY=", - "dev": true - }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "optional": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "optional": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "optional": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/octal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", - "integrity": "sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws=", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "dependencies": { - "pify": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-type/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-conf": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", - "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0", - "load-json-file": "^5.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/load-json-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", - "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^4.0.0", - "pify": "^4.0.1", - "strip-bom": "^3.0.0", - "type-fest": "^0.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-conf/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf/node_modules/type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process-es6": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz", - "integrity": "sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g=", - "dev": true - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "dependencies": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true, - "optional": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true, - "optional": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rollup": { - "version": "2.53.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.53.0.tgz", - "integrity": "sha512-spgrY78Toh+m0+zaOoeaayJKuzFuWy6o1PdFIBMVwRcuxT0xCOX9A5rChyKe+2ruL4lePKWUMImS4mMW1QAkmQ==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-babel": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", - "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel.", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "rollup-pluginutils": "^2.8.1" - }, - "peerDependencies": { - "@babel/core": "7 || ^7.0.0-rc.2", - "rollup": ">=0.60.0 <3" - } - }, - "node_modules/rollup-plugin-node-builtins": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz", - "integrity": "sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k=", - "dev": true, - "dependencies": { - "browserify-fs": "^1.0.0", - "buffer-es6": "^4.9.2", - "crypto-browserify": "^3.11.0", - "process-es6": "^0.11.2" - } - }, - "node_modules/rollup-plugin-node-globals": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz", - "integrity": "sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==", - "dev": true, - "dependencies": { - "acorn": "^5.7.3", - "buffer-es6": "^4.9.3", - "estree-walker": "^0.5.2", - "magic-string": "^0.22.5", - "process-es6": "^0.11.6", - "rollup-pluginutils": "^2.3.1" - } - }, - "node_modules/rollup-plugin-node-globals/node_modules/acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/rollup-plugin-node-globals/node_modules/estree-walker": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", - "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", - "dev": true - }, - "node_modules/rollup-plugin-node-globals/node_modules/magic-string": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", - "dev": true, - "dependencies": { - "vlq": "^0.2.2" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "optional": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/secure-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=", - "dev": true - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/should": { - "version": "13.2.3", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", - "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", - "dev": true, - "dependencies": { - "should-equal": "^2.0.0", - "should-format": "^3.0.3", - "should-type": "^1.4.0", - "should-type-adaptors": "^1.0.1", - "should-util": "^1.0.0" - } - }, - "node_modules/should-equal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", - "dev": true, - "dependencies": { - "should-type": "^1.4.0" - } - }, - "node_modules/should-format": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", - "dev": true, - "dependencies": { - "should-type": "^1.3.0", - "should-type-adaptors": "^1.0.1" - } - }, - "node_modules/should-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", - "dev": true - }, - "node_modules/should-type-adaptors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", - "dev": true, - "dependencies": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" - } - }, - "node_modules/should-util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", - "dev": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "optional": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "optional": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "optional": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true, - "optional": true - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", - "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/standard": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/standard/-/standard-16.0.3.tgz", - "integrity": "sha512-70F7NH0hSkNXosXRltjSv6KpTAOkUkSfyu3ynyM5dtRUiLtR+yX9EGZ7RKwuGUqCJiX/cnkceVM6HTZ4JpaqDg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "eslint": "~7.13.0", - "eslint-config-standard": "16.0.2", - "eslint-config-standard-jsx": "10.0.0", - "eslint-plugin-import": "~2.22.1", - "eslint-plugin-node": "~11.1.0", - "eslint-plugin-promise": "~4.2.1", - "eslint-plugin-react": "~7.21.5", - "standard-engine": "^14.0.1" - }, - "bin": { - "standard": "bin/cmd.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/standard-engine": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz", - "integrity": "sha512-7FEzDwmHDOGva7r9ifOzD3BGdTbA7ujJ50afLVdW/tK14zQEptJjbFuUfn50irqdHDcTbNh0DTIoMPynMCXb0Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "get-stdin": "^8.0.0", - "minimist": "^1.2.5", - "pkg-conf": "^3.1.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8.10" - } - }, - "node_modules/standard/node_modules/@eslint/eslintrc": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", - "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/standard/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/standard/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/standard/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/standard/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/standard/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/standard/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/standard/node_modules/eslint": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", - "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/standard/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/standard/node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard/node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard/node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "node_modules/standard/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/standard/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/standard/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/standard/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/standard/node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/standard/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/standard/node_modules/slice-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/standard/node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/standard/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/standard/node_modules/string-width/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/standard/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/standard/node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/standard/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "optional": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/string-range": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", - "integrity": "sha1-qJPtNH5yKZvIO++78qaSqNI51d0=", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "peer": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", - "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "optional": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-node": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.1.0.tgz", - "integrity": "sha512-6szn3+J9WyG2hE+5W8e0ruZrzyk1uFLYye6IGMBadnOzDh8aP7t8CbFpsfCiEx2+wMixAhjFt7lOZC4+l+WbEA==", - "dev": true, - "dependencies": { - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz", - "integrity": "sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q==", - "dev": true, - "dependencies": { - "json5": "^2.2.0", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", - "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=", - "dev": true - }, - "node_modules/typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", - "dev": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/union": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", - "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", - "dev": true, - "dependencies": { - "qs": "^6.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unorm": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", - "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "optional": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "optional": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "optional": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true, - "optional": true - }, - "node_modules/url-join": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", - "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/xtend": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", - "integrity": "sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, "dependencies": { "@babel/cli": { "version": "7.14.5", @@ -10651,59 +1114,9 @@ "to-fast-properties": "^2.0.0" } }, - "@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", - "dev": true, - "peer": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, - "peer": true, - "requires": { - "type-fest": "^0.20.2" - } - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "peer": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true, - "peer": true - }, "@moneybutton/brfc": { "version": "git+ssh://git@github.com/chainbow/brfc.git#aba3a22013ebbe41be7ec27e8de34b7b6a948135", - "from": "@moneybutton/brfc@github:chainbow/brfc", - "requires": {} + "from": "@moneybutton/brfc@github:chainbow/brfc" }, "@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.2", @@ -10869,8 +1282,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "aes-js": { "version": "3.1.2", @@ -11037,13 +1449,6 @@ "dev": true, "optional": true }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "peer": true - }, "async": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", @@ -11172,8 +1577,7 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/bdd-lazy-var/-/bdd-lazy-var-2.6.1.tgz", "integrity": "sha512-X3ADwcFji/IHIrYJhTTpaiWhoOx4pl4whdAx1dmvdeUPsMUb7fVYFvf/Q33VEAEAVkEwi5rgNSZ0Y9oOVeQV+A==", - "dev": true, - "requires": {} + "dev": true }, "binary-extensions": { "version": "1.13.1", @@ -12184,169 +2588,17 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "eslint": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", - "dev": true, - "peer": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "peer": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "peer": true - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "peer": true - }, - "globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, - "peer": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "eslint-config-standard": { "version": "16.0.2", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", - "dev": true, - "requires": {} + "dev": true }, "eslint-config-standard-jsx": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", - "dev": true, - "requires": {} + "dev": true }, "eslint-import-resolver-node": { "version": "0.3.4", @@ -12844,16 +3096,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "peer": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -12894,24 +3136,6 @@ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "peer": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", - "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", - "dev": true, - "peer": true - }, "follow-redirects": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", @@ -13872,33 +4096,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true, - "peer": true - }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "peer": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true, - "peer": true - }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -15227,13 +5430,6 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "peer": true - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -15270,16 +5466,6 @@ "dev": true, "optional": true }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", @@ -15534,47 +5720,6 @@ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "peer": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - } - } - }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -16240,23 +6385,6 @@ } } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, "string-range": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", @@ -16310,6 +6438,23 @@ "define-properties": "^1.1.3" } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -16340,43 +6485,6 @@ "has-flag": "^3.0.0" } }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "peer": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", - "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", - "dev": true, - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - } - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -16510,13 +6618,6 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "peer": true - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -16529,13 +6630,6 @@ "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=", "dev": true }, - "typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", - "dev": true, - "peer": true - }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", diff --git a/src/BrowserDns.js b/src/BrowserDns.js index 2eb583e..fae4fdd 100644 --- a/src/BrowserDns.js +++ b/src/BrowserDns.js @@ -2,7 +2,7 @@ import { DnsOverHttps } from './dns-over-https' class BrowserDns { constructor (fetch) { - this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }) + this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' }) } async resolveSrv (aDomain, aCallback) { diff --git a/src/EndpointResolver.js b/src/EndpointResolver.js index d7e836f..4c489b7 100644 --- a/src/EndpointResolver.js +++ b/src/EndpointResolver.js @@ -5,7 +5,7 @@ import { Http } from './http' class EndpointResolver { constructor (dns = null, fetch) { - this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })) + this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })) this.http = new Http(fetch) this._cache = {} From 17544665e622071dc1e511ced6eec6029e3d8ba3 Mon Sep 17 00:00:00 2001 From: Long Li Date: Mon, 20 Sep 2021 21:23:25 +0900 Subject: [PATCH 27/33] double DOH provider --- dist/paymail-client.cjs.js | 61 +- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 61 +- dist/paymail-client.esm.js.map | 2 +- package-lock.json | 10638 +++++++++++++++++++++++++------ package.json | 20 +- src/BrowserDns.js | 9 +- src/EndpointResolver.js | 3 +- src/VerifiableMessage.js | 2 +- src/dns-client.js | 13 +- 10 files changed, 8923 insertions(+), 1888 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index 93b371a..23f3e67 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -31,11 +31,33 @@ const CapabilityCodes = { tokenInformation: brfc.brfc('Infomation URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1') }; -// import { DnsOverHttps } from "./dns-over-https" +class DnsOverHttps { + constructor(fetch, config) { + this.fetch = fetch; + this.config = config; + } + + async resolveSrv(aDomain) { + const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); + const body = await response.json(); + return body; + } + + async queryBsvaliasDomain(aDomain) { + return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); + } + +} + class DnsClient { - constructor(dns, doh) { + constructor(dns, fetch) { this.dns = dns; - this.doh = doh; + this.dohAli = new DnsOverHttps(fetch, { + baseUrl: 'https://dns.alidns.com/resolve' + }); + this.dohGoogle = new DnsOverHttps(fetch, { + baseUrl: 'https://dns.google.com/resolve' + }); } async checkSrv(aDomain) { @@ -116,7 +138,7 @@ class DnsClient { } async validateDnssec(aDomain) { - const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); + const dnsResponse = await Promise.any([this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain)]); if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { throw new Error('Insecure domain.'); @@ -143,24 +165,6 @@ class DnsClient { } -class DnsOverHttps { - constructor(fetch, config) { - this.fetch = fetch; - this.config = config; - } - - async resolveSrv(aDomain) { - const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); - const body = await response.json(); - return body; - } - - async queryBsvaliasDomain(aDomain) { - return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); - } - -} - function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default['default'](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } @@ -200,9 +204,7 @@ class Http { class EndpointResolver { constructor(dns = null, fetch) { - this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { - baseUrl: 'https://dns.alidns.com/resolve' - })); + this.dnsClient = new DnsClient(dns, fetch); this.http = new Http(fetch); this._cache = {}; } @@ -324,7 +326,7 @@ class VerifiableMessage { dt, purpose }) { - if (dt.toISOString) { + if (dt && dt.toISOString) { dt = dt.toISOString(); } @@ -423,14 +425,17 @@ class PaymailNotFound extends Error { class BrowserDns { constructor(fetch) { - this.doh = new DnsOverHttps(fetch, { + this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' }); + this.dohGoogle = new DnsOverHttps(fetch, { + baseUrl: 'https://dns.google.com/resolve' + }); } async resolveSrv(aDomain, aCallback) { try { - const response = await this.doh.resolveSrv(aDomain); + const response = await Promise.any([this.dohAli.resolveSrv(aDomain), this.dohGoogle.resolveSrv(aDomain)]); if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index 4617d4f..3e831aa 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index fbfb021..348de85 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -20,11 +20,33 @@ const CapabilityCodes = { tokenInformation: brfc('Infomation URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1') }; -// import { DnsOverHttps } from "./dns-over-https" +class DnsOverHttps { + constructor(fetch, config) { + this.fetch = fetch; + this.config = config; + } + + async resolveSrv(aDomain) { + const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); + const body = await response.json(); + return body; + } + + async queryBsvaliasDomain(aDomain) { + return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); + } + +} + class DnsClient { - constructor(dns, doh) { + constructor(dns, fetch) { this.dns = dns; - this.doh = doh; + this.dohAli = new DnsOverHttps(fetch, { + baseUrl: 'https://dns.alidns.com/resolve' + }); + this.dohGoogle = new DnsOverHttps(fetch, { + baseUrl: 'https://dns.google.com/resolve' + }); } async checkSrv(aDomain) { @@ -105,7 +127,7 @@ class DnsClient { } async validateDnssec(aDomain) { - const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain); + const dnsResponse = await Promise.any([this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain)]); if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { throw new Error('Insecure domain.'); @@ -132,24 +154,6 @@ class DnsClient { } -class DnsOverHttps { - constructor(fetch, config) { - this.fetch = fetch; - this.config = config; - } - - async resolveSrv(aDomain) { - const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`); - const body = await response.json(); - return body; - } - - async queryBsvaliasDomain(aDomain) { - return this.resolveSrv(`_bsvalias._tcp.${aDomain}`); - } - -} - function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } @@ -189,9 +193,7 @@ class Http { class EndpointResolver { constructor(dns = null, fetch) { - this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { - baseUrl: 'https://dns.alidns.com/resolve' - })); + this.dnsClient = new DnsClient(dns, fetch); this.http = new Http(fetch); this._cache = {}; } @@ -313,7 +315,7 @@ class VerifiableMessage { dt, purpose }) { - if (dt.toISOString) { + if (dt && dt.toISOString) { dt = dt.toISOString(); } @@ -412,14 +414,17 @@ class PaymailNotFound extends Error { class BrowserDns { constructor(fetch) { - this.doh = new DnsOverHttps(fetch, { + this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' }); + this.dohGoogle = new DnsOverHttps(fetch, { + baseUrl: 'https://dns.google.com/resolve' + }); } async resolveSrv(aDomain, aCallback) { try { - const response = await this.doh.resolveSrv(aDomain); + const response = await Promise.any([this.dohAli.resolveSrv(aDomain), this.dohGoogle.resolveSrv(aDomain)]); if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 32bad3b..b37f66c 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-client.js","../src/dns-over-https.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","// import { DnsOverHttps } from \"./dns-over-https\"\n\nclass DnsClient {\n constructor (dns, doh) {\n this.dns = dns\n this.doh = doh\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { DnsOverHttps } from './dns-over-https'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' }))\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await this.doh.resolveSrv(aDomain)\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsClient","constructor","dns","doh","checkSrv","aDomain","Promise","resolve","reject","resolveSrv","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","queryBsvaliasDomain","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","DnsOverHttps","fetch","config","response","baseUrl","body","json","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 819bb0d..42bbe73 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,7975 @@ { "name": "@moneybutton/paymail-client", "version": "0.38.3", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@moneybutton/paymail-client", + "version": "0.38.3", + "license": "Open-BSV", + "dependencies": { + "@babel/runtime": "7.14.6", + "@moneybutton/brfc": "github:chainbow/brfc", + "abort-controller": "3.0.0", + "bsv": "^1.5.5", + "cross-fetch": "^3.1.4", + "moment": "^2.24.0" + }, + "devDependencies": { + "@babel/cli": "7.15.7", + "@babel/core": "7.15.5", + "@babel/plugin-proposal-object-rest-spread": "7.15.6", + "@babel/plugin-transform-runtime": "7.15.0", + "@babel/polyfill": "^7.10.4", + "@babel/preset-env": "7.15.0", + "@babel/register": "^7.10.5", + "@rollup/plugin-commonjs": "20.0.0", + "@rollup/plugin-node-resolve": "13.0.4", + "@rollup/plugin-replace": "3.0.0", + "babel-eslint": "10.1.0", + "bdd-lazy-var": "2.6.1", + "chai": "4.3.4", + "dotenv-cli": "4.0.0", + "http-server": "13.0.2", + "mocha": "9.0.2", + "mocha-define": "^0.2.0", + "rollup": "2.56.3", + "rollup-plugin-babel": "4.4.0", + "rollup-plugin-node-builtins": "2.1.2", + "rollup-plugin-node-globals": "1.4.0", + "should": "13.2.3", + "standard": "16.0.3", + "ts-node": "^10.1.0" + } + }, + "node_modules/@babel/cli": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.15.7.tgz", + "integrity": "sha512-YW5wOprO2LzMjoWZ5ZG6jfbY9JnkDxuHDwvnrThnuYtByorova/I0HNXJedrUfwuXFQfYOjcqDA4PU3qlZGZjg==", + "dev": true, + "dependencies": { + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "make-dir": "^2.1.0", + "slash": "^2.0.0", + "source-map": "^0.5.0" + }, + "bin": { + "babel": "bin/babel.js", + "babel-external-helpers": "bin/babel-external-helpers.js" + }, + "engines": { + "node": ">=6.9.0" + }, + "optionalDependencies": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", + "chokidar": "^3.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.15.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz", + "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.5", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", + "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz", + "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", + "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz", + "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz", + "integrity": "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz", + "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-wrap-function": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz", + "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz", + "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz", + "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz", + "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz", + "integrity": "sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.15.4", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz", + "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz", + "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz", + "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz", + "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz", + "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz", + "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz", + "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.15.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz", + "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", + "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz", + "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.0.tgz", + "integrity": "sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/polyfill": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", + "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", + "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", + "dev": true, + "dependencies": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.0.tgz", + "integrity": "sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-async-generator-functions": "^7.14.9", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.9", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.0", + "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.14.6", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.15.0", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.16.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.15.3.tgz", + "integrity": "sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz", + "integrity": "sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "peer": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true, + "peer": true + }, + "node_modules/@moneybutton/brfc": { + "version": "0.38.3", + "resolved": "git+ssh://git@github.com/chainbow/brfc.git#aba3a22013ebbe41be7ec27e8de34b7b6a948135", + "license": "Open-BSV", + "peerDependencies": { + "bsv": "^1.5.5" + } + }, + "node_modules/@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "dev": true, + "optional": true + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.38.3" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.0.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz", + "integrity": "sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-3.0.0.tgz", + "integrity": "sha512-3c7JCbMuYXM4PbPWT4+m/4Y6U60SgsnDT/cCyAyUKwFHg7pTSfsSQzIpETha3a3ig6OdOKzZz87D9ZXIK3qsDg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.9.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.4.tgz", + "integrity": "sha512-KDazLNYAGIuJugdbULwFZULF9qQ13yNWEBFnfVpqlpgAAo6H/qnM9RjBgh0A0kmHf3XxAKLdN5mTIng9iUvVLA==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abstract-leveldown": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", + "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=", + "dev": true, + "dependencies": { + "xtend": "~3.0.0" + } + }, + "node_modules/abstract-leveldown/node_modules/xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aes-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz", + "integrity": "sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.14.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base-x": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", + "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/basic-auth": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", + "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/bdd-lazy-var": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bdd-lazy-var/-/bdd-lazy-var-2.6.1.tgz", + "integrity": "sha512-X3ADwcFji/IHIrYJhTTpaiWhoOx4pl4whdAx1dmvdeUPsMUb7fVYFvf/Q33VEAEAVkEwi5rgNSZ0Y9oOVeQV+A==", + "dev": true, + "peerDependencies": { + "jasmine": ">=2", + "jasmine-core": ">=2", + "jest": ">=20", + "mocha": ">=2.3" + }, + "peerDependenciesMeta": { + "jasmine": { + "optional": true + }, + "jasmine-core": { + "optional": true + }, + "jest": { + "optional": true + }, + "mocha": { + "optional": true + } + } + }, + "node_modules/bl": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", + "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=", + "dev": true, + "dependencies": { + "readable-stream": "~1.0.26" + } + }, + "node_modules/bl/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", + "integrity": "sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8=", + "dev": true, + "dependencies": { + "level-filesystem": "^1.0.1", + "level-js": "^2.1.3", + "levelup": "^0.18.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserslist": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.0.tgz", + "integrity": "sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001254", + "colorette": "^1.3.0", + "electron-to-chromium": "^1.3.830", + "escalade": "^3.1.1", + "node-releases": "^1.1.75" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bsv": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/bsv/-/bsv-1.5.6.tgz", + "integrity": "sha512-A0g36x63lVF9Ia6/z/RjcxaQMHE5cLl2rDxjUIKz0UTMLf5bPPyLI9yVyY2JkecF77MrU+MQdKVt0MSdU5abtw==", + "dependencies": { + "aes-js": "^3.1.2", + "bn.js": "=4.11.9", + "bs58": "=4.0.1", + "clone-deep": "^4.0.1", + "elliptic": "6.5.4", + "hash.js": "^1.1.7", + "inherits": "2.0.3", + "unorm": "1.4.1" + } + }, + "node_modules/bsv/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/buffer-es6": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz", + "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=", + "dev": true + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001258", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001258.tgz", + "integrity": "sha512-RBByOG6xWXUp0CR2/WU2amXz3stjKpSl5J1xU49F1n2OxD//uBZO4wCKUiG+QMGf7CHGfDDcqoKriomoGVxTeA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/chokidar/node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/chokidar/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/chokidar/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", + "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true + }, + "node_modules/core-js-compat": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.0.tgz", + "integrity": "sha512-tRVjOJu4PxdXjRMEgbP7lqWy1TWJu9a01oBkn8d+dNrhgmBwdTkzhHZpVJnEmhISLdoJI1lX08rcBcHi3TZIWg==", + "dev": true, + "dependencies": { + "browserslist": "^4.17.0", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "dependencies": { + "node-fetch": "2.6.1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deferred-leveldown": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", + "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=", + "dev": true, + "dependencies": { + "abstract-leveldown": "~0.12.1" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-cli": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-4.0.0.tgz", + "integrity": "sha512-ByKEec+ashePEXthZaA1fif9XDtcaRnkN7eGdBDx3HHRjwZ/rA1go83Cbs4yRrx3JshsCf96FjAyIA2M672+CQ==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1", + "dotenv": "^8.1.0", + "dotenv-expand": "^5.1.0", + "minimist": "^1.1.3" + }, + "bin": { + "dotenv": "cli.js" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.3.843", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.843.tgz", + "integrity": "sha512-OWEwAbzaVd1Lk9MohVw8LxMXFlnYd9oYTYxfX8KS++kLLjDfbovLOcEEXwRhG612dqGQ6+44SZvim0GXuBRiKg==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.18.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", + "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-string": "^1.0.7", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-standard": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", + "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1" + } + }, + "node_modules/eslint-config-standard-jsx": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", + "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-react": "^7.21.5" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", + "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "pkg-dir": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", + "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "peer": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "peer": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true, + "peer": true + }, + "node_modules/follow-redirects": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/fwd-stream": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", + "integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=", + "dev": true, + "dependencies": { + "readable-stream": "~1.0.26-4" + } + }, + "node_modules/fwd-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/fwd-stream/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/fwd-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-server": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-13.0.2.tgz", + "integrity": "sha512-R8kvPT7qp11AMJWLZsRShvm6heIXdlR/+tL5oAWNG/86A/X+IAFX6q0F9SA2G+dR5aH/759+9PLH0V34Q6j4rg==", + "dev": true, + "dependencies": { + "basic-auth": "^1.0.3", + "colors": "^1.4.0", + "corser": "^2.0.1", + "he": "^1.1.0", + "http-proxy": "^1.18.0", + "mime": "^1.6.0", + "minimist": "^1.2.5", + "opener": "^1.5.1", + "portfinder": "^1.0.25", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^2.0.5" + }, + "bin": { + "http-server": "bin/http-server" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/idb-wrapper": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", + "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", + "dev": true + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", + "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-object": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", + "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=", + "dev": true + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isbuffer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", + "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.3", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/level-blobs": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", + "integrity": "sha1-mrm5e7mfHtv594o0M+Ie1WOGva8=", + "dev": true, + "dependencies": { + "level-peek": "1.0.6", + "once": "^1.3.0", + "readable-stream": "^1.0.26-4" + } + }, + "node_modules/level-blobs/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/level-blobs/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/level-blobs/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/level-filesystem": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", + "integrity": "sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M=", + "dev": true, + "dependencies": { + "concat-stream": "^1.4.4", + "errno": "^0.1.1", + "fwd-stream": "^1.0.4", + "level-blobs": "^0.1.7", + "level-peek": "^1.0.6", + "level-sublevel": "^5.2.0", + "octal": "^1.0.0", + "once": "^1.3.0", + "xtend": "^2.2.0" + } + }, + "node_modules/level-fix-range": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", + "integrity": "sha1-vxW5Fa422EcMgh6IPd95zRZCCCg=", + "dev": true + }, + "node_modules/level-hooks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", + "integrity": "sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM=", + "dev": true, + "dependencies": { + "string-range": "~1.2" + } + }, + "node_modules/level-js": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", + "integrity": "sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=", + "dev": true, + "dependencies": { + "abstract-leveldown": "~0.12.0", + "idb-wrapper": "^1.5.0", + "isbuffer": "~0.0.0", + "ltgt": "^2.1.2", + "typedarray-to-buffer": "~1.0.0", + "xtend": "~2.1.2" + } + }, + "node_modules/level-js/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "node_modules/level-js/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/level-peek": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", + "integrity": "sha1-vsUccqgu5GTTNkNMfIdsP8vM538=", + "dev": true, + "dependencies": { + "level-fix-range": "~1.0.2" + } + }, + "node_modules/level-sublevel": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", + "integrity": "sha1-dEwSxy0ucr543eO5tc2E1iGRQTo=", + "dev": true, + "dependencies": { + "level-fix-range": "2.0", + "level-hooks": ">=4.4.0 <5", + "string-range": "~1.2.1", + "xtend": "~2.0.4" + } + }, + "node_modules/level-sublevel/node_modules/level-fix-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", + "integrity": "sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug=", + "dev": true, + "dependencies": { + "clone": "~0.1.9" + } + }, + "node_modules/level-sublevel/node_modules/object-keys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", + "integrity": "sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=", + "deprecated": "Please update to the latest object-keys", + "dev": true, + "dependencies": { + "foreach": "~2.0.1", + "indexof": "~0.0.1", + "is": "~0.2.6" + } + }, + "node_modules/level-sublevel/node_modules/xtend": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", + "integrity": "sha1-XqZXptukRwacLlnFihE4ywxebO4=", + "dev": true, + "dependencies": { + "is-object": "~0.1.2", + "object-keys": "~0.2.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levelup": { + "version": "0.18.6", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", + "integrity": "sha1-5qAcsIlhbI7MApHCqb0/DETj5es=", + "dev": true, + "dependencies": { + "bl": "~0.8.1", + "deferred-leveldown": "~0.2.0", + "errno": "~0.1.1", + "prr": "~0.0.0", + "readable-stream": "~1.0.26", + "semver": "~2.3.1", + "xtend": "~3.0.0" + } + }, + "node_modules/levelup/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/levelup/node_modules/prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + }, + "node_modules/levelup/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/levelup/node_modules/semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/levelup/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/levelup/node_modules/xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true, + "peer": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "peer": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true, + "peer": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.2.tgz", + "integrity": "sha512-FpspiWU+UT9Sixx/wKimvnpkeW0mh6ROAKkIaPokj3xZgxeRhcna/k5X57jJghEr8X+Cgu/Vegf8zCX5ugSuTA==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.2", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.23", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha-define": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/mocha-define/-/mocha-define-0.2.0.tgz", + "integrity": "sha1-b3GITK4m7twOnsuet6Xn91xrtCY=", + "dev": true + }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-releases": { + "version": "1.1.75", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", + "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/octal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", + "integrity": "sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws=", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "dependencies": { + "pify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-conf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-es6": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz", + "integrity": "sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g=", + "dev": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "dependencies": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "2.56.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.3.tgz", + "integrity": "sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-babel": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", + "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel.", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.8.1" + }, + "peerDependencies": { + "@babel/core": "7 || ^7.0.0-rc.2", + "rollup": ">=0.60.0 <3" + } + }, + "node_modules/rollup-plugin-node-builtins": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz", + "integrity": "sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k=", + "dev": true, + "dependencies": { + "browserify-fs": "^1.0.0", + "buffer-es6": "^4.9.2", + "crypto-browserify": "^3.11.0", + "process-es6": "^0.11.2" + } + }, + "node_modules/rollup-plugin-node-globals": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz", + "integrity": "sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g==", + "dev": true, + "dependencies": { + "acorn": "^5.7.3", + "buffer-es6": "^4.9.3", + "estree-walker": "^0.5.2", + "magic-string": "^0.22.5", + "process-es6": "^0.11.6", + "rollup-pluginutils": "^2.3.1" + } + }, + "node_modules/rollup-plugin-node-globals/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/rollup-plugin-node-globals/node_modules/estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, + "node_modules/rollup-plugin-node-globals/node_modules/magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "dependencies": { + "vlq": "^0.2.2" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "dev": true, + "dependencies": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "node_modules/should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "dependencies": { + "should-type": "^1.4.0" + } + }, + "node_modules/should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "dev": true, + "dependencies": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "node_modules/should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "dev": true + }, + "node_modules/should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "dependencies": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "node_modules/should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/standard": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/standard/-/standard-16.0.3.tgz", + "integrity": "sha512-70F7NH0hSkNXosXRltjSv6KpTAOkUkSfyu3ynyM5dtRUiLtR+yX9EGZ7RKwuGUqCJiX/cnkceVM6HTZ4JpaqDg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "eslint": "~7.13.0", + "eslint-config-standard": "16.0.2", + "eslint-config-standard-jsx": "10.0.0", + "eslint-plugin-import": "~2.22.1", + "eslint-plugin-node": "~11.1.0", + "eslint-plugin-promise": "~4.2.1", + "eslint-plugin-react": "~7.21.5", + "standard-engine": "^14.0.1" + }, + "bin": { + "standard": "bin/cmd.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/standard-engine": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-14.0.1.tgz", + "integrity": "sha512-7FEzDwmHDOGva7r9ifOzD3BGdTbA7ujJ50afLVdW/tK14zQEptJjbFuUfn50irqdHDcTbNh0DTIoMPynMCXb0Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "get-stdin": "^8.0.0", + "minimist": "^1.2.5", + "pkg-conf": "^3.1.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8.10" + } + }, + "node_modules/standard/node_modules/@eslint/eslintrc": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/standard/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/standard/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/standard/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/standard/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/standard/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/standard/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/standard/node_modules/eslint": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.13.0.tgz", + "integrity": "sha512-uCORMuOO8tUzJmsdRtrvcGq5qposf7Rw0LwkTJkoDbOycVQtQjmnhZSuLQnozLE4TmAzlMVV45eCHmQ1OpDKUQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/standard/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/standard/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/standard/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/standard/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/standard/node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/standard/node_modules/slice-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/standard/node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/standard/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/standard/node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/standard/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/standard/node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/standard/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/string-range": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", + "integrity": "sha1-qJPtNH5yKZvIO++78qaSqNI51d0=", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-node": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz", + "integrity": "sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "0.6.1", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", + "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", + "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=", + "dev": true + }, + "node_modules/typescript": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", + "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dev": true, + "dependencies": { + "qs": "^6.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/unorm": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", + "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workerpool": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, "dependencies": { "@babel/cli": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.14.5.tgz", - "integrity": "sha512-poegjhRvXHWO0EAsnYajwYZuqcz7gyfxwfaecUESxDujrqOivf3zrjFbub8IJkrqEaz3fvJWh001EzxBub54fg==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.15.7.tgz", + "integrity": "sha512-YW5wOprO2LzMjoWZ5ZG6jfbY9JnkDxuHDwvnrThnuYtByorova/I0HNXJedrUfwuXFQfYOjcqDA4PU3qlZGZjg==", "dev": true, "requires": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.2", + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", "chokidar": "^3.4.0", "commander": "^4.0.1", "convert-source-map": "^1.1.0", @@ -31,26 +7990,26 @@ } }, "@babel/compat-data": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", - "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", "dev": true }, "@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "version": "7.15.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz", + "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.5", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -60,59 +8019,59 @@ } }, "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", + "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", "dev": true, "requires": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.15.4", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz", + "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-explode-assignable-expression": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.14.5", + "@babel/compat-data": "^7.15.0", "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", + "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4" } }, "@babel/helper-create-regexp-features-plugin": { @@ -142,84 +8101,84 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz", + "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz", + "integrity": "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6" } }, "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-plugin-utils": { @@ -229,59 +8188,59 @@ "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz", + "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-wrap-function": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz", + "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true }, "@babel/helper-validator-option": { @@ -291,26 +8250,26 @@ "dev": true }, "@babel/helper-wrap-function": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz", + "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-function-name": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", "dev": true, "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/highlight": { @@ -325,30 +8284,30 @@ } }, "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz", + "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==", "dev": true }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz", + "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4", "@babel/plugin-proposal-optional-chaining": "^7.14.5" } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", - "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz", + "integrity": "sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.15.4", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, @@ -363,12 +8322,12 @@ } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", - "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz", + "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" } @@ -434,16 +8393,16 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", - "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz", + "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==", "dev": true, "requires": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" + "@babel/plugin-transform-parameters": "^7.15.4" } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -478,13 +8437,13 @@ } }, "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz", + "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-create-class-features-plugin": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } @@ -655,26 +8614,26 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", - "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz", + "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", - "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz", + "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", "globals": "^11.1.0" } }, @@ -726,9 +8685,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz", + "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -774,27 +8733,27 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", - "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz", + "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-module-transforms": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-simple-access": "^7.15.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", - "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz", + "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", "babel-plugin-dynamic-import-node": "^2.3.3" } }, @@ -809,9 +8768,9 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", - "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", + "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.14.5" @@ -837,9 +8796,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz", + "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -873,9 +8832,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", - "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.0.tgz", + "integrity": "sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.14.5", @@ -962,17 +8921,17 @@ } }, "@babel/preset-env": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", - "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.0.tgz", + "integrity": "sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q==", "dev": true, "requires": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.0", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-validator-option": "^7.14.5", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.7", + "@babel/plugin-proposal-async-generator-functions": "^7.14.9", "@babel/plugin-proposal-class-properties": "^7.14.5", "@babel/plugin-proposal-class-static-block": "^7.14.5", "@babel/plugin-proposal-dynamic-import": "^7.14.5", @@ -1005,7 +8964,7 @@ "@babel/plugin-transform-async-to-generator": "^7.14.5", "@babel/plugin-transform-block-scoped-functions": "^7.14.5", "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.9", "@babel/plugin-transform-computed-properties": "^7.14.5", "@babel/plugin-transform-destructuring": "^7.14.7", "@babel/plugin-transform-dotall-regex": "^7.14.5", @@ -1016,10 +8975,10 @@ "@babel/plugin-transform-literals": "^7.14.5", "@babel/plugin-transform-member-expression-literals": "^7.14.5", "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.0", "@babel/plugin-transform-modules-systemjs": "^7.14.5", "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", "@babel/plugin-transform-new-target": "^7.14.5", "@babel/plugin-transform-object-super": "^7.14.5", "@babel/plugin-transform-parameters": "^7.14.5", @@ -1034,11 +8993,11 @@ "@babel/plugin-transform-unicode-escapes": "^7.14.5", "@babel/plugin-transform-unicode-regex": "^7.14.5", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", + "@babel/types": "^7.15.0", "babel-plugin-polyfill-corejs2": "^0.2.2", "babel-plugin-polyfill-corejs3": "^0.2.2", "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.15.0", + "core-js-compat": "^3.16.0", "semver": "^6.3.0" } }, @@ -1056,9 +9015,9 @@ } }, "@babel/register": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.14.5.tgz", - "integrity": "sha512-TjJpGz/aDjFGWsItRBQMOFTrmTI9tr79CHOK+KIvLeCkbxuOAk2M5QHjvruIMGoo9OuccMh5euplPzc5FjAKGg==", + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.15.3.tgz", + "integrity": "sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw==", "dev": true, "requires": { "clone-deep": "^4.0.1", @@ -1077,71 +9036,123 @@ } }, "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" } }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz", + "integrity": "sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "peer": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "peer": true, + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "peer": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true, + "peer": true + }, "@moneybutton/brfc": { "version": "git+ssh://git@github.com/chainbow/brfc.git#aba3a22013ebbe41be7ec27e8de34b7b6a948135", - "from": "@moneybutton/brfc@github:chainbow/brfc" + "from": "@moneybutton/brfc@github:chainbow/brfc", + "requires": {} }, "@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents.2", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.2.tgz", - "integrity": "sha512-Fb8WxUFOBQVl+CX4MWet5o7eCc6Pj04rXIwVKZ6h1NnqTo45eOQW6aWyhG25NIODvWFwTDMwBsYxrQ3imxpetg==", + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^5.1.2", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } + "optional": true }, "@rollup/plugin-commonjs": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.0.tgz", - "integrity": "sha512-adTpD6ATGbehdaQoZQ6ipDFhdjqsTgpOAhFiPwl+dzre4pPshsecptDPyEFb61JMJ1+mGljktaC4jI8ARMSNyw==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -1154,9 +9165,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.0.tgz", - "integrity": "sha512-41X411HJ3oikIDivT5OKe9EZ6ud6DXudtfNrGbC4nniaxx2esiWjkLOzgnZsWq1IM8YIeL2rzRGLZLBjlhnZtQ==", + "version": "13.0.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz", + "integrity": "sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -1168,9 +9179,9 @@ } }, "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-3.0.0.tgz", + "integrity": "sha512-3c7JCbMuYXM4PbPWT4+m/4Y6U60SgsnDT/cCyAyUKwFHg7pTSfsSQzIpETha3a3ig6OdOKzZz87D9ZXIK3qsDg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -1215,9 +9226,9 @@ "dev": true }, "@tsconfig/node16": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz", - "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", "dev": true }, "@types/estree": { @@ -1226,10 +9237,16 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@types/node": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.3.1.tgz", - "integrity": "sha512-N87VuQi7HEeRJkhzovao/JviiqKjDKMVKxKMfUvSKw+MbkbW8R0nA3fi/MQhhlxV2fQ+2ReM+/Nt4efdrJx3zA==", + "version": "16.9.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.4.tgz", + "integrity": "sha512-KDazLNYAGIuJugdbULwFZULF9qQ13yNWEBFnfVpqlpgAAo6H/qnM9RjBgh0A0kmHf3XxAKLdN5mTIng9iUvVLA==", "dev": true }, "@types/resolve": { @@ -1282,6 +9299,13 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true }, "aes-js": { @@ -1308,9 +9332,9 @@ "dev": true }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -1322,29 +9346,6 @@ "color-convert": "^1.9.0" } }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -1360,27 +9361,6 @@ "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "optional": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "optional": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "optional": true - }, "array-includes": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", @@ -1394,13 +9374,6 @@ "is-string": "^1.0.5" } }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "optional": true - }, "array.prototype.flat": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", @@ -1442,12 +9415,12 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "optional": true + "peer": true }, "async": { "version": "2.6.3", @@ -1458,20 +9431,6 @@ "lodash": "^4.17.14" } }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "optional": true - }, "babel-eslint": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", @@ -1507,9 +9466,9 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", - "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz", + "integrity": "sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.2.2", @@ -1531,34 +9490,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "optional": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, "base-x": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", @@ -1577,14 +9508,8 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/bdd-lazy-var/-/bdd-lazy-var-2.6.1.tgz", "integrity": "sha512-X3ADwcFji/IHIrYJhTTpaiWhoOx4pl4whdAx1dmvdeUPsMUb7fVYFvf/Q33VEAEAVkEwi5rgNSZ0Y9oOVeQV+A==", - "dev": true - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, - "optional": true + "requires": {} }, "bl": { "version": "0.8.2", @@ -1636,25 +9561,6 @@ "concat-map": "0.0.1" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -1769,16 +9675,16 @@ } }, "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.0.tgz", + "integrity": "sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001254", + "colorette": "^1.3.0", + "electron-to-chromium": "^1.3.830", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^1.1.75" } }, "bs58": { @@ -1818,9 +9724,9 @@ "dev": true }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "buffer-xor": { @@ -1835,24 +9741,6 @@ "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "optional": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -1876,9 +9764,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001243", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz", - "integrity": "sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA==", + "version": "1.0.30001258", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001258.tgz", + "integrity": "sha512-RBByOG6xWXUp0CR2/WU2amXz3stjKpSl5J1xU49F1n2OxD//uBZO4wCKUiG+QMGf7CHGfDDcqoKriomoGVxTeA==", "dev": true }, "chai": { @@ -2007,94 +9895,6 @@ "safe-buffer": "^5.0.1" } }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "optional": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - } - } - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -2122,17 +9922,6 @@ "shallow-clone": "^3.0.0" } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "optional": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -2149,9 +9938,9 @@ "dev": true }, "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", "dev": true }, "colors": { @@ -2172,13 +9961,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true, - "optional": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2220,13 +10002,6 @@ } } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "optional": true - }, "core-js": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", @@ -2234,12 +10009,12 @@ "dev": true }, "core-js-compat": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", - "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.0.tgz", + "integrity": "sha512-tRVjOJu4PxdXjRMEgbP7lqWy1TWJu9a01oBkn8d+dNrhgmBwdTkzhHZpVJnEmhISLdoJI1lX08rcBcHi3TZIWg==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.17.0", "semver": "7.0.0" }, "dependencies": { @@ -2252,9 +10027,9 @@ } }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "corser": { @@ -2359,13 +10134,6 @@ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "optional": true - }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -2376,9 +10144,9 @@ } }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "deepmerge": { @@ -2405,17 +10173,6 @@ "object-keys": "^1.0.12" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -2476,22 +10233,10 @@ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, - "ecstatic": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.3.2.tgz", - "integrity": "sha512-fLf9l1hnwrHI2xn9mEDT7KIi22UDqA2jaCwyCbSUJh9a1V+LEUSL/JO/6TIz/QyuBURWUHrFL5Kg2TtO1bkkog==", - "dev": true, - "requires": { - "he": "^1.1.1", - "mime": "^1.6.0", - "minimist": "^1.1.0", - "url-join": "^2.0.5" - } - }, "electron-to-chromium": { - "version": "1.3.772", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.772.tgz", - "integrity": "sha512-X/6VRCXWALzdX+RjCtBU6cyg8WZgoxm9YA02COmDOiNJEZ59WkQggDbWZ4t/giHi/3GS+cvdrP6gbLISANAGYA==", + "version": "1.3.843", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.843.tgz", + "integrity": "sha512-OWEwAbzaVd1Lk9MohVw8LxMXFlnYd9oYTYxfX8KS++kLLjDfbovLOcEEXwRhG612dqGQ6+44SZvim0GXuBRiKg==", "dev": true }, "elliptic": { @@ -2542,22 +10287,24 @@ } }, "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.18.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", + "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "is-regex": "^1.1.4", + "is-string": "^1.0.7", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -2576,61 +10323,207 @@ "is-symbol": "^1.0.2" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "peer": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "peer": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "peer": true + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "peer": true + }, + "globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "peer": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "eslint-config-standard": { "version": "16.0.2", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.2.tgz", "integrity": "sha512-fx3f1rJDsl9bY7qzyX8SAtP8GBSk6MfXFaTfaGgk12aAYW4gJSyRm7dM790L6cbXv63fvjY4XeSzXnb4WM+SKw==", - "dev": true + "dev": true, + "requires": {} }, "eslint-config-standard-jsx": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", - "dev": true + "dev": true, + "requires": {} }, "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" + "debug": "^3.2.7", + "resolve": "^1.20.0" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, "eslint-module-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz", - "integrity": "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", + "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", "dev": true, "requires": { "debug": "^3.2.7", @@ -2931,153 +10824,6 @@ "safe-buffer": "^5.1.1" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "optional": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - } - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "optional": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3096,17 +10842,14 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "optional": true, + "peer": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "flat-cache": "^3.0.4" } }, "find-cache-dir": { @@ -3136,18 +10879,29 @@ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, - "follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", - "dev": true + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "peer": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true, - "optional": true + "peer": true + }, + "follow-redirects": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "dev": true }, "foreach": { "version": "2.0.5", @@ -3155,16 +10909,6 @@ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "optional": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", @@ -3266,12 +11010,15 @@ "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, - "optional": true + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } }, "glob": { "version": "7.1.7", @@ -3303,9 +11050,9 @@ "dev": true }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "growl": { @@ -3341,39 +11088,13 @@ "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "optional": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { + "has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, - "optional": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "has-symbols": "^1.0.2" } }, "hash-base": { @@ -3443,21 +11164,23 @@ } }, "http-server": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.12.3.tgz", - "integrity": "sha512-be0dKG6pni92bRjq0kvExtj/NrrAd28/8fCXkaI/4piTwQMSDSLMhWyW0NI1V+DBI3aa1HMlQu46/HjVLfmugA==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-13.0.2.tgz", + "integrity": "sha512-R8kvPT7qp11AMJWLZsRShvm6heIXdlR/+tL5oAWNG/86A/X+IAFX6q0F9SA2G+dR5aH/759+9PLH0V34Q6j4rg==", "dev": true, "requires": { "basic-auth": "^1.0.3", "colors": "^1.4.0", "corser": "^2.0.1", - "ecstatic": "^3.3.2", + "he": "^1.1.0", "http-proxy": "^1.18.0", + "mime": "^1.6.0", "minimist": "^1.2.5", "opener": "^1.5.1", "portfinder": "^1.0.25", "secure-compare": "3.0.1", - "union": "~0.5.0" + "union": "~0.5.0", + "url-join": "^2.0.5" } }, "idb-wrapper": { @@ -3526,16 +11249,6 @@ "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", "dev": true }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -3543,87 +11256,48 @@ "dev": true }, "is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "optional": true, "requires": { - "binary-extensions": "^1.0.0" + "has-bigints": "^1.0.1" } }, "is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true, - "optional": true - }, "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", "dev": true, "requires": { "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "dev": true - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "optional": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "has-tostringtag": "^1.0.0" } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3657,34 +11331,15 @@ "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, - "optional": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "has-tostringtag": "^1.0.0" } }, - "is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true - }, "is-object": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", @@ -3715,20 +11370,23 @@ } }, "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" } }, "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-symbol": { "version": "1.0.4", @@ -3745,13 +11403,6 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "optional": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -3825,12 +11476,12 @@ } }, "jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", "dev": true, "requires": { - "array-includes": "^3.1.2", + "array-includes": "^3.1.3", "object.assign": "^4.1.2" } }, @@ -4096,12 +11747,33 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true, + "peer": true + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "peer": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true, + "peer": true + }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -4122,9 +11794,9 @@ } }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -4220,23 +11892,6 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "optional": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "optional": true, - "requires": { - "object-visit": "^1.0.0" - } - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -4248,51 +11903,6 @@ "safe-buffer": "^5.1.2" } }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", @@ -4334,29 +11944,6 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "optional": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -4483,49 +12070,6 @@ "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -4544,9 +12088,9 @@ "dev": true }, "node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "version": "1.1.75", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", + "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", "dev": true }, "normalize-package-data": { @@ -4581,85 +12125,10 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "optional": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, "object-keys": { @@ -4668,16 +12137,6 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "optional": true, - "requires": { - "isobject": "^3.0.0" - } - }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -4713,16 +12172,6 @@ "has": "^1.0.3" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "optional": true, - "requires": { - "isobject": "^3.0.1" - } - }, "object.values": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", @@ -4824,13 +12273,6 @@ "error-ex": "^1.2.0" } }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "optional": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5084,13 +12526,6 @@ } } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "optional": true - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -5275,18 +12710,6 @@ } } }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -5294,18 +12717,18 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", "dev": true, "requires": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "regenerator-transform": { "version": "0.14.5", @@ -5316,40 +12739,6 @@ "@babel/runtime": "^7.8.4" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -5367,17 +12756,17 @@ "dev": true }, "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", "dev": true, "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" } }, "regjsgen": { @@ -5387,9 +12776,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -5403,33 +12792,19 @@ } } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true, - "optional": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "optional": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "optional": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "peer": true + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -5452,19 +12827,15 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true, - "optional": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "optional": true + "peer": true, + "requires": { + "glob": "^7.1.3" + } }, "ripemd160": { "version": "2.0.2", @@ -5477,9 +12848,9 @@ } }, "rollup": { - "version": "2.53.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.53.0.tgz", - "integrity": "sha512-spgrY78Toh+m0+zaOoeaayJKuzFuWy6o1PdFIBMVwRcuxT0xCOX9A5rChyKe+2ruL4lePKWUMImS4mMW1QAkmQ==", + "version": "2.56.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.3.tgz", + "integrity": "sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -5566,16 +12937,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "optional": true, - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -5603,19 +12964,6 @@ "randombytes": "^2.1.0" } }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -5688,190 +13036,76 @@ "dev": true }, "should-type-adaptors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", - "dev": true, - "requires": { - "should-type": "^1.3.0", - "should-util": "^1.0.0" - } - }, - "should-util": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "optional": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "requires": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" } }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "should-util": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", + "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, - "optional": true, "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "optional": true, + "peer": true, "requires": { - "kind-of": "^3.2.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "optional": true, + "peer": true, "requires": { - "is-buffer": "^1.1.5" + "color-name": "~1.1.4" } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true } } }, @@ -5881,24 +13115,10 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "optional": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -5913,13 +13133,6 @@ } } }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true, - "optional": true - }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -5953,44 +13166,11 @@ } }, "spdx-license-ids": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", - "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "optional": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -6053,9 +13233,9 @@ "dev": true }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -6299,89 +13479,20 @@ "xdg-basedir": "^4.0.0" } }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "optional": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "safe-buffer": "~5.1.0" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true } } }, @@ -6438,23 +13549,6 @@ "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -6485,105 +13579,81 @@ "has-flag": "^3.0.0" } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, - "optional": true, + "peer": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", "dev": true, - "optional": true, + "peer": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "optional": true, - "requires": { - "is-plain-object": "^2.0.4" - } + "peer": true } } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true }, "ts-node": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.1.0.tgz", - "integrity": "sha512-6szn3+J9WyG2hE+5W8e0ruZrzyk1uFLYye6IGMBadnOzDh8aP7t8CbFpsfCiEx2+wMixAhjFt7lOZC4+l+WbEA==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz", + "integrity": "sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==", "dev": true, "requires": { + "@cspotcode/source-map-support": "0.6.1", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.1", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "source-map-support": "^0.5.17", "yn": "3.1.1" }, "dependencies": { + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -6593,14 +13663,26 @@ } }, "tsconfig-paths": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz", - "integrity": "sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", + "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", "dev": true, "requires": { - "json5": "^2.2.0", + "@types/json5": "^0.0.29", + "json5": "^1.0.1", "minimist": "^1.2.0", "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } } }, "type-check": { @@ -6618,6 +13700,13 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "peer": true + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -6630,6 +13719,13 @@ "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=", "dev": true }, + "typescript": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", + "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "dev": true, + "peer": true + }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -6643,31 +13739,31 @@ } }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, "union": { @@ -6679,75 +13775,11 @@ "qs": "^6.4.0" } }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "optional": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, "unorm": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=" }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "optional": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "optional": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "optional": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "optional": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -6757,26 +13789,12 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true, - "optional": true - }, "url-join": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", "dev": true }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "optional": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 0769ba0..7bf336e 100644 --- a/package.json +++ b/package.json @@ -33,24 +33,24 @@ "moment": "^2.24.0" }, "devDependencies": { - "@babel/cli": "7.14.5", - "@babel/core": "7.14.6", - "@babel/plugin-proposal-object-rest-spread": "7.14.7", - "@babel/plugin-transform-runtime": "7.14.5", + "@babel/cli": "7.15.7", + "@babel/core": "7.15.5", + "@babel/plugin-proposal-object-rest-spread": "7.15.6", + "@babel/plugin-transform-runtime": "7.15.0", "@babel/polyfill": "^7.10.4", - "@babel/preset-env": "7.14.7", + "@babel/preset-env": "7.15.0", "@babel/register": "^7.10.5", - "@rollup/plugin-commonjs": "19.0.0", - "@rollup/plugin-node-resolve": "13.0.0", - "@rollup/plugin-replace": "2.4.2", + "@rollup/plugin-commonjs": "20.0.0", + "@rollup/plugin-node-resolve": "13.0.4", + "@rollup/plugin-replace": "3.0.0", "babel-eslint": "10.1.0", "bdd-lazy-var": "2.6.1", "chai": "4.3.4", "dotenv-cli": "4.0.0", - "http-server": "0.12.3", + "http-server": "13.0.2", "mocha": "9.0.2", "mocha-define": "^0.2.0", - "rollup": "2.53.0", + "rollup": "2.56.3", "rollup-plugin-babel": "4.4.0", "rollup-plugin-node-builtins": "2.1.2", "rollup-plugin-node-globals": "1.4.0", diff --git a/src/BrowserDns.js b/src/BrowserDns.js index fae4fdd..f3f4630 100644 --- a/src/BrowserDns.js +++ b/src/BrowserDns.js @@ -2,12 +2,17 @@ import { DnsOverHttps } from './dns-over-https' class BrowserDns { constructor (fetch) { - this.doh = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' }) + this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' }) + this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }) } async resolveSrv (aDomain, aCallback) { try { - const response = await this.doh.resolveSrv(aDomain) + const response = await Promise.any([ + this.dohAli.resolveSrv(aDomain), + this.dohGoogle.resolveSrv(aDomain) + ]) + if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { const [priority, weight, port, name] = record.data.split(' ') diff --git a/src/EndpointResolver.js b/src/EndpointResolver.js index 4c489b7..39fba93 100644 --- a/src/EndpointResolver.js +++ b/src/EndpointResolver.js @@ -1,11 +1,10 @@ import { CapabilityCodes } from './constants' import { DnsClient } from './dns-client' -import { DnsOverHttps } from './dns-over-https' import { Http } from './http' class EndpointResolver { constructor (dns = null, fetch) { - this.dnsClient = new DnsClient(dns, new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })) + this.dnsClient = new DnsClient(dns, fetch) this.http = new Http(fetch) this._cache = {} diff --git a/src/VerifiableMessage.js b/src/VerifiableMessage.js index 3c7ca25..66a7524 100644 --- a/src/VerifiableMessage.js +++ b/src/VerifiableMessage.js @@ -15,7 +15,7 @@ class VerifiableMessage { dt, purpose }) { - if (dt.toISOString) { + if (dt && dt.toISOString) { dt = dt.toISOString() } diff --git a/src/dns-client.js b/src/dns-client.js index 31fc32c..4e3b54f 100644 --- a/src/dns-client.js +++ b/src/dns-client.js @@ -1,9 +1,9 @@ -// import { DnsOverHttps } from "./dns-over-https" - +import { DnsOverHttps } from './dns-over-https' class DnsClient { - constructor (dns, doh) { + constructor (dns, fetch) { this.dns = dns - this.doh = doh + this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' }) + this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' }) } async checkSrv (aDomain) { @@ -78,7 +78,10 @@ class DnsClient { } async validateDnssec (aDomain) { - const dnsResponse = await this.doh.queryBsvaliasDomain(aDomain) + const dnsResponse = await Promise.any([ + this.dohAli.queryBsvaliasDomain(aDomain), + this.dohGoogle.queryBsvaliasDomain(aDomain) + ]) if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { throw new Error('Insecure domain.') } From c43e9c5ffe50d370a534c4c5909db8eaa37c6354 Mon Sep 17 00:00:00 2001 From: Long Li Date: Mon, 20 Sep 2021 21:34:23 +0900 Subject: [PATCH 28/33] add promise.any --- dist/paymail-client.cjs.js | 6 +- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 5 +- dist/paymail-client.esm.js.map | 2 +- package-lock.json | 344 ++++++++++++++++++++++++++------- package.json | 3 +- src/BrowserDns.js | 3 +- src/dns-client.js | 4 +- 8 files changed, 293 insertions(+), 76 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index 23f3e67..cea0612 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -3,6 +3,7 @@ Object.defineProperty(exports, '__esModule', { value: true }); var brfc = require('@moneybutton/brfc'); +var any = require('promise.any'); var _defineProperty = require('@babel/runtime/helpers/defineProperty'); require('abort-controller/polyfill'); var AbortController = require('abort-controller'); @@ -11,6 +12,7 @@ var fetch = require('cross-fetch'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } +var any__default = /*#__PURE__*/_interopDefaultLegacy(any); var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); var AbortController__default = /*#__PURE__*/_interopDefaultLegacy(AbortController); var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment); @@ -138,7 +140,7 @@ class DnsClient { } async validateDnssec(aDomain) { - const dnsResponse = await Promise.any([this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain)]); + const dnsResponse = await any__default['default']([this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain)]); if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { throw new Error('Insecure domain.'); @@ -435,7 +437,7 @@ class BrowserDns { async resolveSrv(aDomain, aCallback) { try { - const response = await Promise.any([this.dohAli.resolveSrv(aDomain), this.dohGoogle.resolveSrv(aDomain)]); + const response = await any__default['default']([this.dohAli.resolveSrv(aDomain), this.dohGoogle.resolveSrv(aDomain)]); if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index 3e831aa..587be3a 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport any from 'promise.any';\n\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport any from 'promise.any';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index 348de85..f10e6fd 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -1,4 +1,5 @@ import { brfc } from '@moneybutton/brfc'; +import any from 'promise.any'; import _defineProperty from '@babel/runtime/helpers/defineProperty'; import 'abort-controller/polyfill'; import AbortController from 'abort-controller'; @@ -127,7 +128,7 @@ class DnsClient { } async validateDnssec(aDomain) { - const dnsResponse = await Promise.any([this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain)]); + const dnsResponse = await any([this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain)]); if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { throw new Error('Insecure domain.'); @@ -424,7 +425,7 @@ class BrowserDns { async resolveSrv(aDomain, aCallback) { try { - const response = await Promise.any([this.dohAli.resolveSrv(aDomain), this.dohGoogle.resolveSrv(aDomain)]); + const response = await any([this.dohAli.resolveSrv(aDomain), this.dohGoogle.resolveSrv(aDomain)]); if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index b37f66c..4122200 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport any from 'promise.any';\n\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport any from 'promise.any';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 42bbe73..95acb5d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,8 @@ "abort-controller": "3.0.0", "bsv": "^1.5.5", "cross-fetch": "^3.1.4", - "moment": "^2.24.0" + "moment": "^2.24.0", + "promise.any": "^2.0.2" }, "devDependencies": { "@babel/cli": "7.15.7", @@ -2052,6 +2053,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.map": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.3.tgz", + "integrity": "sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -2455,7 +2474,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -2982,7 +3000,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, "dependencies": { "object-keys": "^1.0.12" }, @@ -3125,7 +3142,6 @@ "version": "1.18.6", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -3153,11 +3169,57 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-aggregate-error": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.5.tgz", + "integrity": "sha512-lCJhahEBlzD0WnPEpFCWqjxm4DI4fzuq1PVxLfsGdHImCWSUhASlv+lrBX4Wc47g62SAO4+axBUfUMgJYIhilg==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1", + "functions-have-names": "^1.2.1", + "get-intrinsic": "^1.0.1", + "globalthis": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "node_modules/es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -3997,8 +4059,7 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/functional-red-black-tree": { "version": "1.0.1", @@ -4006,6 +4067,14 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/functions-have-names": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", + "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/fwd-stream": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", @@ -4070,7 +4139,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -4096,7 +4164,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -4149,6 +4216,20 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", + "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", @@ -4168,7 +4249,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -4180,7 +4260,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4198,7 +4277,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -4210,7 +4288,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -4388,7 +4465,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -4407,6 +4483,21 @@ "node": "*" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -4417,7 +4508,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -4429,7 +4519,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -4445,7 +4534,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -4469,7 +4557,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -4510,6 +4597,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -4520,7 +4615,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -4532,7 +4626,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -4582,7 +4675,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -4594,11 +4686,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -4613,7 +4712,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -4662,6 +4760,23 @@ "node": ">=0.10.0" } }, + "node_modules/iterate-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", + "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==" + }, + "node_modules/iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "dependencies": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5509,7 +5624,6 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5518,7 +5632,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -5527,7 +5640,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -6075,6 +6187,26 @@ "node": ">=0.4.0" } }, + "node_modules/promise.any": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/promise.any/-/promise.any-2.0.2.tgz", + "integrity": "sha512-Punsyr4isT+hfleeMH6hqHd6RtsB5ZVuRw+pBIQBBlmQqyacoYyutA0zAAuSdZHSeHi64wIzUK6vvZrI963fFA==", + "dependencies": { + "array.prototype.map": "^1.0.2", + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0", + "es-aggregate-error": "^1.0.3", + "get-intrinsic": "^1.1.1", + "iterate-value": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -6688,7 +6820,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -7308,7 +7439,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -7321,7 +7451,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -7585,7 +7714,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "has-bigints": "^1.0.1", @@ -7718,7 +7846,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -9397,6 +9524,18 @@ "function-bind": "^1.1.1" } }, + "array.prototype.map": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.3.tgz", + "integrity": "sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.5" + } + }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -9745,7 +9884,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -10168,7 +10306,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -10290,7 +10427,6 @@ "version": "1.18.6", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", - "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -10312,11 +10448,50 @@ "unbox-primitive": "^1.0.1" } }, + "es-aggregate-error": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.5.tgz", + "integrity": "sha512-lCJhahEBlzD0WnPEpFCWqjxm4DI4fzuq1PVxLfsGdHImCWSUhASlv+lrBX4Wc47g62SAO4+axBUfUMgJYIhilg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1", + "functions-have-names": "^1.2.1", + "get-intrinsic": "^1.0.1", + "globalthis": "^1.0.1" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "es-get-iterator": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", + "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -10931,8 +11106,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -10940,6 +11114,11 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "functions-have-names": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", + "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==" + }, "fwd-stream": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", @@ -10997,7 +11176,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -11014,7 +11192,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -11049,6 +11226,14 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "globalthis": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", + "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", + "requires": { + "define-properties": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", @@ -11065,7 +11250,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -11073,8 +11257,7 @@ "has-bigints": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" }, "has-flag": { "version": "3.0.0", @@ -11085,14 +11268,12 @@ "has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -11236,7 +11417,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -11249,6 +11429,15 @@ "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", "dev": true }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -11259,7 +11448,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "requires": { "has-bigints": "^1.0.1" } @@ -11268,7 +11456,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -11277,8 +11464,7 @@ "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, "is-core-module": { "version": "2.6.0", @@ -11293,7 +11479,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -11319,6 +11504,11 @@ "is-extglob": "^2.1.1" } }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" + }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -11328,14 +11518,12 @@ "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" }, "is-number-object": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -11373,17 +11561,20 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" + }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -11392,7 +11583,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -11426,6 +11616,20 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, + "iterate-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", + "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==" + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -12128,20 +12332,17 @@ "object-inspect": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -12550,6 +12751,20 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise.any": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/promise.any/-/promise.any-2.0.2.tgz", + "integrity": "sha512-Punsyr4isT+hfleeMH6hqHd6RtsB5ZVuRw+pBIQBBlmQqyacoYyutA0zAAuSdZHSeHi64wIzUK6vvZrI963fFA==", + "requires": { + "array.prototype.map": "^1.0.2", + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0", + "es-aggregate-error": "^1.0.3", + "get-intrinsic": "^1.1.1", + "iterate-value": "^1.0.2" + } + }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -13055,7 +13270,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -13533,7 +13747,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -13543,7 +13756,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -13730,7 +13942,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, "requires": { "function-bind": "^1.1.1", "has-bigints": "^1.0.1", @@ -13836,7 +14047,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", diff --git a/package.json b/package.json index 7bf336e..4bf69ec 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,8 @@ "abort-controller": "3.0.0", "bsv": "^1.5.5", "cross-fetch": "^3.1.4", - "moment": "^2.24.0" + "moment": "^2.24.0", + "promise.any": "^2.0.2" }, "devDependencies": { "@babel/cli": "7.15.7", diff --git a/src/BrowserDns.js b/src/BrowserDns.js index f3f4630..d590f13 100644 --- a/src/BrowserDns.js +++ b/src/BrowserDns.js @@ -1,4 +1,5 @@ import { DnsOverHttps } from './dns-over-https' +import any from 'promise.any'; class BrowserDns { constructor (fetch) { @@ -8,7 +9,7 @@ class BrowserDns { async resolveSrv (aDomain, aCallback) { try { - const response = await Promise.any([ + const response = await any([ this.dohAli.resolveSrv(aDomain), this.dohGoogle.resolveSrv(aDomain) ]) diff --git a/src/dns-client.js b/src/dns-client.js index 4e3b54f..767172a 100644 --- a/src/dns-client.js +++ b/src/dns-client.js @@ -1,4 +1,6 @@ import { DnsOverHttps } from './dns-over-https' +import any from 'promise.any'; + class DnsClient { constructor (dns, fetch) { this.dns = dns @@ -78,7 +80,7 @@ class DnsClient { } async validateDnssec (aDomain) { - const dnsResponse = await Promise.any([ + const dnsResponse = await any([ this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain) ]) From 1333276826508a4cb805af60c9c399d0957a493b Mon Sep 17 00:00:00 2001 From: Long Li Date: Mon, 20 Sep 2021 22:46:37 +0900 Subject: [PATCH 29/33] use bluebird --- dist/paymail-client.cjs.js | 15 +- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 12 +- dist/paymail-client.esm.js.map | 2 +- package-lock.json | 361 ++++++++------------------------- package.json | 6 +- src/BrowserDns.js | 4 +- src/Clock.js | 3 +- src/dns-client.js | 5 +- test/endpoint-resolver.js | 2 +- 10 files changed, 106 insertions(+), 306 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index cea0612..04b9755 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -3,19 +3,17 @@ Object.defineProperty(exports, '__esModule', { value: true }); var brfc = require('@moneybutton/brfc'); -var any = require('promise.any'); +var Promise$1 = require('bluebird'); var _defineProperty = require('@babel/runtime/helpers/defineProperty'); require('abort-controller/polyfill'); var AbortController = require('abort-controller'); -var moment = require('moment'); var fetch = require('cross-fetch'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } -var any__default = /*#__PURE__*/_interopDefaultLegacy(any); +var Promise__default = /*#__PURE__*/_interopDefaultLegacy(Promise$1); var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); var AbortController__default = /*#__PURE__*/_interopDefaultLegacy(AbortController); -var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment); var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch); const CapabilityCodes = { @@ -63,7 +61,7 @@ class DnsClient { } async checkSrv(aDomain) { - return new Promise((resolve, reject) => { + return new Promise__default['default']((resolve, reject) => { this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { try { if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) { @@ -140,7 +138,8 @@ class DnsClient { } async validateDnssec(aDomain) { - const dnsResponse = await any__default['default']([this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain)]); + const dnsResponse = await Promise__default['default'].any([this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain)]); + console.log('dnsResponse', dnsResponse); if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { throw new Error('Insecure domain.'); @@ -412,7 +411,7 @@ class RequestBodyFactory { class Clock { now() { - return moment__default['default'](); + return Date; } } @@ -437,7 +436,7 @@ class BrowserDns { async resolveSrv(aDomain, aCallback) { try { - const response = await any__default['default']([this.dohAli.resolveSrv(aDomain), this.dohGoogle.resolveSrv(aDomain)]); + const response = await Promise__default['default'].any([this.dohAli.resolveSrv(aDomain), this.dohGoogle.resolveSrv(aDomain)]); if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index 587be3a..14e54f8 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport any from 'promise.any';\n\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport any from 'promise.any';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n console.log('dnsResponse',dnsResponse)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","\nclass Clock {\n now () {\n return Date\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","log","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","Date","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index f10e6fd..47b0bd2 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -1,9 +1,8 @@ import { brfc } from '@moneybutton/brfc'; -import any from 'promise.any'; +import Promise$1 from 'bluebird'; import _defineProperty from '@babel/runtime/helpers/defineProperty'; import 'abort-controller/polyfill'; import AbortController from 'abort-controller'; -import moment from 'moment'; import fetch from 'cross-fetch'; const CapabilityCodes = { @@ -51,7 +50,7 @@ class DnsClient { } async checkSrv(aDomain) { - return new Promise((resolve, reject) => { + return new Promise$1((resolve, reject) => { this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => { try { if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) { @@ -128,7 +127,8 @@ class DnsClient { } async validateDnssec(aDomain) { - const dnsResponse = await any([this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain)]); + const dnsResponse = await Promise$1.any([this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain)]); + console.log('dnsResponse', dnsResponse); if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { throw new Error('Insecure domain.'); @@ -400,7 +400,7 @@ class RequestBodyFactory { class Clock { now() { - return moment(); + return Date; } } @@ -425,7 +425,7 @@ class BrowserDns { async resolveSrv(aDomain, aCallback) { try { - const response = await any([this.dohAli.resolveSrv(aDomain), this.dohGoogle.resolveSrv(aDomain)]); + const response = await Promise$1.any([this.dohAli.resolveSrv(aDomain), this.dohGoogle.resolveSrv(aDomain)]); if (response.Status === 0 && response.Answer) { const data = response.Answer.map(record => { diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 4122200..19164e5 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport any from 'promise.any';\n\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport any from 'promise.any';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n console.log('dnsResponse',dnsResponse)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","\nclass Clock {\n now () {\n return Date\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","log","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","Date","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 95acb5d..0b4c6a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,10 +12,9 @@ "@babel/runtime": "7.14.6", "@moneybutton/brfc": "github:chainbow/brfc", "abort-controller": "3.0.0", + "bluebird": "^3.7.2", "bsv": "^1.5.5", - "cross-fetch": "^3.1.4", - "moment": "^2.24.0", - "promise.any": "^2.0.2" + "cross-fetch": "^3.1.4" }, "devDependencies": { "@babel/cli": "7.15.7", @@ -35,6 +34,7 @@ "http-server": "13.0.2", "mocha": "9.0.2", "mocha-define": "^0.2.0", + "moment": "^2.24.0", "rollup": "2.56.3", "rollup-plugin-babel": "4.4.0", "rollup-plugin-node-builtins": "2.1.2", @@ -2053,24 +2053,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.map": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.3.tgz", - "integrity": "sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -2262,6 +2244,11 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, "node_modules/bn.js": { "version": "4.11.9", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", @@ -2474,6 +2461,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -3000,6 +2988,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, "dependencies": { "object-keys": "^1.0.12" }, @@ -3142,6 +3131,7 @@ "version": "1.18.6", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -3169,57 +3159,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-aggregate-error": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.5.tgz", - "integrity": "sha512-lCJhahEBlzD0WnPEpFCWqjxm4DI4fzuq1PVxLfsGdHImCWSUhASlv+lrBX4Wc47g62SAO4+axBUfUMgJYIhilg==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1", - "functions-have-names": "^1.2.1", - "get-intrinsic": "^1.0.1", - "globalthis": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "node_modules/es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -4059,7 +4003,8 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "node_modules/functional-red-black-tree": { "version": "1.0.1", @@ -4067,14 +4012,6 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "node_modules/functions-have-names": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", - "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/fwd-stream": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", @@ -4139,6 +4076,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -4164,6 +4102,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -4216,20 +4155,6 @@ "node": ">=4" } }, - "node_modules/globalthis": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", - "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", @@ -4249,6 +4174,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -4260,6 +4186,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4277,6 +4204,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -4288,6 +4216,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -4465,6 +4394,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -4483,21 +4413,6 @@ "node": "*" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -4508,6 +4423,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -4519,6 +4435,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -4534,6 +4451,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -4557,6 +4475,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -4597,14 +4516,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -4615,6 +4526,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -4626,6 +4538,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -4675,6 +4588,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -4686,18 +4600,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -4712,6 +4619,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -4760,23 +4668,6 @@ "node": ">=0.10.0" } }, - "node_modules/iterate-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", - "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==" - }, - "node_modules/iterate-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", - "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", - "dependencies": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5530,6 +5421,7 @@ "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "dev": true, "engines": { "node": "*" } @@ -5624,6 +5516,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5632,6 +5525,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -5640,6 +5534,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -6187,26 +6082,6 @@ "node": ">=0.4.0" } }, - "node_modules/promise.any": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/promise.any/-/promise.any-2.0.2.tgz", - "integrity": "sha512-Punsyr4isT+hfleeMH6hqHd6RtsB5ZVuRw+pBIQBBlmQqyacoYyutA0zAAuSdZHSeHi64wIzUK6vvZrI963fFA==", - "dependencies": { - "array.prototype.map": "^1.0.2", - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0", - "es-aggregate-error": "^1.0.3", - "get-intrinsic": "^1.1.1", - "iterate-value": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -6820,6 +6695,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -7439,6 +7315,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -7451,6 +7328,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -7714,6 +7592,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "has-bigints": "^1.0.1", @@ -7846,6 +7725,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -9524,18 +9404,6 @@ "function-bind": "^1.1.1" } }, - "array.prototype.map": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.3.tgz", - "integrity": "sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.5" - } - }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -9685,6 +9553,11 @@ } } }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, "bn.js": { "version": "4.11.9", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", @@ -9884,6 +9757,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -10306,6 +10180,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -10427,6 +10302,7 @@ "version": "1.18.6", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", + "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -10448,50 +10324,11 @@ "unbox-primitive": "^1.0.1" } }, - "es-aggregate-error": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.5.tgz", - "integrity": "sha512-lCJhahEBlzD0WnPEpFCWqjxm4DI4fzuq1PVxLfsGdHImCWSUhASlv+lrBX4Wc47g62SAO4+axBUfUMgJYIhilg==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1", - "functions-have-names": "^1.2.1", - "get-intrinsic": "^1.0.1", - "globalthis": "^1.0.1" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - } - } - }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -11106,7 +10943,8 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "functional-red-black-tree": { "version": "1.0.1", @@ -11114,11 +10952,6 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "functions-have-names": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", - "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==" - }, "fwd-stream": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", @@ -11176,6 +11009,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -11192,6 +11026,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -11226,14 +11061,6 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, - "globalthis": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", - "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", - "requires": { - "define-properties": "^1.1.3" - } - }, "graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", @@ -11250,6 +11077,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -11257,7 +11085,8 @@ "has-bigints": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true }, "has-flag": { "version": "3.0.0", @@ -11268,12 +11097,14 @@ "has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -11417,6 +11248,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -11429,15 +11261,6 @@ "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=", "dev": true }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -11448,6 +11271,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "requires": { "has-bigints": "^1.0.1" } @@ -11456,6 +11280,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -11464,7 +11289,8 @@ "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true }, "is-core-module": { "version": "2.6.0", @@ -11479,6 +11305,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -11504,11 +11331,6 @@ "is-extglob": "^2.1.1" } }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" - }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -11518,12 +11340,14 @@ "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true }, "is-number-object": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -11561,20 +11385,17 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" - }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -11583,6 +11404,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -11616,20 +11438,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, - "iterate-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", - "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==" - }, - "iterate-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", - "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", - "requires": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - } - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -12260,7 +12068,8 @@ "moment": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "dev": true }, "ms": { "version": "2.1.2", @@ -12332,17 +12141,20 @@ "object-inspect": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -12751,20 +12563,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise.any": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/promise.any/-/promise.any-2.0.2.tgz", - "integrity": "sha512-Punsyr4isT+hfleeMH6hqHd6RtsB5ZVuRw+pBIQBBlmQqyacoYyutA0zAAuSdZHSeHi64wIzUK6vvZrI963fFA==", - "requires": { - "array.prototype.map": "^1.0.2", - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0", - "es-aggregate-error": "^1.0.3", - "get-intrinsic": "^1.1.1", - "iterate-value": "^1.0.2" - } - }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -13270,6 +13068,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -13747,6 +13546,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -13756,6 +13556,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -13942,6 +13743,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, "requires": { "function-bind": "^1.1.1", "has-bigints": "^1.0.1", @@ -14047,6 +13849,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", diff --git a/package.json b/package.json index 4bf69ec..129383d 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,12 @@ "@babel/runtime": "7.14.6", "@moneybutton/brfc": "github:chainbow/brfc", "abort-controller": "3.0.0", + "bluebird": "^3.7.2", "bsv": "^1.5.5", - "cross-fetch": "^3.1.4", - "moment": "^2.24.0", - "promise.any": "^2.0.2" + "cross-fetch": "^3.1.4" }, "devDependencies": { + "moment": "^2.24.0", "@babel/cli": "7.15.7", "@babel/core": "7.15.5", "@babel/plugin-proposal-object-rest-spread": "7.15.6", diff --git a/src/BrowserDns.js b/src/BrowserDns.js index d590f13..db211e9 100644 --- a/src/BrowserDns.js +++ b/src/BrowserDns.js @@ -1,5 +1,5 @@ import { DnsOverHttps } from './dns-over-https' -import any from 'promise.any'; +import Promise from 'bluebird'; class BrowserDns { constructor (fetch) { @@ -9,7 +9,7 @@ class BrowserDns { async resolveSrv (aDomain, aCallback) { try { - const response = await any([ + const response = await Promise.any([ this.dohAli.resolveSrv(aDomain), this.dohGoogle.resolveSrv(aDomain) ]) diff --git a/src/Clock.js b/src/Clock.js index e23a098..7ee3646 100644 --- a/src/Clock.js +++ b/src/Clock.js @@ -1,8 +1,7 @@ -import moment from 'moment' class Clock { now () { - return moment() + return Date } } diff --git a/src/dns-client.js b/src/dns-client.js index 767172a..7aa1261 100644 --- a/src/dns-client.js +++ b/src/dns-client.js @@ -1,6 +1,5 @@ import { DnsOverHttps } from './dns-over-https' -import any from 'promise.any'; - +import Promise from 'bluebird'; class DnsClient { constructor (dns, fetch) { this.dns = dns @@ -80,7 +79,7 @@ class DnsClient { } async validateDnssec (aDomain) { - const dnsResponse = await any([ + const dnsResponse = await Promise.any([ this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain) ]) diff --git a/test/endpoint-resolver.js b/test/endpoint-resolver.js index 71c3310..97873aa 100644 --- a/test/endpoint-resolver.js +++ b/test/endpoint-resolver.js @@ -24,7 +24,7 @@ describe('EndpointResolver', () => { def('doh', () => new DnsOverHttps(fetch, { baseUrl: get.dohUrl })) - def('dnsClient', () => new DnsClient(get.dns, get.doh)) + def('dnsClient', () => new DnsClient(get.dns, fetch)) def('resolver', () => EndpointResolver.create(get.dnsClient, fetch)) def('aDomain', () => 'somedomain.tld') From c8ab25a6848fe3651a5dda191ca6c4f8589208cd Mon Sep 17 00:00:00 2001 From: Long Li Date: Mon, 20 Sep 2021 23:03:42 +0900 Subject: [PATCH 30/33] restore moment --- dist/paymail-client.cjs.js | 5 +- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 4 +- dist/paymail-client.esm.js.map | 2 +- package-lock.json | 751 ++++++++++++++++----------------- package.json | 8 +- src/Clock.js | 3 +- 7 files changed, 376 insertions(+), 399 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index 04b9755..8bfd15b 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -7,6 +7,7 @@ var Promise$1 = require('bluebird'); var _defineProperty = require('@babel/runtime/helpers/defineProperty'); require('abort-controller/polyfill'); var AbortController = require('abort-controller'); +var moment = require('moment'); var fetch = require('cross-fetch'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } @@ -14,6 +15,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau var Promise__default = /*#__PURE__*/_interopDefaultLegacy(Promise$1); var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); var AbortController__default = /*#__PURE__*/_interopDefaultLegacy(AbortController); +var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment); var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch); const CapabilityCodes = { @@ -139,7 +141,6 @@ class DnsClient { async validateDnssec(aDomain) { const dnsResponse = await Promise__default['default'].any([this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain)]); - console.log('dnsResponse', dnsResponse); if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { throw new Error('Insecure domain.'); @@ -411,7 +412,7 @@ class RequestBodyFactory { class Clock { now() { - return Date; + return moment__default['default'](); } } diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index 14e54f8..74e230e 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n console.log('dnsResponse',dnsResponse)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","\nclass Clock {\n now () {\n return Date\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","log","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","Date","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index 47b0bd2..f0029b1 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -3,6 +3,7 @@ import Promise$1 from 'bluebird'; import _defineProperty from '@babel/runtime/helpers/defineProperty'; import 'abort-controller/polyfill'; import AbortController from 'abort-controller'; +import moment from 'moment'; import fetch from 'cross-fetch'; const CapabilityCodes = { @@ -128,7 +129,6 @@ class DnsClient { async validateDnssec(aDomain) { const dnsResponse = await Promise$1.any([this.dohAli.queryBsvaliasDomain(aDomain), this.dohGoogle.queryBsvaliasDomain(aDomain)]); - console.log('dnsResponse', dnsResponse); if (dnsResponse.Status !== 0 || !dnsResponse.Answer) { throw new Error('Insecure domain.'); @@ -400,7 +400,7 @@ class RequestBodyFactory { class Clock { now() { - return Date; + return moment(); } } diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 19164e5..41b7cea 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n console.log('dnsResponse',dnsResponse)\n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","\nclass Clock {\n now () {\n return Date\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","log","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","Date","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0b4c6a4..cdf3411 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,13 @@ "version": "0.38.3", "license": "Open-BSV", "dependencies": { - "@babel/runtime": "7.14.6", + "@babel/runtime": "7.15.4", "@moneybutton/brfc": "github:chainbow/brfc", "abort-controller": "3.0.0", "bluebird": "^3.7.2", "bsv": "^1.5.5", - "cross-fetch": "^3.1.4" + "cross-fetch": "^3.1.4", + "moment": "^2.24.0" }, "devDependencies": { "@babel/cli": "7.15.7", @@ -22,7 +23,7 @@ "@babel/plugin-proposal-object-rest-spread": "7.15.6", "@babel/plugin-transform-runtime": "7.15.0", "@babel/polyfill": "^7.10.4", - "@babel/preset-env": "7.15.0", + "@babel/preset-env": "7.15.6", "@babel/register": "^7.10.5", "@rollup/plugin-commonjs": "20.0.0", "@rollup/plugin-node-resolve": "13.0.4", @@ -32,9 +33,8 @@ "chai": "4.3.4", "dotenv-cli": "4.0.0", "http-server": "13.0.2", - "mocha": "9.0.2", + "mocha": "9.1.1", "mocha-define": "^0.2.0", - "moment": "^2.24.0", "rollup": "2.56.3", "rollup-plugin-babel": "4.4.0", "rollup-plugin-node-builtins": "2.1.2", @@ -1466,30 +1466,30 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.0.tgz", - "integrity": "sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.6.tgz", + "integrity": "sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw==", "dev": true, "dependencies": { "@babel/compat-data": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", + "@babel/plugin-proposal-async-generator-functions": "^7.15.4", "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.15.4", "@babel/plugin-proposal-dynamic-import": "^7.14.5", "@babel/plugin-proposal-export-namespace-from": "^7.14.5", "@babel/plugin-proposal-json-strings": "^7.14.5", "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", "@babel/plugin-proposal-optional-chaining": "^7.14.5", "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.15.4", "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -1508,25 +1508,25 @@ "@babel/plugin-transform-arrow-functions": "^7.14.5", "@babel/plugin-transform-async-to-generator": "^7.14.5", "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.9", + "@babel/plugin-transform-block-scoping": "^7.15.3", + "@babel/plugin-transform-classes": "^7.15.4", "@babel/plugin-transform-computed-properties": "^7.14.5", "@babel/plugin-transform-destructuring": "^7.14.7", "@babel/plugin-transform-dotall-regex": "^7.14.5", "@babel/plugin-transform-duplicate-keys": "^7.14.5", "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.15.4", "@babel/plugin-transform-function-name": "^7.14.5", "@babel/plugin-transform-literals": "^7.14.5", "@babel/plugin-transform-member-expression-literals": "^7.14.5", "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.15.0", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.4", + "@babel/plugin-transform-modules-systemjs": "^7.15.4", "@babel/plugin-transform-modules-umd": "^7.14.5", "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", "@babel/plugin-transform-new-target": "^7.14.5", "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.15.4", "@babel/plugin-transform-property-literals": "^7.14.5", "@babel/plugin-transform-regenerator": "^7.14.5", "@babel/plugin-transform-reserved-words": "^7.14.5", @@ -1538,7 +1538,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.14.5", "@babel/plugin-transform-unicode-regex": "^7.14.5", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.15.0", + "@babel/types": "^7.15.6", "babel-plugin-polyfill-corejs2": "^0.2.2", "babel-plugin-polyfill-corejs3": "^0.2.2", "babel-plugin-polyfill-regenerator": "^0.2.2", @@ -1588,9 +1588,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -1984,6 +1984,19 @@ "node": ">=4" } }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -2211,6 +2224,15 @@ } } }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/bl": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", @@ -2220,12 +2242,6 @@ "readable-stream": "~1.0.26" } }, - "node_modules/bl/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "node_modules/bl/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -2264,6 +2280,18 @@ "concat-map": "0.0.1" } }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -2362,19 +2390,11 @@ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } + "node_modules/browserify-sign/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/browserslist": { "version": "4.17.0", @@ -2422,11 +2442,6 @@ "unorm": "1.4.1" } }, - "node_modules/bsv/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, "node_modules/buffer-es6": { "version": "4.9.3", "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz", @@ -2562,97 +2577,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chokidar/node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/chokidar/node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/chokidar/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/chokidar/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -2762,6 +2686,42 @@ "typedarray": "^0.0.6" } }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", @@ -3088,6 +3048,11 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/elliptic/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -3481,6 +3446,12 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "node_modules/eslint-plugin-import/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -3888,6 +3859,18 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", @@ -4021,12 +4004,6 @@ "readable-stream": "~1.0.26-4" } }, - "node_modules/fwd-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "node_modules/fwd-stream/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -4241,19 +4218,11 @@ "node": ">=4" } }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } + "node_modules/hash-base/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/hash.js": { "version": "1.1.7", @@ -4386,9 +4355,9 @@ } }, "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "node_modules/internal-slot": { "version": "1.0.3", @@ -4431,6 +4400,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -4534,6 +4515,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/is-number-object": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", @@ -4643,9 +4633,9 @@ } }, "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "node_modules/isbuffer": { @@ -4764,12 +4754,6 @@ "readable-stream": "^1.0.26-4" } }, - "node_modules/level-blobs/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "node_modules/level-blobs/node_modules/readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", @@ -4922,12 +4906,6 @@ "xtend": "~3.0.0" } }, - "node_modules/levelup/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "node_modules/levelup/node_modules/prr": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", @@ -5285,9 +5263,9 @@ } }, "node_modules/mocha": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.2.tgz", - "integrity": "sha512-FpspiWU+UT9Sixx/wKimvnpkeW0mh6ROAKkIaPokj3xZgxeRhcna/k5X57jJghEr8X+Cgu/Vegf8zCX5ugSuTA==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-0wE74YMgOkCgBUj8VyIDwmLUjTsS13WV1Pg7l0SHea2qzZzlq7MDnfbPsHKcELBRk3+izEVkRofjmClpycudCA==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", @@ -5421,7 +5399,6 @@ "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "dev": true, "engines": { "node": "*" } @@ -6244,30 +6221,35 @@ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "engines": { - "node": ">=4" + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -7258,20 +7240,14 @@ } }, "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/string-range": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", @@ -7439,6 +7415,18 @@ "node": ">=4" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/ts-node": { "version": "10.2.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz", @@ -8928,30 +8916,30 @@ } }, "@babel/preset-env": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.0.tgz", - "integrity": "sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.6.tgz", + "integrity": "sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw==", "dev": true, "requires": { "@babel/compat-data": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", + "@babel/plugin-proposal-async-generator-functions": "^7.15.4", "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.15.4", "@babel/plugin-proposal-dynamic-import": "^7.14.5", "@babel/plugin-proposal-export-namespace-from": "^7.14.5", "@babel/plugin-proposal-json-strings": "^7.14.5", "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", "@babel/plugin-proposal-optional-chaining": "^7.14.5", "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.15.4", "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -8970,25 +8958,25 @@ "@babel/plugin-transform-arrow-functions": "^7.14.5", "@babel/plugin-transform-async-to-generator": "^7.14.5", "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.9", + "@babel/plugin-transform-block-scoping": "^7.15.3", + "@babel/plugin-transform-classes": "^7.15.4", "@babel/plugin-transform-computed-properties": "^7.14.5", "@babel/plugin-transform-destructuring": "^7.14.7", "@babel/plugin-transform-dotall-regex": "^7.14.5", "@babel/plugin-transform-duplicate-keys": "^7.14.5", "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.15.4", "@babel/plugin-transform-function-name": "^7.14.5", "@babel/plugin-transform-literals": "^7.14.5", "@babel/plugin-transform-member-expression-literals": "^7.14.5", "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.15.0", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.4", + "@babel/plugin-transform-modules-systemjs": "^7.15.4", "@babel/plugin-transform-modules-umd": "^7.14.5", "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", "@babel/plugin-transform-new-target": "^7.14.5", "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.15.4", "@babel/plugin-transform-property-literals": "^7.14.5", "@babel/plugin-transform-regenerator": "^7.14.5", "@babel/plugin-transform-reserved-words": "^7.14.5", @@ -9000,7 +8988,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.14.5", "@babel/plugin-transform-unicode-regex": "^7.14.5", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.15.0", + "@babel/types": "^7.15.6", "babel-plugin-polyfill-corejs2": "^0.2.2", "babel-plugin-polyfill-corejs3": "^0.2.2", "babel-plugin-polyfill-regenerator": "^0.2.2", @@ -9035,9 +9023,9 @@ } }, "@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -9353,6 +9341,16 @@ "color-convert": "^1.9.0" } }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -9518,6 +9516,12 @@ "dev": true, "requires": {} }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, "bl": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", @@ -9527,12 +9531,6 @@ "readable-stream": "~1.0.26" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -9573,6 +9571,15 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -9673,16 +9680,11 @@ "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true } } }, @@ -9720,13 +9722,6 @@ "hash.js": "^1.1.7", "inherits": "2.0.3", "unorm": "1.4.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } } }, "buffer-es6": { @@ -9826,75 +9821,6 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" - }, - "dependencies": { - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } } }, "cipher-base": { @@ -9989,6 +9915,44 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "contains-path": { @@ -10263,6 +10227,13 @@ "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + } } }, "emoji-regex": { @@ -10655,6 +10626,12 @@ "isarray": "^1.0.0" } }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -10864,6 +10841,15 @@ "flat-cache": "^3.0.4" } }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", @@ -10961,12 +10947,6 @@ "readable-stream": "~1.0.26-4" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -11120,16 +11100,11 @@ "safe-buffer": "^5.2.0" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true } } }, @@ -11240,9 +11215,9 @@ } }, "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "internal-slot": { "version": "1.0.3", @@ -11276,6 +11251,15 @@ "has-bigints": "^1.0.1" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -11343,6 +11327,12 @@ "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, "is-number-object": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", @@ -11416,9 +11406,9 @@ "dev": true }, "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "isbuffer": { @@ -11513,12 +11503,6 @@ "readable-stream": "^1.0.26-4" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", @@ -11670,12 +11654,6 @@ "xtend": "~3.0.0" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, "prr": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", @@ -11966,9 +11944,9 @@ } }, "mocha": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.0.2.tgz", - "integrity": "sha512-FpspiWU+UT9Sixx/wKimvnpkeW0mh6ROAKkIaPokj3xZgxeRhcna/k5X57jJghEr8X+Cgu/Vegf8zCX5ugSuTA==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-0wE74YMgOkCgBUj8VyIDwmLUjTsS13WV1Pg7l0SHea2qzZzlq7MDnfbPsHKcELBRk3+izEVkRofjmClpycudCA==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", @@ -12068,8 +12046,7 @@ "moment": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "dev": true + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "ms": { "version": "2.1.2", @@ -12701,26 +12678,23 @@ } }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" } }, "regenerate": { @@ -13493,20 +13467,12 @@ } }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } + "safe-buffer": "~5.2.0" } }, "string-range": { @@ -13641,6 +13607,15 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "ts-node": { "version": "10.2.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz", diff --git a/package.json b/package.json index 129383d..96c086a 100644 --- a/package.json +++ b/package.json @@ -25,21 +25,21 @@ "access": "public" }, "dependencies": { - "@babel/runtime": "7.14.6", + "@babel/runtime": "7.15.4", "@moneybutton/brfc": "github:chainbow/brfc", "abort-controller": "3.0.0", "bluebird": "^3.7.2", "bsv": "^1.5.5", + "moment": "^2.24.0", "cross-fetch": "^3.1.4" }, "devDependencies": { - "moment": "^2.24.0", "@babel/cli": "7.15.7", "@babel/core": "7.15.5", "@babel/plugin-proposal-object-rest-spread": "7.15.6", "@babel/plugin-transform-runtime": "7.15.0", "@babel/polyfill": "^7.10.4", - "@babel/preset-env": "7.15.0", + "@babel/preset-env": "7.15.6", "@babel/register": "^7.10.5", "@rollup/plugin-commonjs": "20.0.0", "@rollup/plugin-node-resolve": "13.0.4", @@ -49,7 +49,7 @@ "chai": "4.3.4", "dotenv-cli": "4.0.0", "http-server": "13.0.2", - "mocha": "9.0.2", + "mocha": "9.1.1", "mocha-define": "^0.2.0", "rollup": "2.56.3", "rollup-plugin-babel": "4.4.0", diff --git a/src/Clock.js b/src/Clock.js index 7ee3646..e23a098 100644 --- a/src/Clock.js +++ b/src/Clock.js @@ -1,7 +1,8 @@ +import moment from 'moment' class Clock { now () { - return Date + return moment() } } From a9064f338cef1e2ce7a4750b85e095299f4cadcf Mon Sep 17 00:00:00 2001 From: Long Li Date: Sun, 24 Oct 2021 13:51:40 +0900 Subject: [PATCH 31/33] add check Sale/Buy contract api --- src/PaymailClient.js | 26 +++++++++++++++++++++++++- src/constants.js | 28 +++++++++++++++++++--------- 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/PaymailClient.js b/src/PaymailClient.js index 27e1b9d..4cd621d 100644 --- a/src/PaymailClient.js +++ b/src/PaymailClient.js @@ -60,6 +60,30 @@ class PaymailClient { return await response.json() } + /** + * witness check sale contract. + * + * @param {String} domain - a domain + */ + async witnessCheckSale ( domain, args ) { + const apiDescriptor = await this.resolver.getApiDescriptionFor( domain ) + const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckSale ] + const response = await this.http.get( `${url}?${new URLSearchParams( args )}` ) + return await response.json() + } + + /** +* witness check buy contract. +* +* @param {String} domain - a domain +*/ + async witnessCheckBuy ( domain, args ) { + const apiDescriptor = await this.resolver.getApiDescriptionFor( domain ) + const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBuy ] + const response = await this.http.get( `${url}?${new URLSearchParams( args )}` ) + return await response.json() + } + /** * Get token's logo uri. * @@ -71,7 +95,7 @@ class PaymailClient { const apiDescriptor = await this.resolver.getApiDescriptionFor( domain ) let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ] uri = uri.replace( '{contractId}', contractId ) - return {uri} + return { uri } } /** diff --git a/src/constants.js b/src/constants.js index 559ceae..64c1cde 100644 --- a/src/constants.js +++ b/src/constants.js @@ -5,7 +5,7 @@ export const CapabilityCodes = { paymentDestination: 'paymentDestination', requestSenderValidation: brfc( 'bsvalias Payment Addressing (Payer Validation)', - ['andy (nChain)'], + [ 'andy (nChain)' ], '' ), verifyPublicKeyOwner: brfc( @@ -15,42 +15,52 @@ export const CapabilityCodes = { ), publicProfile: brfc( 'Public Profile (Name & Avatar)', - ['Ryan X. Charles (Money Button)'], + [ 'Ryan X. Charles (Money Button)' ], '1' ), receiveTransaction: brfc( 'Send raw transaction', - ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], + [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ], '1.1' ), p2pPaymentDestination: brfc( 'Get no monitored payment destination (p2p payment destination)', - ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], + [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ], '1.1' ), witnessPublic: brfc( 'Public API of the Controllable UTXO Token Witness', - ['LI Long (ChainBow)'], + [ 'LI Long (ChainBow)' ], '1' ), witnessCheckBaton: brfc( 'Check Baton API of the Controllable UTXO Token Witness', - ['LI Long (ChainBow)'], + [ 'LI Long (ChainBow)' ], '1' ), witnessCheckToken: brfc( 'Check Token API of the Controllable UTXO Token Witness', - ['LI Long (ChainBow)'], + [ 'LI Long (ChainBow)' ], '1' ), + witnessCheckSale: brfc( + 'Check Sale API of the Controllable UTXO Token Witness', + [ 'LI Long (ChainBow)' ], + '1' + ),//expect: 'c89beec44e80', + witnessCheckBuy: brfc( + 'Check Buy API of the Controllable UTXO Token Witness', + [ 'LI Long (ChainBow)' ], + '1', + ),//expect: '598b080631c4', tokenLogo: brfc( 'Logo URI of the Controllable UTXO Token', - ['LI Long (ChainBow)'], + [ 'LI Long (ChainBow)' ], '1' ), tokenInformation: brfc( 'Infomation URI of the Controllable UTXO Token', - ['LI Long (ChainBow)'], + [ 'LI Long (ChainBow)' ], '1' ), } From d891b8183dcc40833cc89dc414022199f2261047 Mon Sep 17 00:00:00 2001 From: Long Li Date: Thu, 28 Oct 2021 18:42:19 +0900 Subject: [PATCH 32/33] build prod --- dist/paymail-client.cjs.js | 30 ++++++++++++++++++++++++++++++ dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 30 ++++++++++++++++++++++++++++++ dist/paymail-client.esm.js.map | 2 +- 4 files changed, 62 insertions(+), 2 deletions(-) diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index 8bfd15b..1e5d849 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -29,6 +29,10 @@ const CapabilityCodes = { witnessPublic: brfc.brfc('Public API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), witnessCheckBaton: brfc.brfc('Check Baton API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), witnessCheckToken: brfc.brfc('Check Token API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + witnessCheckSale: brfc.brfc('Check Sale API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + //expect: 'c89beec44e80', + witnessCheckBuy: brfc.brfc('Check Buy API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + //expect: '598b080631c4', tokenLogo: brfc.brfc('Logo URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1'), tokenInformation: brfc.brfc('Infomation URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1') }; @@ -524,6 +528,32 @@ class PaymailClient { const response = await this.http.get(`${url}?${new URLSearchParams(args)}`); return await response.json(); } + /** + * witness check sale contract. + * + * @param {String} domain - a domain + */ + + + async witnessCheckSale(domain, args) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckSale]; + const response = await this.http.get(`${url}?${new URLSearchParams(args)}`); + return await response.json(); + } + /** + * witness check buy contract. + * + * @param {String} domain - a domain + */ + + + async witnessCheckBuy(domain, args) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckBuy]; + const response = await this.http.get(`${url}?${new URLSearchParams(args)}`); + return await response.json(); + } /** * Get token's logo uri. * diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index 74e230e..712f6e9 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n [ 'andy (nChain)' ],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n [ 'Ryan X. Charles (Money Button)' ],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckSale: brfc(\n 'Check Sale API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),//expect: 'c89beec44e80',\n witnessCheckBuy: brfc(\n 'Check Buy API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1',\n ),//expect: '598b080631c4',\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check sale contract.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckSale ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckSale ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n* witness check buy contract.\n*\n* @param {String} domain - a domain\n*/\n async witnessCheckBuy ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBuy ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return { uri }\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","witnessCheckSale","witnessCheckBuy","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index f0029b1..fae69f5 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -17,6 +17,10 @@ const CapabilityCodes = { witnessPublic: brfc('Public API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), witnessCheckBaton: brfc('Check Baton API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), witnessCheckToken: brfc('Check Token API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + witnessCheckSale: brfc('Check Sale API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + //expect: 'c89beec44e80', + witnessCheckBuy: brfc('Check Buy API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + //expect: '598b080631c4', tokenLogo: brfc('Logo URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1'), tokenInformation: brfc('Infomation URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1') }; @@ -512,6 +516,32 @@ class PaymailClient { const response = await this.http.get(`${url}?${new URLSearchParams(args)}`); return await response.json(); } + /** + * witness check sale contract. + * + * @param {String} domain - a domain + */ + + + async witnessCheckSale(domain, args) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckSale]; + const response = await this.http.get(`${url}?${new URLSearchParams(args)}`); + return await response.json(); + } + /** + * witness check buy contract. + * + * @param {String} domain - a domain + */ + + + async witnessCheckBuy(domain, args) { + const apiDescriptor = await this.resolver.getApiDescriptionFor(domain); + const url = apiDescriptor.capabilities[CapabilityCodes.witnessCheckBuy]; + const response = await this.http.get(`${url}?${new URLSearchParams(args)}`); + return await response.json(); + } /** * Get token's logo uri. * diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 41b7cea..9a4a874 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n ['andy (nChain)'],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n ['Ryan X. Charles (Money Button)'],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n ['LI Long (ChainBow)'],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return {uri}\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n [ 'andy (nChain)' ],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n [ 'Ryan X. Charles (Money Button)' ],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckSale: brfc(\n 'Check Sale API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),//expect: 'c89beec44e80',\n witnessCheckBuy: brfc(\n 'Check Buy API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1',\n ),//expect: '598b080631c4',\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check sale contract.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckSale ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckSale ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n* witness check buy contract.\n*\n* @param {String} domain - a domain\n*/\n async witnessCheckBuy ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBuy ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return { uri }\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","witnessCheckSale","witnessCheckBuy","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file From 7951034a13cf5d7c8a13cde0027aad6022b6dbae Mon Sep 17 00:00:00 2001 From: Long Li Date: Fri, 12 Nov 2021 11:19:11 +0900 Subject: [PATCH 33/33] remove moment, brfc, abortcontroller depends --- dist/paymail-client.cjs.js | 55 +++++++++++++++-------------- dist/paymail-client.cjs.js.map | 2 +- dist/paymail-client.esm.js | 29 ++++++++-------- dist/paymail-client.esm.js.map | 2 +- package-lock.json | 63 +--------------------------------- package.json | 3 -- src/Clock.js | 3 +- src/brfc.js | 11 ++++++ src/constants.js | 2 +- src/http.js | 39 ++++++++++----------- test/paymail-client-real.js | 26 ++++++++++++++ 11 files changed, 102 insertions(+), 133 deletions(-) create mode 100644 src/brfc.js create mode 100644 test/paymail-client-real.js diff --git a/dist/paymail-client.cjs.js b/dist/paymail-client.cjs.js index 1e5d849..b241110 100644 --- a/dist/paymail-client.cjs.js +++ b/dist/paymail-client.cjs.js @@ -2,39 +2,43 @@ Object.defineProperty(exports, '__esModule', { value: true }); -var brfc = require('@moneybutton/brfc'); var Promise$1 = require('bluebird'); var _defineProperty = require('@babel/runtime/helpers/defineProperty'); -require('abort-controller/polyfill'); -var AbortController = require('abort-controller'); -var moment = require('moment'); var fetch = require('cross-fetch'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var Promise__default = /*#__PURE__*/_interopDefaultLegacy(Promise$1); var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); -var AbortController__default = /*#__PURE__*/_interopDefaultLegacy(AbortController); -var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment); var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch); +const bsv = require('bsv'); + +const brfc = (title, authors, version) => { + const autorString = authors.join(', ').trim(); + const stringToHash = [title.trim() + autorString + (version.toString() || '')].join('').trim(); + let hash = bsv.crypto.Hash.sha256sha256(Buffer.from(stringToHash)); + hash = hash.reverse(); + return hash.toString('hex').substring(0, 12); +}; + const CapabilityCodes = { pki: 'pki', paymentDestination: 'paymentDestination', - requestSenderValidation: brfc.brfc('bsvalias Payment Addressing (Payer Validation)', ['andy (nChain)'], ''), - verifyPublicKeyOwner: brfc.brfc('bsvalias public key verify (Verify Public Key Owner)', [], ''), - publicProfile: brfc.brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), - receiveTransaction: brfc.brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), - p2pPaymentDestination: brfc.brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), - witnessPublic: brfc.brfc('Public API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), - witnessCheckBaton: brfc.brfc('Check Baton API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), - witnessCheckToken: brfc.brfc('Check Token API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), - witnessCheckSale: brfc.brfc('Check Sale API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + requestSenderValidation: brfc('bsvalias Payment Addressing (Payer Validation)', ['andy (nChain)'], ''), + verifyPublicKeyOwner: brfc('bsvalias public key verify (Verify Public Key Owner)', [], ''), + publicProfile: brfc('Public Profile (Name & Avatar)', ['Ryan X. Charles (Money Button)'], '1'), + receiveTransaction: brfc('Send raw transaction', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), + p2pPaymentDestination: brfc('Get no monitored payment destination (p2p payment destination)', ['Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)'], '1.1'), + witnessPublic: brfc('Public API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + witnessCheckBaton: brfc('Check Baton API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + witnessCheckToken: brfc('Check Token API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + witnessCheckSale: brfc('Check Sale API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), //expect: 'c89beec44e80', - witnessCheckBuy: brfc.brfc('Check Buy API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), + witnessCheckBuy: brfc('Check Buy API of the Controllable UTXO Token Witness', ['LI Long (ChainBow)'], '1'), //expect: '598b080631c4', - tokenLogo: brfc.brfc('Logo URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1'), - tokenInformation: brfc.brfc('Infomation URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1') + tokenLogo: brfc('Logo URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1'), + tokenInformation: brfc('Infomation URI of the Controllable UTXO Token', ['LI Long (ChainBow)'], '1') }; class DnsOverHttps { @@ -195,15 +199,10 @@ class Http { } async _basicRequest(url, options = {}) { - const controller = new AbortController__default['default'](); - const timer = setTimeout(() => controller.abort(), 30000); - return this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { - credentials: 'omit', - signal: controller.signal - })).then(result => { - clearTimeout(timer); - return result; - }); + const timeout = 5000; + return Promise.race([this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { + credentials: 'omit' + })), new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout))]); } } @@ -416,7 +415,7 @@ class RequestBodyFactory { class Clock { now() { - return moment__default['default'](); + return new Date(); } } diff --git a/dist/paymail-client.cjs.js.map b/dist/paymail-client.cjs.js.map index 712f6e9..6cdfce2 100644 --- a/dist/paymail-client.cjs.js.map +++ b/dist/paymail-client.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.cjs.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n [ 'andy (nChain)' ],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n [ 'Ryan X. Charles (Money Button)' ],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckSale: brfc(\n 'Check Sale API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),//expect: 'c89beec44e80',\n witnessCheckBuy: brfc(\n 'Check Buy API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1',\n ),//expect: '598b080631c4',\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check sale contract.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckSale ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckSale ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n* witness check buy contract.\n*\n* @param {String} domain - a domain\n*/\n async witnessCheckBuy ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBuy ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return { uri }\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","witnessCheckSale","witnessCheckBuy","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.cjs.js","sources":["../src/brfc.js","../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["const bsv = require('bsv');\n\nconst brfc = (title, authors, version) => {\n const autorString = authors.join(', ').trim();\n const stringToHash = [title.trim() + autorString + (version.toString() || '')].join('').trim();\n let hash = bsv.crypto.Hash.sha256sha256(Buffer.from(stringToHash));\n hash = hash.reverse();\n return hash.toString('hex').substring(0, 12);\n};\n\nexport { brfc }\n","import { brfc } from './brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n [ 'andy (nChain)' ],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n [ 'Ryan X. Charles (Money Button)' ],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckSale: brfc(\n 'Check Sale API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),//expect: 'c89beec44e80',\n witnessCheckBuy: brfc(\n 'Check Buy API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1',\n ),//expect: '598b080631c4',\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class Http {\n constructor ( fetch ) {\n this.fetch = fetch\n }\n\n async get ( url ) {\n return this._basicRequest( url )\n }\n\n async postJson ( url, body ) {\n return this._basicRequest( url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify( body )\n } )\n }\n\n async _basicRequest ( url, options = {} ) {\n const timeout = 5000\n return Promise.race( [\n this.fetch( url, {\n ...options,\n credentials: 'omit',\n } ),\n new Promise( ( _, reject ) =>\n setTimeout( () => reject( new Error( 'timeout' ) ), timeout )\n )\n ] );\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","\nclass Clock {\n now () {\n return new Date()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check sale contract.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckSale ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckSale ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n* witness check buy contract.\n*\n* @param {String} domain - a domain\n*/\n async witnessCheckBuy ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBuy ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return { uri }\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["bsv","require","brfc","title","authors","version","autorString","join","trim","stringToHash","toString","hash","crypto","Hash","sha256sha256","Buffer","from","reverse","substring","CapabilityCodes","pki","paymentDestination","requestSenderValidation","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","witnessCheckSale","witnessCheckBuy","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","timeout","race","credentials","_","setTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","Message","concatenated","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","Date","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/dist/paymail-client.esm.js b/dist/paymail-client.esm.js index fae69f5..2fd0714 100644 --- a/dist/paymail-client.esm.js +++ b/dist/paymail-client.esm.js @@ -1,11 +1,17 @@ -import { brfc } from '@moneybutton/brfc'; import Promise$1 from 'bluebird'; import _defineProperty from '@babel/runtime/helpers/defineProperty'; -import 'abort-controller/polyfill'; -import AbortController from 'abort-controller'; -import moment from 'moment'; import fetch from 'cross-fetch'; +const bsv = require('bsv'); + +const brfc = (title, authors, version) => { + const autorString = authors.join(', ').trim(); + const stringToHash = [title.trim() + autorString + (version.toString() || '')].join('').trim(); + let hash = bsv.crypto.Hash.sha256sha256(Buffer.from(stringToHash)); + hash = hash.reverse(); + return hash.toString('hex').substring(0, 12); +}; + const CapabilityCodes = { pki: 'pki', paymentDestination: 'paymentDestination', @@ -183,15 +189,10 @@ class Http { } async _basicRequest(url, options = {}) { - const controller = new AbortController(); - const timer = setTimeout(() => controller.abort(), 30000); - return this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { - credentials: 'omit', - signal: controller.signal - })).then(result => { - clearTimeout(timer); - return result; - }); + const timeout = 5000; + return Promise.race([this.fetch(url, _objectSpread(_objectSpread({}, options), {}, { + credentials: 'omit' + })), new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout))]); } } @@ -404,7 +405,7 @@ class RequestBodyFactory { class Clock { now() { - return moment(); + return new Date(); } } diff --git a/dist/paymail-client.esm.js.map b/dist/paymail-client.esm.js.map index 9a4a874..ffeb952 100644 --- a/dist/paymail-client.esm.js.map +++ b/dist/paymail-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"paymail-client.esm.js","sources":["../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["import { brfc } from '@moneybutton/brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n [ 'andy (nChain)' ],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n [ 'Ryan X. Charles (Money Button)' ],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckSale: brfc(\n 'Check Sale API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),//expect: 'c89beec44e80',\n witnessCheckBuy: brfc(\n 'Check Buy API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1',\n ),//expect: '598b080631c4',\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","import 'abort-controller/polyfill'\nimport AbortController from 'abort-controller'\n\nclass Http {\n constructor (fetch) {\n this.fetch = fetch\n }\n\n async get (url) {\n return this._basicRequest(url)\n }\n\n async postJson (url, body) {\n return this._basicRequest(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(body)\n })\n }\n\n async _basicRequest (url, options = {}) {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 30000)\n return this.fetch(url, {\n ...options,\n credentials: 'omit',\n signal: controller.signal\n }).then(result => {\n clearTimeout(timer)\n return result\n })\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","import moment from 'moment'\n\nclass Clock {\n now () {\n return moment()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check sale contract.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckSale ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckSale ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n* witness check buy contract.\n*\n* @param {String} domain - a domain\n*/\n async witnessCheckBuy ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBuy ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return { uri }\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["CapabilityCodes","pki","paymentDestination","requestSenderValidation","brfc","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","witnessCheckSale","witnessCheckBuy","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","controller","AbortController","timer","setTimeout","abort","credentials","signal","clearTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","toString","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","bsv","require","Message","concatenated","Buffer","from","join","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","moment","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"paymail-client.esm.js","sources":["../src/brfc.js","../src/constants.js","../src/dns-over-https.js","../src/dns-client.js","../src/http.js","../src/EndpointResolver.js","../src/VerifiableMessage.js","../src/RequestBodyFactory.js","../src/Clock.js","../src/errors/PaymailNotFound.js","../src/BrowserDns.js","../src/PaymailClient.js"],"sourcesContent":["const bsv = require('bsv');\n\nconst brfc = (title, authors, version) => {\n const autorString = authors.join(', ').trim();\n const stringToHash = [title.trim() + autorString + (version.toString() || '')].join('').trim();\n let hash = bsv.crypto.Hash.sha256sha256(Buffer.from(stringToHash));\n hash = hash.reverse();\n return hash.toString('hex').substring(0, 12);\n};\n\nexport { brfc }\n","import { brfc } from './brfc'\n\nexport const CapabilityCodes = {\n pki: 'pki',\n paymentDestination: 'paymentDestination',\n requestSenderValidation: brfc(\n 'bsvalias Payment Addressing (Payer Validation)',\n [ 'andy (nChain)' ],\n ''\n ),\n verifyPublicKeyOwner: brfc(\n 'bsvalias public key verify (Verify Public Key Owner)',\n [],\n ''\n ),\n publicProfile: brfc(\n 'Public Profile (Name & Avatar)',\n [ 'Ryan X. Charles (Money Button)' ],\n '1'\n ),\n receiveTransaction: brfc(\n 'Send raw transaction',\n [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ],\n '1.1'\n ),\n p2pPaymentDestination: brfc(\n 'Get no monitored payment destination (p2p payment destination)',\n [ 'Miguel Duarte (Money Button)', 'Ryan X. Charles (Money Button)', 'Ivan Mlinaric (Handcash)', 'Rafa (Handcash)' ],\n '1.1'\n ),\n witnessPublic: brfc(\n 'Public API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckBaton: brfc(\n 'Check Baton API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckToken: brfc(\n 'Check Token API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n witnessCheckSale: brfc(\n 'Check Sale API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),//expect: 'c89beec44e80',\n witnessCheckBuy: brfc(\n 'Check Buy API of the Controllable UTXO Token Witness',\n [ 'LI Long (ChainBow)' ],\n '1',\n ),//expect: '598b080631c4',\n tokenLogo: brfc(\n 'Logo URI of the Controllable UTXO Token',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n tokenInformation: brfc(\n 'Infomation URI of the Controllable UTXO Token',\n [ 'LI Long (ChainBow)' ],\n '1'\n ),\n}\n","class DnsOverHttps {\n constructor (fetch, config) {\n this.fetch = fetch\n this.config = config\n }\n\n async resolveSrv (aDomain) {\n const response = await this.fetch(`${this.config.baseUrl}?name=${aDomain}&type=SRV&cd=0`)\n const body = await response.json()\n return body\n }\n\n async queryBsvaliasDomain (aDomain) {\n return this.resolveSrv(`_bsvalias._tcp.${aDomain}`)\n }\n}\n\nexport { DnsOverHttps }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\nclass DnsClient {\n constructor (dns, fetch) {\n this.dns = dns\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async checkSrv (aDomain) {\n return new Promise((resolve, reject) => {\n this.dns.resolveSrv(`_bsvalias._tcp.${aDomain}`, async (err, result) => {\n try {\n if (err && (err.code === 'ENODATA' || err.code === 'ENOTFOUND')) {\n return resolve({\n domain: aDomain,\n port: 443,\n isSecure: true\n })\n }\n if (err) {\n return reject(err)\n }\n\n const { name: domainFromDns, port, isSecure } = result[0]\n resolve({\n domain: domainFromDns,\n port,\n isSecure: this.checkDomainIsSecure(domainFromDns, aDomain) || isSecure\n })\n } catch (err) {\n return reject(err)\n }\n })\n }).then(result => {\n if (result.isSecure) {\n return result\n } else {\n return this.validateDnssec(aDomain)\n }\n }, (err) => {\n console.error(err)\n return err\n })\n }\n\n checkDomainIsSecure (srvResponseDomain, originalDomain) {\n if (this.domainsAreEqual(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.responseIsWwwSubdomain(srvResponseDomain, originalDomain)) {\n return true\n } else if (this.isHandcashDomain(originalDomain)) { // tell rafa to fix handcash and we can remove the special case :)\n return this.domainsAreEqual('handcash-paymail-production.herokuapp.com', srvResponseDomain) || this.domainsAreEqual('handcash-cloud-production.herokuapp.com', srvResponseDomain)\n } else if (this.isHandcashInternalDomain(originalDomain)) {\n return this.domainsAreEqual('handcash-cloud-staging.herokuapp.com', srvResponseDomain)\n } else if (this.domainsAreEqual('localhost', srvResponseDomain)) {\n return true\n } else if (this.isMoneyButtonDomain(srvResponseDomain)) {\n return true\n } else {\n return false\n }\n }\n\n isMoneyButtonDomain (aDomain) {\n return this.domainsAreEqual(aDomain, 'moneybutton.com') || this.domainsAreEqual(aDomain, 'www.moneybutton.com')\n }\n\n responseIsWwwSubdomain (srvResponseDomain, originalDomain) {\n return this.domainsAreEqual(srvResponseDomain, `www.${originalDomain}`)\n }\n\n isHandcashDomain (aDomain) {\n return this.domainsAreEqual('handcash.io', aDomain)\n }\n\n isHandcashInternalDomain (aDomain) {\n return this.domainsAreEqual('internal.handcash.io', aDomain)\n }\n\n async validateDnssec (aDomain) {\n const dnsResponse = await Promise.any([\n this.dohAli.queryBsvaliasDomain(aDomain),\n this.dohGoogle.queryBsvaliasDomain(aDomain)\n ]) \n if (dnsResponse.Status !== 0 || !dnsResponse.Answer) {\n throw new Error('Insecure domain.')\n }\n const data = dnsResponse.Answer[0].data.split(' ')\n const port = data[2]\n const responseDomain = data[3]\n if (!dnsResponse.AD && !this.domainsAreEqual(aDomain, responseDomain)) {\n throw new Error('Insecure domain.')\n }\n return {\n port,\n domain: responseDomain,\n isSecure: dnsResponse.AD\n }\n }\n\n domainsAreEqual (domain1, domain2) {\n return domain1.toLowerCase().replace(/\\.$/, '') === domain2.toLowerCase().replace(/\\.$/, '')\n }\n}\n\nexport { DnsClient }\n","class Http {\n constructor ( fetch ) {\n this.fetch = fetch\n }\n\n async get ( url ) {\n return this._basicRequest( url )\n }\n\n async postJson ( url, body ) {\n return this._basicRequest( url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify( body )\n } )\n }\n\n async _basicRequest ( url, options = {} ) {\n const timeout = 5000\n return Promise.race( [\n this.fetch( url, {\n ...options,\n credentials: 'omit',\n } ),\n new Promise( ( _, reject ) =>\n setTimeout( () => reject( new Error( 'timeout' ) ), timeout )\n )\n ] );\n }\n}\n\nexport { Http }\n","import { CapabilityCodes } from './constants'\nimport { DnsClient } from './dns-client'\nimport { Http } from './http'\n\nclass EndpointResolver {\n constructor (dns = null, fetch) {\n this.dnsClient = new DnsClient(dns, fetch)\n\n this.http = new Http(fetch)\n this._cache = {}\n }\n\n static create (dnsClient, fetch) {\n const instance = new EndpointResolver(null, fetch)\n instance.dnsClient = dnsClient\n return instance\n }\n\n async getIdentityUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.pki)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const identityUrl = apiDescriptor.capabilities.pki\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return identityUrl\n }\n\n async getAddressUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.paymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const addressUrl = apiDescriptor.capabilities.paymentDestination\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return addressUrl\n }\n\n async getVerifyUrlFor (aPaymail, aPubkey) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.verifyPublicKeyOwner)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.verifyPublicKeyOwner]\n .replace('{alias}', alias).replace('{domain.tld}', domain).replace('{pubkey}', aPubkey)\n return url\n }\n\n async getPublicProfileUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.publicProfile)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.publicProfile]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getSendTxUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.receiveTransaction)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.receiveTransaction]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async getP2pPatmentDestinationUrlFor (aPaymail) {\n const [alias, domain] = aPaymail.split('@')\n await this.ensureCapabilityFor(domain, CapabilityCodes.p2pPaymentDestination)\n const apiDescriptor = await this.getApiDescriptionFor(domain)\n const url = apiDescriptor.capabilities[CapabilityCodes.p2pPaymentDestination]\n .replace('{alias}', alias).replace('{domain.tld}', domain)\n return url\n }\n\n async domainHasCapability (aDomain, capability) {\n const apiDescriptor = await this.getApiDescriptionFor(aDomain)\n return !!apiDescriptor.capabilities[capability]\n }\n\n async getApiDescriptionFor (aDomain) {\n if (this._cache[aDomain]) {\n return this._cache[aDomain]\n }\n const { domain, port } = await this.getWellKnownBaseUrl(aDomain)\n const apiDescriptor = await this.fetchApiDescriptor(domain, port)\n this._cache[aDomain] = apiDescriptor\n return apiDescriptor\n }\n\n async fetchApiDescriptor (domain, port) {\n const protocol = (domain === 'localhost' || domain === 'localhost.') ? 'http' : 'https'\n const requestPort = (port === undefined || port.toString() === '443') ? '' : `:${port}`\n const requestDomain = /^(.*?)\\.?$/.exec(domain)[1] // Get value from capture group\n if (!requestDomain) {\n throw new Error(`Invalid domain: ${domain}`)\n }\n const wellKnown = await this.http.get(`${protocol}://${requestDomain}${requestPort}/.well-known/bsvalias`)\n const apiDescriptor = await wellKnown.json()\n return apiDescriptor\n }\n\n async getWellKnownBaseUrl (aDomain) {\n return this.dnsClient.checkSrv(aDomain)\n }\n\n async ensureCapabilityFor (aDomain, aCapability) {\n if (!await this.domainHasCapability(aDomain, aCapability)) {\n throw new Error(`Unknown capability \"${aCapability}\" for \"${aDomain}\"`)\n }\n }\n}\n\nexport { EndpointResolver }\n","class VerifiableMessage {\n constructor (parts, bsv = null) {\n if (bsv === null) {\n bsv = require('bsv')\n bsv.Message = require('bsv/message')\n }\n this.bsv = bsv\n const concatenated = Buffer.from(parts.join(''))\n this.message = new this.bsv.Message(concatenated)\n }\n\n static forBasicAddressResolution ({\n senderHandle,\n amount,\n dt,\n purpose\n }) {\n if (dt && dt.toISOString) {\n dt = dt.toISOString()\n }\n\n return new VerifiableMessage([\n senderHandle,\n amount || '0',\n dt,\n purpose\n ])\n }\n\n sign (wifPrivateKey) {\n return this.message.sign(this.bsv.PrivateKey.fromWIF(wifPrivateKey))\n }\n\n verify (keyAddress, signature) {\n return this.message.verify(keyAddress, signature)\n }\n}\n\nexport { VerifiableMessage }\n","import { VerifiableMessage } from './VerifiableMessage'\n\nclass RequestBodyFactory {\n constructor (clock) {\n this.clock = clock\n }\n\n buildBodyToRequestAddress (senderInfo, privateKey = null) {\n const {\n senderHandle,\n amount,\n senderName,\n purpose,\n pubkey,\n signature: providedSignature\n } = senderInfo\n\n if (!providedSignature && privateKey === null) {\n throw new Error('Missing private key or signature')\n }\n\n let dt, signature\n if (providedSignature) {\n if (!senderInfo.dt) {\n throw new Error('missing datetime for given signature')\n }\n dt = senderInfo.dt\n signature = providedSignature\n } else {\n dt = this.clock.now()\n signature = VerifiableMessage.forBasicAddressResolution({\n senderHandle,\n amount,\n dt,\n purpose\n }).sign(privateKey)\n }\n\n return {\n senderHandle,\n senderName,\n purpose,\n dt,\n amount: amount || null,\n pubkey,\n signature\n }\n }\n\n buildBodySendTx (hexTransaction, reference, metadata) {\n return { hex: hexTransaction, metadata, reference }\n }\n\n buildBodyP2pPaymentDestination (satoshis) {\n return { satoshis }\n }\n}\n\nexport { RequestBodyFactory }\n","\nclass Clock {\n now () {\n return new Date()\n }\n}\n\nexport { Clock }\n","class PaymailNotFound extends Error {\n constructor (message, paymail) {\n super(message)\n this.paymail = paymail\n }\n}\n\nexport { PaymailNotFound }\n","import { DnsOverHttps } from './dns-over-https'\nimport Promise from 'bluebird';\n\nclass BrowserDns {\n constructor (fetch) {\n this.dohAli = new DnsOverHttps(fetch, { baseUrl: 'https://dns.alidns.com/resolve' })\n this.dohGoogle = new DnsOverHttps(fetch, { baseUrl: 'https://dns.google.com/resolve' })\n }\n\n async resolveSrv (aDomain, aCallback) {\n try {\n const response = await Promise.any([\n this.dohAli.resolveSrv(aDomain),\n this.dohGoogle.resolveSrv(aDomain)\n ])\n\n if (response.Status === 0 && response.Answer) {\n const data = response.Answer.map(record => {\n const [priority, weight, port, name] = record.data.split(' ')\n return {\n priority,\n weight,\n port,\n name,\n isSecure: response.AD\n }\n })\n aCallback(null, data)\n } else if (!response.Answer) {\n // ignore check response.Status === 0\n aCallback({ code: 'ENODATA' })\n } else {\n aCallback(new Error('error during dns query'))\n }\n } catch (e) {\n aCallback(e)\n }\n }\n}\n\nexport { BrowserDns }\n","import { EndpointResolver } from './EndpointResolver'\nimport { RequestBodyFactory } from './RequestBodyFactory'\nimport { Clock } from './Clock'\nimport { PaymailNotFound } from './errors/PaymailNotFound'\nimport { CapabilityCodes } from './constants'\nimport fetch from 'cross-fetch'\nimport { BrowserDns } from './BrowserDns'\nimport { Http } from './http'\n\nclass PaymailClient {\n constructor ( dns = null, fetch2 = null, clock = null, bsv = null ) {\n if ( fetch2 === null ) {\n fetch2 = fetch\n }\n if ( dns === null ) {\n dns = new BrowserDns( fetch2 )\n }\n if ( bsv === null ) {\n bsv = require( 'bsv' )\n }\n this.bsv = bsv\n this.resolver = new EndpointResolver( dns, fetch2 )\n this.http = new Http( fetch2 )\n this.requestBodyFactory = new RequestBodyFactory( clock !== null ? clock : new Clock() )\n }\n\n /**\n * Get witness public.\n *\n * @param {String} domain - a domain\n */\n async witnessPublic ( domain ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessPublic ]\n const response = await this.http.get( url )\n return await response.json()\n }\n\n /**\n * witness check baton.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckBaton ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBaton ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check token.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckToken ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckToken ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * witness check sale contract.\n *\n * @param {String} domain - a domain\n */\n async witnessCheckSale ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckSale ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n* witness check buy contract.\n*\n* @param {String} domain - a domain\n*/\n async witnessCheckBuy ( domain, args ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n const url = apiDescriptor.capabilities[ CapabilityCodes.witnessCheckBuy ]\n const response = await this.http.get( `${url}?${new URLSearchParams( args )}` )\n return await response.json()\n }\n\n /**\n * Get token's logo uri.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n * return uri string\n */\n async tokenLogo ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenLogo ]\n uri = uri.replace( '{contractId}', contractId )\n return { uri }\n }\n\n /**\n * Get token's info json.\n *\n * @param {String} domain - a domain\n * @param {String} contractId - contractId of Token\n */\n async tokenInformation ( domain, contractId ) {\n const apiDescriptor = await this.resolver.getApiDescriptionFor( domain )\n let uri = apiDescriptor.capabilities[ CapabilityCodes.tokenInformation ]\n uri = uri.replace( '{contractId}', contractId )\n const response = await this.http.get( uri )\n return await response.json()\n }\n\n /**\n * Uses pki flow to query for an identity key for a given paymail address.\n *\n * @param {String} paymail - a paymail address\n */\n async getPublicKey ( paymail ) {\n const identityUrl = await this.resolver.getIdentityUrlFor( paymail )\n const response = await this.http.get( identityUrl )\n const { pubkey } = await response.json()\n return pubkey\n }\n\n /**\n * Uses `Basic Address Resolution` flow to query for a payment for output for the\n * given paymail address.\n *\n * @param {String} aPaymail - a paymail address\n * @param {Object} senderInfo - Object containing sender info\n * @param {String} senderInfo.senderHandle - Sender paymail address\n * @param {String} senderInfo.amount - Optional. Required amount.\n * @param {String} senderInfo.senderName - Optional. Sender name.\n * @param {String} senderInfo.purpose - Optional. Purpose of the payment.\n * @param {String} senderInfo.pubkey - Optional. Public key used to sign the message.\n * @param {String} senderInfo.signature - Optional. Valid signature according to paymail specification.\n * @param {String} privateKey - Optional. private key to sign the request.\n */\n async getOutputFor ( aPaymail, senderInfo, privateKey = null ) {\n const addressUrl = await this.resolver.getAddressUrlFor( aPaymail )\n const response = await this.http.postJson(\n addressUrl,\n this.requestBodyFactory.buildBodyToRequestAddress( senderInfo, privateKey )\n )\n if ( !response.ok ) {\n throw new PaymailNotFound( `Paymail not found: ${aPaymail}`, aPaymail )\n }\n const { output } = await response.json()\n return output\n }\n\n /**\n * Verify if the given public address belongs to the given\n * paymail address.\n *\n * @param {String} pubkey - Public key to check.\n * @param {String} paymail - a paymail address\n */\n async verifyPubkeyOwner ( pubkey, paymail ) {\n const url = await this.resolver.getVerifyUrlFor( paymail, pubkey )\n const response = await this.http.get( url )\n const body = await response.json()\n const { match } = body\n return match\n }\n\n /**\n * Verifies if a given signature is valid for a given message. It uses\n * different strategies depending on the capabilities of the server\n * and the parameters Given. The priority order is.\n * - If paymail is not provided, then normal signature verification is performed.\n * - Use provided key (and check that belongs to given paymail address).\n * - Get a new pubkey for given paymail address using pki.\n * - If there is no way to intereact with the owner of the domain to verify the public key it returns false.\n *\n * @param {Message} message - Message to verify\n * @param {String} signature - Signature\n * @param {String} paymail - Signature owner paymail\n * @param {String} pubkey - Optional. Public key that validates the signature.\n */\n async isValidSignature ( message, signature, paymail = null, pubkey = null ) {\n if ( paymail == null && pubkey === null ) {\n throw new Error( 'Must specify either paymail or pubkey' )\n }\n let senderPublicKey\n if ( paymail ) {\n if ( pubkey && await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.verifyPublicKeyOwner ) ) {\n if ( await this.verifyPubkeyOwner( pubkey, paymail ) ) {\n senderPublicKey = this.bsv.PublicKey.fromString( pubkey )\n } else {\n return false\n }\n } else {\n const hasPki = await this.resolver.domainHasCapability( paymail.split( '@' )[ 1 ], CapabilityCodes.pki )\n if ( hasPki ) {\n const identityKey = await this.getPublicKey( paymail )\n senderPublicKey = this.bsv.PublicKey.fromString( identityKey )\n } else {\n return false\n }\n }\n }\n\n const senderKeyAddress = this.bsv.Address.fromPublicKey( senderPublicKey || pubkey )\n try {\n const verified = message.verify( senderKeyAddress.toString(), signature )\n return verified\n } catch ( err ) {\n return false\n }\n }\n\n /**\n * Gets the public profile information using the \"Public Profile\" protocol.\n *\n * @param {String} paymail - a paymail address\n * @param {String} s - the preferred size of the image\n */\n async getPublicProfile ( paymail ) {\n const publicProfileUrl = await this.resolver.getPublicProfileUrlFor( paymail )\n const response = await this.http.get( publicProfileUrl )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n const { avatar, name } = await response.json()\n return { avatar, name }\n }\n\n async sendRawTx ( targetPaymail, hexTransaction, reference, metadata = {} ) {\n if ( !hexTransaction ) {\n throw new Error( 'transaction hex cannot be empty' )\n }\n const receiveTxUrl = await this.resolver.getSendTxUrlFor( targetPaymail )\n const response = await this.http.postJson(\n receiveTxUrl,\n this.requestBodyFactory.buildBodySendTx( hexTransaction, reference, metadata )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n return response.json()\n }\n\n async getP2pPaymentDestination ( targetPaymail, satoshis ) {\n if ( !satoshis ) {\n throw new Error( 'Amount in satohis needs to be specified' )\n }\n const paymentDestinationUrl = await this.resolver.getP2pPatmentDestinationUrlFor( targetPaymail )\n const response = await this.http.postJson(\n paymentDestinationUrl,\n this.requestBodyFactory.buildBodyP2pPaymentDestination( satoshis )\n )\n if ( !response.ok ) {\n const body = await response.json()\n throw new Error( `Server failed with: ${JSON.stringify( body )}` )\n }\n\n const body = await response.json()\n if ( !body.outputs ) {\n throw new Error( 'Server answered with a wrong format. Missing outputs' )\n }\n\n return body\n }\n}\n\nexport { PaymailClient }\n"],"names":["bsv","require","brfc","title","authors","version","autorString","join","trim","stringToHash","toString","hash","crypto","Hash","sha256sha256","Buffer","from","reverse","substring","CapabilityCodes","pki","paymentDestination","requestSenderValidation","verifyPublicKeyOwner","publicProfile","receiveTransaction","p2pPaymentDestination","witnessPublic","witnessCheckBaton","witnessCheckToken","witnessCheckSale","witnessCheckBuy","tokenLogo","tokenInformation","DnsOverHttps","constructor","fetch","config","resolveSrv","aDomain","response","baseUrl","body","json","queryBsvaliasDomain","DnsClient","dns","dohAli","dohGoogle","checkSrv","Promise","resolve","reject","err","result","code","domain","port","isSecure","name","domainFromDns","checkDomainIsSecure","then","validateDnssec","console","error","srvResponseDomain","originalDomain","domainsAreEqual","responseIsWwwSubdomain","isHandcashDomain","isHandcashInternalDomain","isMoneyButtonDomain","dnsResponse","any","Status","Answer","Error","data","split","responseDomain","AD","domain1","domain2","toLowerCase","replace","Http","get","url","_basicRequest","postJson","method","headers","JSON","stringify","options","timeout","race","credentials","_","setTimeout","EndpointResolver","dnsClient","http","_cache","create","instance","getIdentityUrlFor","aPaymail","alias","ensureCapabilityFor","apiDescriptor","getApiDescriptionFor","identityUrl","capabilities","getAddressUrlFor","addressUrl","getVerifyUrlFor","aPubkey","getPublicProfileUrlFor","getSendTxUrlFor","getP2pPatmentDestinationUrlFor","domainHasCapability","capability","getWellKnownBaseUrl","fetchApiDescriptor","protocol","requestPort","undefined","requestDomain","exec","wellKnown","aCapability","VerifiableMessage","parts","Message","concatenated","message","forBasicAddressResolution","senderHandle","amount","dt","purpose","toISOString","sign","wifPrivateKey","PrivateKey","fromWIF","verify","keyAddress","signature","RequestBodyFactory","clock","buildBodyToRequestAddress","senderInfo","privateKey","senderName","pubkey","providedSignature","now","buildBodySendTx","hexTransaction","reference","metadata","hex","buildBodyP2pPaymentDestination","satoshis","Clock","Date","PaymailNotFound","paymail","BrowserDns","aCallback","map","record","priority","weight","e","PaymailClient","fetch2","resolver","requestBodyFactory","args","URLSearchParams","contractId","uri","getPublicKey","getOutputFor","ok","output","verifyPubkeyOwner","match","isValidSignature","senderPublicKey","PublicKey","fromString","hasPki","identityKey","senderKeyAddress","Address","fromPublicKey","verified","getPublicProfile","publicProfileUrl","avatar","sendRawTx","targetPaymail","receiveTxUrl","getP2pPaymentDestination","paymentDestinationUrl","outputs"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index cdf3411..be9c80c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,12 +10,9 @@ "license": "Open-BSV", "dependencies": { "@babel/runtime": "7.15.4", - "@moneybutton/brfc": "github:chainbow/brfc", - "abort-controller": "3.0.0", "bluebird": "^3.7.2", "bsv": "^1.5.5", - "cross-fetch": "^3.1.4", - "moment": "^2.24.0" + "cross-fetch": "^3.1.4" }, "devDependencies": { "@babel/cli": "7.15.7", @@ -1725,14 +1722,6 @@ "dev": true, "peer": true }, - "node_modules/@moneybutton/brfc": { - "version": "0.38.3", - "resolved": "git+ssh://git@github.com/chainbow/brfc.git#aba3a22013ebbe41be7ec27e8de34b7b6a948135", - "license": "Open-BSV", - "peerDependencies": { - "bsv": "^1.5.5" - } - }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", @@ -1874,17 +1863,6 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/abstract-leveldown": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", @@ -3804,14 +3782,6 @@ "node": ">=0.10.0" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -5395,14 +5365,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "engines": { - "node": "*" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -9132,11 +9094,6 @@ "dev": true, "peer": true }, - "@moneybutton/brfc": { - "version": "git+ssh://git@github.com/chainbow/brfc.git#aba3a22013ebbe41be7ec27e8de34b7b6a948135", - "from": "@moneybutton/brfc@github:chainbow/brfc", - "requires": {} - }, "@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", @@ -9259,14 +9216,6 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, "abstract-leveldown": { "version": "0.12.4", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", @@ -10792,11 +10741,6 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -12043,11 +11987,6 @@ "integrity": "sha1-b3GITK4m7twOnsuet6Xn91xrtCY=", "dev": true }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", diff --git a/package.json b/package.json index 96c086a..36cfeec 100644 --- a/package.json +++ b/package.json @@ -26,11 +26,8 @@ }, "dependencies": { "@babel/runtime": "7.15.4", - "@moneybutton/brfc": "github:chainbow/brfc", - "abort-controller": "3.0.0", "bluebird": "^3.7.2", "bsv": "^1.5.5", - "moment": "^2.24.0", "cross-fetch": "^3.1.4" }, "devDependencies": { diff --git a/src/Clock.js b/src/Clock.js index e23a098..c4292cf 100644 --- a/src/Clock.js +++ b/src/Clock.js @@ -1,8 +1,7 @@ -import moment from 'moment' class Clock { now () { - return moment() + return new Date() } } diff --git a/src/brfc.js b/src/brfc.js new file mode 100644 index 0000000..a07d734 --- /dev/null +++ b/src/brfc.js @@ -0,0 +1,11 @@ +const bsv = require('bsv'); + +const brfc = (title, authors, version) => { + const autorString = authors.join(', ').trim(); + const stringToHash = [title.trim() + autorString + (version.toString() || '')].join('').trim(); + let hash = bsv.crypto.Hash.sha256sha256(Buffer.from(stringToHash)); + hash = hash.reverse(); + return hash.toString('hex').substring(0, 12); +}; + +export { brfc } diff --git a/src/constants.js b/src/constants.js index 64c1cde..0e434d3 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,4 +1,4 @@ -import { brfc } from '@moneybutton/brfc' +import { brfc } from './brfc' export const CapabilityCodes = { pki: 'pki', diff --git a/src/http.js b/src/http.js index 0d5fd40..9a2fa0b 100644 --- a/src/http.js +++ b/src/http.js @@ -1,36 +1,33 @@ -import 'abort-controller/polyfill' -import AbortController from 'abort-controller' - class Http { - constructor (fetch) { + constructor ( fetch ) { this.fetch = fetch } - async get (url) { - return this._basicRequest(url) + async get ( url ) { + return this._basicRequest( url ) } - async postJson (url, body) { - return this._basicRequest(url, { + async postJson ( url, body ) { + return this._basicRequest( url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(body) - }) + body: JSON.stringify( body ) + } ) } - async _basicRequest (url, options = {}) { - const controller = new AbortController() - const timer = setTimeout(() => controller.abort(), 30000) - return this.fetch(url, { - ...options, - credentials: 'omit', - signal: controller.signal - }).then(result => { - clearTimeout(timer) - return result - }) + async _basicRequest ( url, options = {} ) { + const timeout = 5000 + return Promise.race( [ + this.fetch( url, { + ...options, + credentials: 'omit', + } ), + new Promise( ( _, reject ) => + setTimeout( () => reject( new Error( 'timeout' ) ), timeout ) + ) + ] ); } } diff --git a/test/paymail-client-real.js b/test/paymail-client-real.js new file mode 100644 index 0000000..6aa0197 --- /dev/null +++ b/test/paymail-client-real.js @@ -0,0 +1,26 @@ +/* global def, get */ +/* eslint no-unused-expressions: 0 */ +import { expect, assert } from 'chai' +import { PaymailClient } from '../src/PaymailClient' + +const get=[] +function def(name,fn) { + get[name] = fn() +} + +describe('Real PaymailClient', () => { + def('aPaymail', () => 'lilong@moneybutton.com') + def('aClient', () => new PaymailClient()) + + beforeEach(() => { + }) + + describe('#getPublicKey', async () => { + it('returns a public key', async () => { + const publicKey = await get.aClient.getPublicKey(get.aPaymail) + console.log(publicKey) + expect(publicKey).to.be.equal('some identity') + }).timeout(200000) + }) + +})