From 5075178e455d2a357c74c03571adad4ab19c6aca Mon Sep 17 00:00:00 2001 From: Christopher Rogers Date: Tue, 10 Apr 2018 23:57:08 -0700 Subject: [PATCH 1/3] Adds uuid module - Replaces util/uuid with qualified UUID v4 module - Updates Frame.id for compatibility Signed-off-by: Christopher Rogers --- lib/recurly.js | 3 ++- lib/recurly/bus.js | 4 ++-- lib/recurly/frame.js | 8 ++++---- lib/recurly/pricing/checkout/attachment.js | 2 +- lib/recurly/pricing/checkout/index.js | 2 +- lib/recurly/pricing/subscription/index.js | 2 +- lib/recurly/token.js | 2 +- lib/util/uuid.js | 11 ----------- package-lock.json | 11 +++++------ package.json | 3 ++- 10 files changed, 19 insertions(+), 29 deletions(-) delete mode 100644 lib/util/uuid.js diff --git a/lib/recurly.js b/lib/recurly.js index df10f815f..4e3ed137c 100644 --- a/lib/recurly.js +++ b/lib/recurly.js @@ -2,6 +2,7 @@ import clone from 'component-clone'; import Emitter from 'component-emitter'; +import uuid from 'uuid/v4'; import errors from './errors'; import version from './version'; import bankAccount from './recurly/bank-account'; @@ -22,8 +23,8 @@ import {HostedFields, FIELD_TYPES} from './recurly/hosted-fields'; import {Request} from './recurly/request'; import CheckoutPricing from './recurly/pricing/checkout'; import SubscriptionPricing from './recurly/pricing/subscription'; -import deepAssign from './util/deep-assign'; import uuid from './util/uuid'; +import deepAssign from './util/deep-assign'; // Ensure recurly.css is included in the build import recurlyCSS from './recurly.css'; diff --git a/lib/recurly/bus.js b/lib/recurly/bus.js index 180ee42cd..d59790519 100644 --- a/lib/recurly/bus.js +++ b/lib/recurly/bus.js @@ -1,6 +1,6 @@ import Emitter from 'component-emitter'; import {Message} from './message'; -import uuid from '../util/uuid'; +import uuid from 'uuid/v4'; /** * Hosted field generic message bus @@ -15,7 +15,7 @@ export class Bus extends Emitter { constructor (options = {}) { super(); this.id = uuid(); - this.debug = require('debug')(`recurly:bus:${this.id}`); + this.debug = require('debug')(`recurly:bus:${this.id.split('-')[0]}`); this.emitters = []; this.recipients = []; this.receive = this.receive.bind(this); diff --git a/lib/recurly/frame.js b/lib/recurly/frame.js index abdb5fa86..96488de15 100644 --- a/lib/recurly/frame.js +++ b/lib/recurly/frame.js @@ -1,6 +1,6 @@ import qs from 'qs'; import Emitter from 'component-emitter'; -import uuid from '../util/uuid'; +import uuid from 'uuid/v4'; import errors from '../errors'; const debug = require('debug')('recurly:frame'); @@ -24,9 +24,9 @@ export function factory (options) { class Frame extends Emitter { constructor (options) { super(); - this.id = uuid(); this.recurly = options.recurly; - this.name = `recurly-frame-${this.recurly.id}-${this.id}`; + this.id = `${this.recurly.id.split('-')[0]}-${uuid().split('-')[0]}`; + this.name = `recurly-frame-${this.id}`; this.width = options.width || DEFAULTS.width; this.height = options.height || DEFAULTS.height; this.prepare(options.path, options.payload); @@ -67,7 +67,7 @@ class Frame extends Emitter { let relay = document.createElement('iframe'); relay.width = relay.height = 0; relay.src = this.recurly.url('/relay'); - relay.name = `recurly-relay-${this.recurly.id}-${this.id}`; + relay.name = `recurly-relay-${this.id}`; relay.style.display = 'none'; relay.onload = () => this.create(); window.document.body.appendChild(relay); diff --git a/lib/recurly/pricing/checkout/attachment.js b/lib/recurly/pricing/checkout/attachment.js index 0901c6572..a27002ffb 100644 --- a/lib/recurly/pricing/checkout/attachment.js +++ b/lib/recurly/pricing/checkout/attachment.js @@ -1,11 +1,11 @@ import Emitter from 'component-emitter'; import find from 'component-find'; import Promise from 'promise'; +import uuid from 'uuid/v4'; import SubscriptionPricing from '../subscription'; import dom from '../../../util/dom'; import flatten from '../../../util/flatten'; import groupBy from '../../../util/group-by'; -import uuid from '../../../util/uuid'; import {ignoreNotFound} from '../subscription/attachment'; const debug = require('debug')('recurly:pricing:checkout:attachment'); diff --git a/lib/recurly/pricing/checkout/index.js b/lib/recurly/pricing/checkout/index.js index ad21471a2..03fab820b 100644 --- a/lib/recurly/pricing/checkout/index.js +++ b/lib/recurly/pricing/checkout/index.js @@ -4,8 +4,8 @@ import isEmpty from 'lodash.isempty'; import isFinite from 'lodash.isfinite'; import Promise from 'promise'; import uniq from 'array-unique'; +import uuid from 'uuid/v4'; import errors from '../../../errors'; -import uuid from '../../../util/uuid'; import {Pricing} from '../'; import PricingPromise from '../promise'; import SubscriptionPricing from '../subscription'; diff --git a/lib/recurly/pricing/subscription/index.js b/lib/recurly/pricing/subscription/index.js index 5c33583d2..9a5695513 100644 --- a/lib/recurly/pricing/subscription/index.js +++ b/lib/recurly/pricing/subscription/index.js @@ -1,9 +1,9 @@ +import uuid from 'uuid/v4'; import {Pricing, findByCode} from '../'; import PricingPromise from '../promise'; import Calculations from './calculations'; import Attachment from './attachment'; import errors from '../../../errors'; -import uuid from '../../../util/uuid'; const debug = require('debug')('recurly:pricing:subscription-pricing'); diff --git a/lib/recurly/token.js b/lib/recurly/token.js index 8f66469c8..baf274c25 100644 --- a/lib/recurly/token.js +++ b/lib/recurly/token.js @@ -1,6 +1,6 @@ import each from 'component-each'; import {normalize} from '../util/normalize'; -import uuid from '../util/uuid'; +import uuid from 'uuid/v4'; import errors from '../errors'; const debug = require('debug')('recurly:token'); diff --git a/lib/util/uuid.js b/lib/util/uuid.js deleted file mode 100644 index 6dcee2148..000000000 --- a/lib/util/uuid.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Generates a simple uuid - * - * NOT a standards-compliant UUID - * - * @param {Number} len - Length of uuid. Maxiumum is 12. - */ - -export default function uuid (len = 12) { - return Math.random().toString(36).substr(2, len); -} diff --git a/package-lock.json b/package-lock.json index 7d6ee9250..6086ae03f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9211,7 +9211,7 @@ "stringstream": "0.0.5", "tough-cookie": "2.3.3", "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "uuid": "3.2.1" } }, "semver": { @@ -11420,7 +11420,7 @@ "stringstream": "0.0.5", "tough-cookie": "2.3.3", "tunnel-agent": "0.4.3", - "uuid": "3.1.0" + "uuid": "3.2.1" }, "dependencies": { "qs": { @@ -13186,10 +13186,9 @@ "dev": true }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true + "version": "3.2.1", + "resolved": "http://npmrepo.log1.recurly.net/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" }, "validate-npm-package-license": { "version": "3.0.1", diff --git a/package.json b/package.json index 83a8d9562..b60e7a5ee 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,8 @@ "promise": "7.1.1", "qs": "^6.5.1", "tabbable": "^1.1.2", - "to-slug-case": "0.1.2" + "to-slug-case": "0.1.2", + "uuid": "^3.2.1" }, "engines": { "node": ">=0.11" From 84ac89ebbd31903c07de9426f4182f762f908af4 Mon Sep 17 00:00:00 2001 From: Christopher Rogers Date: Wed, 11 Apr 2018 00:15:25 -0700 Subject: [PATCH 2/3] Adds Recurly.deviceId and Recurly.sessionId - Recurly.deviceId scoped to localStorage - Recurly.sessionId scoped to sessionStorage Signed-off-by: Christopher Rogers --- lib/recurly.js | 10 +++++++++- lib/util/web-storage.js | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 lib/util/web-storage.js diff --git a/lib/recurly.js b/lib/recurly.js index 4e3ed137c..d99a00d69 100644 --- a/lib/recurly.js +++ b/lib/recurly.js @@ -21,9 +21,9 @@ import {Bus} from './recurly/bus'; import {Fraud} from './recurly/fraud'; import {HostedFields, FIELD_TYPES} from './recurly/hosted-fields'; import {Request} from './recurly/request'; +import {storage} from './util/web-storage'; import CheckoutPricing from './recurly/pricing/checkout'; import SubscriptionPricing from './recurly/pricing/subscription'; -import uuid from './util/uuid'; import deepAssign from './util/deep-assign'; // Ensure recurly.css is included in the build @@ -125,6 +125,14 @@ export class Recurly extends Emitter { return !!this.config.parent; } + get deviceId () { + return storage({ key: 'deviceId', otherwise: uuid() }); + } + + get sessionId () { + return storage({ scope: 'session', key: 'sessionId', otherwise: uuid() }); + } + /** * Assembles the API endpoint * diff --git a/lib/util/web-storage.js b/lib/util/web-storage.js new file mode 100644 index 000000000..6102f6388 --- /dev/null +++ b/lib/util/web-storage.js @@ -0,0 +1,23 @@ +const NAMESPACE = '__recurly__'; + +/** + * Fetches a value from web storage, optionally setting its value + * if it is not already set + * + * @param {String} options.scope 'session' or 'local' + * @param {String} options.key item key + * @param {DOMString} [options.otherwise] fallback + * @return {Mixed} item value + */ +export function storage ({ scope = 'local', key, otherwise }) { + const store = scope === 'session' ? global.sessionStorage : global.localStorage; + let qualifiedKey = `${NAMESPACE}.${key}`; + let value = store.getItem(qualifiedKey); + + if (value === null && !~[null, undefined].indexOf(otherwise)) { + value = otherwise; + store.setItem(qualifiedKey, value); + } + + return value; +} From 2ebe151863a191495272b07940e707f5c7b3bb35 Mon Sep 17 00:00:00 2001 From: Christopher Rogers Date: Wed, 11 Apr 2018 12:03:10 -0700 Subject: [PATCH 3/3] Adds storage, deviceId, and sessionId tests Signed-off-by: Christopher Rogers --- .npmrc | 1 + karma.conf.js | 9 +- lib/recurly/request.js | 12 +- lib/util/web-storage.js | 4 +- package-lock.json | 430 +++++++++++++++++----------------- test/bank-account.test.js | 2 +- test/recurly.test.js | 15 ++ test/request.test.js | 46 +++- test/support/helpers.js | 9 +- test/tax.test.js | 2 +- test/token.test.js | 2 +- test/util/web-storage.test.js | 45 ++++ 12 files changed, 348 insertions(+), 229 deletions(-) create mode 100644 .npmrc create mode 100644 test/util/web-storage.test.js diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..218528f42 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +registry = "https://registry.npmjs.org/" diff --git a/karma.conf.js b/karma.conf.js index 4b74b51d9..52389dd0d 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -11,8 +11,9 @@ var staticConfig = { colors: true, autoWatch: true, browsers: [ - 'PhantomJS' - // 'ChromeDebug' + // 'PhantomJS' + 'ChromeDebug' + // 'FirefoxDebug' // 'IE11 - Win7' ], singleRun: true, @@ -25,6 +26,10 @@ var staticConfig = { ChromeDebug: { base: 'Chrome', flags: ['--auto-open-devtools-for-tabs'] + }, + FirefoxDebug: { + base: 'Firefox', + flags: ['-devtools'] } }, client: { diff --git a/lib/recurly/request.js b/lib/recurly/request.js index a1af06c6c..487939c5a 100644 --- a/lib/recurly/request.js +++ b/lib/recurly/request.js @@ -47,6 +47,14 @@ export class Request { return this.recurly.isParent ? this.recurly.version : this.recurly.config.parentVersion; } + get deviceId () { + return this.recurly.deviceId; + } + + get sessionId () { + return this.recurly.sessionId; + } + get shouldUseXHR () { return !!this.recurly.config.cors; } @@ -76,10 +84,10 @@ export class Request { throw errors('not-configured'); } - const { version, key, timeout } = this; + const { version, key, deviceId, sessionId, timeout } = this; const url = this.recurly.url(route); - data = deepAssign({}, data, { version, key }); + data = deepAssign({}, data, { version, key, deviceId, sessionId }); if (this.shouldUseXHR) { return this.xhr({ method, url, data, done, timeout }); diff --git a/lib/util/web-storage.js b/lib/util/web-storage.js index 6102f6388..a0747f176 100644 --- a/lib/util/web-storage.js +++ b/lib/util/web-storage.js @@ -1,4 +1,4 @@ -const NAMESPACE = '__recurly__'; +export const NAMESPACE = '__recurly__'; /** * Fetches a value from web storage, optionally setting its value @@ -10,7 +10,7 @@ const NAMESPACE = '__recurly__'; * @return {Mixed} item value */ export function storage ({ scope = 'local', key, otherwise }) { - const store = scope === 'session' ? global.sessionStorage : global.localStorage; + const store = scope === 'session' ? window.sessionStorage : window.localStorage; let qualifiedKey = `${NAMESPACE}.${key}`; let value = store.getItem(qualifiedKey); diff --git a/package-lock.json b/package-lock.json index 6086ae03f..e6357f8fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -99,7 +99,7 @@ }, "amdefine": { "version": "1.0.1", - "resolved": "http://npmrepo.log1.recurly.net/amdefine/-/amdefine-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, @@ -214,7 +214,7 @@ }, "arr-union": { "version": "3.1.0", - "resolved": "http://npmrepo.log1.recurly.net/arr-union/-/arr-union-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, @@ -257,12 +257,12 @@ }, "array-unique": { "version": "0.3.2", - "resolved": "http://npmrepo.log1.recurly.net/array-unique/-/array-unique-0.3.2.tgz", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "arrify": { "version": "1.0.1", - "resolved": "http://npmrepo.log1.recurly.net/arrify/-/arrify-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, @@ -317,7 +317,7 @@ }, "assign-symbols": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/assign-symbols/-/assign-symbols-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, @@ -344,7 +344,7 @@ }, "atob": { "version": "2.1.0", - "resolved": "http://npmrepo.log1.recurly.net/atob/-/atob-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz", "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==", "dev": true }, @@ -823,7 +823,7 @@ }, "babel-generator": { "version": "6.26.1", - "resolved": "http://npmrepo.log1.recurly.net/babel-generator/-/babel-generator-6.26.1.tgz", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { @@ -839,7 +839,7 @@ "dependencies": { "jsesc": { "version": "1.3.0", - "resolved": "http://npmrepo.log1.recurly.net/jsesc/-/jsesc-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true } @@ -858,7 +858,7 @@ }, "babel-messages": { "version": "6.23.0", - "resolved": "http://npmrepo.log1.recurly.net/babel-messages/-/babel-messages-6.23.0.tgz", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { @@ -867,7 +867,7 @@ }, "babel-plugin-istanbul": { "version": "4.1.5", - "resolved": "http://npmrepo.log1.recurly.net/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz", "integrity": "sha1-Z2DN2Xf0EdPhdbsGTyvDJ9mbK24=", "dev": true, "requires": { @@ -1562,7 +1562,7 @@ }, "babel-runtime": { "version": "6.26.0", - "resolved": "http://npmrepo.log1.recurly.net/babel-runtime/-/babel-runtime-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { @@ -1572,7 +1572,7 @@ }, "babel-template": { "version": "6.26.0", - "resolved": "http://npmrepo.log1.recurly.net/babel-template/-/babel-template-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { @@ -1585,7 +1585,7 @@ }, "babel-traverse": { "version": "6.26.0", - "resolved": "http://npmrepo.log1.recurly.net/babel-traverse/-/babel-traverse-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { @@ -1602,7 +1602,7 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "http://npmrepo.log1.recurly.net/debug/-/debug-2.6.9.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { @@ -1613,7 +1613,7 @@ }, "babel-types": { "version": "6.26.0", - "resolved": "http://npmrepo.log1.recurly.net/babel-types/-/babel-types-6.26.0.tgz", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { @@ -1625,7 +1625,7 @@ }, "babylon": { "version": "6.18.0", - "resolved": "http://npmrepo.log1.recurly.net/babylon/-/babylon-6.18.0.tgz", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, @@ -1637,7 +1637,7 @@ }, "base": { "version": "0.11.2", - "resolved": "http://npmrepo.log1.recurly.net/base/-/base-0.11.2.tgz", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { @@ -1652,13 +1652,13 @@ "dependencies": { "component-emitter": { "version": "1.2.1", - "resolved": "http://npmrepo.log1.recurly.net/component-emitter/-/component-emitter-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, "define-property": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/define-property/-/define-property-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { @@ -1667,7 +1667,7 @@ }, "isobject": { "version": "3.0.1", - "resolved": "http://npmrepo.log1.recurly.net/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } @@ -1791,7 +1791,7 @@ }, "bowser": { "version": "1.9.2", - "resolved": "http://npmrepo.log1.recurly.net/bowser/-/bowser-1.9.2.tgz", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.2.tgz", "integrity": "sha512-fuiANC1Bqbqa/S4gmvfCt7bGBmNELMsGZj4Wg3PrP6esP66Ttoj1JSlzFlXtHyduMv07kDNmDsX6VsMWT/MLGg==", "dev": true }, @@ -1951,7 +1951,7 @@ }, "cache-base": { "version": "1.0.1", - "resolved": "http://npmrepo.log1.recurly.net/cache-base/-/cache-base-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { @@ -1968,13 +1968,13 @@ "dependencies": { "component-emitter": { "version": "1.2.1", - "resolved": "http://npmrepo.log1.recurly.net/component-emitter/-/component-emitter-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, "isobject": { "version": "3.0.1", - "resolved": "http://npmrepo.log1.recurly.net/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } @@ -2089,7 +2089,7 @@ }, "class-utils": { "version": "0.3.6", - "resolved": "http://npmrepo.log1.recurly.net/class-utils/-/class-utils-0.3.6.tgz", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { @@ -2101,7 +2101,7 @@ "dependencies": { "define-property": { "version": "0.2.5", - "resolved": "http://npmrepo.log1.recurly.net/define-property/-/define-property-0.2.5.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { @@ -2110,7 +2110,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", - "resolved": "http://npmrepo.log1.recurly.net/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { @@ -2119,7 +2119,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -2130,7 +2130,7 @@ }, "is-data-descriptor": { "version": "0.1.4", - "resolved": "http://npmrepo.log1.recurly.net/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { @@ -2139,7 +2139,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -2150,7 +2150,7 @@ }, "is-descriptor": { "version": "0.1.6", - "resolved": "http://npmrepo.log1.recurly.net/is-descriptor/-/is-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { @@ -2161,13 +2161,13 @@ }, "isobject": { "version": "3.0.1", - "resolved": "http://npmrepo.log1.recurly.net/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, "kind-of": { "version": "5.1.0", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-5.1.0.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } @@ -2207,7 +2207,7 @@ }, "collection-visit": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/collection-visit/-/collection-visit-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { @@ -2344,7 +2344,7 @@ "dependencies": { "component-props": { "version": "1.1.1", - "resolved": "http://npmrepo.log1.recurly.net/component-props/-/component-props-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/component-props/-/component-props-1.1.1.tgz", "integrity": "sha1-+bffm5kntubZfJvScqqGdnDzSUQ=" } } @@ -2466,13 +2466,13 @@ }, "copy-descriptor": { "version": "0.1.1", - "resolved": "http://npmrepo.log1.recurly.net/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, "core-js": { "version": "2.5.4", - "resolved": "http://npmrepo.log1.recurly.net/core-js/-/core-js-2.5.4.tgz", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.4.tgz", "integrity": "sha1-8si/GB8qgLkvNgEhQpzmOi8K6uA=", "dev": true }, @@ -2484,7 +2484,7 @@ }, "coveralls": { "version": "3.0.0", - "resolved": "http://npmrepo.log1.recurly.net/coveralls/-/coveralls-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.0.tgz", "integrity": "sha512-ZppXR9y5PraUOrf/DzHJY6gzNUhXYE3b9D43xEXs4QYZ7/Oe0Gy0CS+IPKWFfvQFXB3RG9QduaQUFehzSpGAFw==", "dev": true, "requires": { @@ -2497,7 +2497,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://npmrepo.log1.recurly.net/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -2737,7 +2737,7 @@ }, "dateformat": { "version": "1.0.12", - "resolved": "http://npmrepo.log1.recurly.net/dateformat/-/dateformat-1.0.12.tgz", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", "dev": true, "requires": { @@ -2747,7 +2747,7 @@ }, "debug": { "version": "3.1.0", - "resolved": "http://npmrepo.log1.recurly.net/debug/-/debug-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { "ms": "2.0.0" @@ -2761,7 +2761,7 @@ }, "decode-uri-component": { "version": "0.2.0", - "resolved": "http://npmrepo.log1.recurly.net/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, @@ -2780,7 +2780,7 @@ }, "deep-is": { "version": "0.1.3", - "resolved": "http://npmrepo.log1.recurly.net/deep-is/-/deep-is-0.1.3.tgz", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, @@ -2796,7 +2796,7 @@ }, "define-property": { "version": "2.0.2", - "resolved": "http://npmrepo.log1.recurly.net/define-property/-/define-property-2.0.2.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { @@ -2806,7 +2806,7 @@ "dependencies": { "isobject": { "version": "3.0.1", - "resolved": "http://npmrepo.log1.recurly.net/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } @@ -2877,7 +2877,7 @@ }, "detect-indent": { "version": "4.0.0", - "resolved": "http://npmrepo.log1.recurly.net/detect-indent/-/detect-indent-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { @@ -3128,7 +3128,7 @@ }, "escodegen": { "version": "1.8.1", - "resolved": "http://npmrepo.log1.recurly.net/escodegen/-/escodegen-1.8.1.tgz", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { @@ -3141,13 +3141,13 @@ "dependencies": { "estraverse": { "version": "1.9.3", - "resolved": "http://npmrepo.log1.recurly.net/estraverse/-/estraverse-1.9.3.tgz", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", "dev": true }, "source-map": { "version": "0.2.0", - "resolved": "http://npmrepo.log1.recurly.net/source-map/-/source-map-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", "dev": true, "optional": true, @@ -3352,7 +3352,7 @@ }, "extend-shallow": { "version": "3.0.2", - "resolved": "http://npmrepo.log1.recurly.net/extend-shallow/-/extend-shallow-3.0.2.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { @@ -3362,7 +3362,7 @@ "dependencies": { "is-extendable": { "version": "1.0.1", - "resolved": "http://npmrepo.log1.recurly.net/is-extendable/-/is-extendable-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { @@ -3412,7 +3412,7 @@ }, "fast-levenshtein": { "version": "2.0.6", - "resolved": "http://npmrepo.log1.recurly.net/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, @@ -3548,7 +3548,7 @@ }, "fragment-cache": { "version": "0.2.1", - "resolved": "http://npmrepo.log1.recurly.net/fragment-cache/-/fragment-cache-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { @@ -4346,7 +4346,7 @@ }, "get-value": { "version": "2.0.6", - "resolved": "http://npmrepo.log1.recurly.net/get-value/-/get-value-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, @@ -4478,7 +4478,7 @@ }, "globals": { "version": "9.18.0", - "resolved": "http://npmrepo.log1.recurly.net/globals/-/globals-9.18.0.tgz", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, @@ -4509,7 +4509,7 @@ }, "handlebars": { "version": "4.0.11", - "resolved": "http://npmrepo.log1.recurly.net/handlebars/-/handlebars-4.0.11.tgz", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "requires": { @@ -4521,13 +4521,13 @@ "dependencies": { "async": { "version": "1.5.2", - "resolved": "http://npmrepo.log1.recurly.net/async/-/async-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, "source-map": { "version": "0.4.4", - "resolved": "http://npmrepo.log1.recurly.net/source-map/-/source-map-0.4.4.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { @@ -4587,7 +4587,7 @@ }, "has-value": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/has-value/-/has-value-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { @@ -4598,7 +4598,7 @@ "dependencies": { "isobject": { "version": "3.0.1", - "resolved": "http://npmrepo.log1.recurly.net/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } @@ -4606,7 +4606,7 @@ }, "has-values": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/has-values/-/has-values-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { @@ -4616,7 +4616,7 @@ "dependencies": { "is-number": { "version": "3.0.0", - "resolved": "http://npmrepo.log1.recurly.net/is-number/-/is-number-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { @@ -4625,7 +4625,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -4636,7 +4636,7 @@ }, "kind-of": { "version": "4.0.0", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { @@ -4830,7 +4830,7 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "http://npmrepo.log1.recurly.net/debug/-/debug-2.6.9.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { @@ -4916,7 +4916,7 @@ }, "iectrl": { "version": "0.1.2", - "resolved": "http://npmrepo.log1.recurly.net/iectrl/-/iectrl-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/iectrl/-/iectrl-0.1.2.tgz", "integrity": "sha1-GskwDeZErqpZ7swMsMa/YIESMyo=", "dev": true, "requires": { @@ -4929,13 +4929,13 @@ "dependencies": { "colors": { "version": "0.6.2", - "resolved": "http://npmrepo.log1.recurly.net/colors/-/colors-0.6.2.tgz", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", "dev": true }, "commander": { "version": "1.2.0", - "resolved": "http://npmrepo.log1.recurly.net/commander/-/commander-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/commander/-/commander-1.2.0.tgz", "integrity": "sha1-/VcTv6FTx9bMWZN4patMRcU1Ap4=", "dev": true, "requires": { @@ -4944,13 +4944,13 @@ }, "debug": { "version": "0.7.4", - "resolved": "http://npmrepo.log1.recurly.net/debug/-/debug-0.7.4.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", "dev": true }, "q": { "version": "0.9.7", - "resolved": "http://npmrepo.log1.recurly.net/q/-/q-0.9.7.tgz", + "resolved": "https://registry.npmjs.org/q/-/q-0.9.7.tgz", "integrity": "sha1-TeLmyzspCIyeTLwDv51C+5bOL3U=", "dev": true } @@ -4995,7 +4995,7 @@ }, "inflight": { "version": "1.0.6", - "resolved": "http://npmrepo.log1.recurly.net/inflight/-/inflight-1.0.6.tgz", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { @@ -5038,7 +5038,7 @@ }, "invariant": { "version": "2.2.4", - "resolved": "http://npmrepo.log1.recurly.net/invariant/-/invariant-2.2.4.tgz", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { @@ -5071,7 +5071,7 @@ }, "is-accessor-descriptor": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { @@ -5080,7 +5080,7 @@ "dependencies": { "kind-of": { "version": "6.0.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-6.0.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } @@ -5124,7 +5124,7 @@ }, "is-data-descriptor": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { @@ -5133,7 +5133,7 @@ "dependencies": { "kind-of": { "version": "6.0.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-6.0.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } @@ -5147,7 +5147,7 @@ }, "is-descriptor": { "version": "1.0.2", - "resolved": "http://npmrepo.log1.recurly.net/is-descriptor/-/is-descriptor-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { @@ -5158,7 +5158,7 @@ "dependencies": { "kind-of": { "version": "6.0.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-6.0.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } @@ -5241,7 +5241,7 @@ }, "is-odd": { "version": "2.0.0", - "resolved": "http://npmrepo.log1.recurly.net/is-odd/-/is-odd-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { @@ -5250,7 +5250,7 @@ "dependencies": { "is-number": { "version": "4.0.0", - "resolved": "http://npmrepo.log1.recurly.net/is-number/-/is-number-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", "dev": true } @@ -5288,7 +5288,7 @@ }, "is-plain-object": { "version": "2.0.4", - "resolved": "http://npmrepo.log1.recurly.net/is-plain-object/-/is-plain-object-2.0.4.tgz", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { @@ -5297,7 +5297,7 @@ "dependencies": { "isobject": { "version": "3.0.1", - "resolved": "http://npmrepo.log1.recurly.net/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } @@ -5365,7 +5365,7 @@ }, "is-windows": { "version": "1.0.2", - "resolved": "http://npmrepo.log1.recurly.net/is-windows/-/is-windows-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, @@ -5404,7 +5404,7 @@ }, "istanbul": { "version": "0.4.5", - "resolved": "http://npmrepo.log1.recurly.net/istanbul/-/istanbul-0.4.5.tgz", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { @@ -5426,19 +5426,19 @@ "dependencies": { "abbrev": { "version": "1.0.9", - "resolved": "http://npmrepo.log1.recurly.net/abbrev/-/abbrev-1.0.9.tgz", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", "dev": true }, "async": { "version": "1.5.2", - "resolved": "http://npmrepo.log1.recurly.net/async/-/async-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, "glob": { "version": "5.0.15", - "resolved": "http://npmrepo.log1.recurly.net/glob/-/glob-5.0.15.tgz", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { @@ -5451,7 +5451,7 @@ }, "nopt": { "version": "3.0.6", - "resolved": "http://npmrepo.log1.recurly.net/nopt/-/nopt-3.0.6.tgz", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { @@ -5460,7 +5460,7 @@ }, "supports-color": { "version": "3.2.3", - "resolved": "http://npmrepo.log1.recurly.net/supports-color/-/supports-color-3.2.3.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { @@ -5469,7 +5469,7 @@ }, "wordwrap": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/wordwrap/-/wordwrap-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true } @@ -5477,13 +5477,13 @@ }, "istanbul-lib-coverage": { "version": "1.2.0", - "resolved": "http://npmrepo.log1.recurly.net/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", "dev": true }, "istanbul-lib-instrument": { "version": "1.10.1", - "resolved": "http://npmrepo.log1.recurly.net/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", "dev": true, "requires": { @@ -5498,7 +5498,7 @@ "dependencies": { "semver": { "version": "5.5.0", - "resolved": "http://npmrepo.log1.recurly.net/semver/-/semver-5.5.0.tgz", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true } @@ -7105,7 +7105,7 @@ }, "karma-coverage": { "version": "1.1.1", - "resolved": "http://npmrepo.log1.recurly.net/karma-coverage/-/karma-coverage-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz", "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", "dev": true, "requires": { @@ -7118,7 +7118,7 @@ "dependencies": { "lodash": { "version": "3.10.1", - "resolved": "http://npmrepo.log1.recurly.net/lodash/-/lodash-3.10.1.tgz", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", "dev": true } @@ -7310,7 +7310,7 @@ }, "keypress": { "version": "0.1.0", - "resolved": "http://npmrepo.log1.recurly.net/keypress/-/keypress-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", "integrity": "sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=", "dev": true }, @@ -8101,13 +8101,13 @@ }, "lcov-parse": { "version": "0.0.10", - "resolved": "http://npmrepo.log1.recurly.net/lcov-parse/-/lcov-parse-0.0.10.tgz", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", "dev": true }, "levn": { "version": "0.3.0", - "resolved": "http://npmrepo.log1.recurly.net/levn/-/levn-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { @@ -8235,7 +8235,7 @@ }, "log-driver": { "version": "1.2.7", - "resolved": "http://npmrepo.log1.recurly.net/log-driver/-/log-driver-1.2.7.tgz", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true }, @@ -8305,7 +8305,7 @@ }, "loose-envify": { "version": "1.3.1", - "resolved": "http://npmrepo.log1.recurly.net/loose-envify/-/loose-envify-1.3.1.tgz", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { @@ -8357,7 +8357,7 @@ }, "map-cache": { "version": "0.2.2", - "resolved": "http://npmrepo.log1.recurly.net/map-cache/-/map-cache-0.2.2.tgz", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, @@ -8369,7 +8369,7 @@ }, "map-visit": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/map-visit/-/map-visit-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { @@ -8563,7 +8563,7 @@ "dependencies": { "array-unique": { "version": "0.2.1", - "resolved": "http://npmrepo.log1.recurly.net/array-unique/-/array-unique-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true } @@ -8638,7 +8638,7 @@ }, "mixin-deep": { "version": "1.3.1", - "resolved": "http://npmrepo.log1.recurly.net/mixin-deep/-/mixin-deep-1.3.1.tgz", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { @@ -8648,7 +8648,7 @@ "dependencies": { "is-extendable": { "version": "1.0.1", - "resolved": "http://npmrepo.log1.recurly.net/is-extendable/-/is-extendable-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { @@ -8936,7 +8936,7 @@ }, "moment": { "version": "2.0.0", - "resolved": "http://npmrepo.log1.recurly.net/moment/-/moment-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.0.0.tgz", "integrity": "sha1-K7xbRMMhg3aTq278rb1G7ZRiEf4=", "dev": true }, @@ -8970,7 +8970,7 @@ }, "nanomatch": { "version": "1.2.9", - "resolved": "http://npmrepo.log1.recurly.net/nanomatch/-/nanomatch-1.2.9.tgz", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { @@ -8990,19 +8990,19 @@ "dependencies": { "arr-diff": { "version": "4.0.0", - "resolved": "http://npmrepo.log1.recurly.net/arr-diff/-/arr-diff-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, "array-unique": { "version": "0.3.2", - "resolved": "http://npmrepo.log1.recurly.net/array-unique/-/array-unique-0.3.2.tgz", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, "kind-of": { "version": "6.0.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-6.0.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } @@ -9341,7 +9341,7 @@ }, "object-copy": { "version": "0.1.0", - "resolved": "http://npmrepo.log1.recurly.net/object-copy/-/object-copy-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { @@ -9352,7 +9352,7 @@ "dependencies": { "define-property": { "version": "0.2.5", - "resolved": "http://npmrepo.log1.recurly.net/define-property/-/define-property-0.2.5.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { @@ -9361,7 +9361,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", - "resolved": "http://npmrepo.log1.recurly.net/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { @@ -9370,7 +9370,7 @@ }, "is-data-descriptor": { "version": "0.1.4", - "resolved": "http://npmrepo.log1.recurly.net/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { @@ -9379,7 +9379,7 @@ }, "is-descriptor": { "version": "0.1.6", - "resolved": "http://npmrepo.log1.recurly.net/is-descriptor/-/is-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { @@ -9390,7 +9390,7 @@ "dependencies": { "kind-of": { "version": "5.1.0", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-5.1.0.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } @@ -9406,7 +9406,7 @@ }, "object-visit": { "version": "1.0.1", - "resolved": "http://npmrepo.log1.recurly.net/object-visit/-/object-visit-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { @@ -9415,7 +9415,7 @@ "dependencies": { "isobject": { "version": "3.0.1", - "resolved": "http://npmrepo.log1.recurly.net/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } @@ -9433,7 +9433,7 @@ }, "object.pick": { "version": "1.3.0", - "resolved": "http://npmrepo.log1.recurly.net/object.pick/-/object.pick-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { @@ -9442,7 +9442,7 @@ "dependencies": { "isobject": { "version": "3.0.1", - "resolved": "http://npmrepo.log1.recurly.net/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } @@ -9489,7 +9489,7 @@ }, "optimist": { "version": "0.6.1", - "resolved": "http://npmrepo.log1.recurly.net/optimist/-/optimist-0.6.1.tgz", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { @@ -9499,7 +9499,7 @@ }, "optionator": { "version": "0.8.2", - "resolved": "http://npmrepo.log1.recurly.net/optionator/-/optionator-0.8.2.tgz", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { @@ -9513,7 +9513,7 @@ "dependencies": { "wordwrap": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/wordwrap/-/wordwrap-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true } @@ -9657,7 +9657,7 @@ }, "pascalcase": { "version": "0.1.1", - "resolved": "http://npmrepo.log1.recurly.net/pascalcase/-/pascalcase-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, @@ -10415,7 +10415,7 @@ }, "debug": { "version": "2.6.9", - "resolved": "http://npmrepo.log1.recurly.net/debug/-/debug-2.6.9.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { @@ -10426,7 +10426,7 @@ }, "posix-character-classes": { "version": "0.1.1", - "resolved": "http://npmrepo.log1.recurly.net/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, @@ -10994,7 +10994,7 @@ }, "prelude-ls": { "version": "1.1.2", - "resolved": "http://npmrepo.log1.recurly.net/prelude-ls/-/prelude-ls-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, @@ -11086,7 +11086,7 @@ }, "qs": { "version": "6.5.1", - "resolved": "http://npmrepo.log1.recurly.net/qs/-/qs-6.5.1.tgz", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, "query-string": { @@ -11319,7 +11319,7 @@ }, "regenerator-runtime": { "version": "0.11.1", - "resolved": "http://npmrepo.log1.recurly.net/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, @@ -11334,7 +11334,7 @@ }, "regex-not": { "version": "1.0.2", - "resolved": "http://npmrepo.log1.recurly.net/regex-not/-/regex-not-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { @@ -11451,7 +11451,7 @@ }, "resolve": { "version": "1.1.7", - "resolved": "http://npmrepo.log1.recurly.net/resolve/-/resolve-1.1.7.tgz", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, @@ -11472,13 +11472,13 @@ }, "resolve-url": { "version": "0.2.1", - "resolved": "http://npmrepo.log1.recurly.net/resolve-url/-/resolve-url-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, "ret": { "version": "0.1.15", - "resolved": "http://npmrepo.log1.recurly.net/ret/-/ret-0.1.15.tgz", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, @@ -11518,7 +11518,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "http://npmrepo.log1.recurly.net/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -11667,7 +11667,7 @@ }, "set-value": { "version": "2.0.0", - "resolved": "http://npmrepo.log1.recurly.net/set-value/-/set-value-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { @@ -11679,7 +11679,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "http://npmrepo.log1.recurly.net/extend-shallow/-/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -11811,7 +11811,7 @@ }, "snapdragon": { "version": "0.8.2", - "resolved": "http://npmrepo.log1.recurly.net/snapdragon/-/snapdragon-0.8.2.tgz", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { @@ -11827,7 +11827,7 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "http://npmrepo.log1.recurly.net/debug/-/debug-2.6.9.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { @@ -11836,7 +11836,7 @@ }, "define-property": { "version": "0.2.5", - "resolved": "http://npmrepo.log1.recurly.net/define-property/-/define-property-0.2.5.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { @@ -11845,7 +11845,7 @@ }, "extend-shallow": { "version": "2.0.1", - "resolved": "http://npmrepo.log1.recurly.net/extend-shallow/-/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -11854,7 +11854,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", - "resolved": "http://npmrepo.log1.recurly.net/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { @@ -11863,7 +11863,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -11874,7 +11874,7 @@ }, "is-data-descriptor": { "version": "0.1.4", - "resolved": "http://npmrepo.log1.recurly.net/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { @@ -11883,7 +11883,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -11894,7 +11894,7 @@ }, "is-descriptor": { "version": "0.1.6", - "resolved": "http://npmrepo.log1.recurly.net/is-descriptor/-/is-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { @@ -11905,7 +11905,7 @@ }, "kind-of": { "version": "5.1.0", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-5.1.0.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } @@ -11913,7 +11913,7 @@ }, "snapdragon-node": { "version": "2.1.1", - "resolved": "http://npmrepo.log1.recurly.net/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { @@ -11924,7 +11924,7 @@ "dependencies": { "define-property": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/define-property/-/define-property-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { @@ -11933,7 +11933,7 @@ }, "isobject": { "version": "3.0.1", - "resolved": "http://npmrepo.log1.recurly.net/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } @@ -11941,7 +11941,7 @@ }, "snapdragon-util": { "version": "3.0.1", - "resolved": "http://npmrepo.log1.recurly.net/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { @@ -12032,7 +12032,7 @@ }, "source-map-resolve": { "version": "0.5.1", - "resolved": "http://npmrepo.log1.recurly.net/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", "dev": true, "requires": { @@ -12045,7 +12045,7 @@ }, "source-map-url": { "version": "0.4.0", - "resolved": "http://npmrepo.log1.recurly.net/source-map-url/-/source-map-url-0.4.0.tgz", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, @@ -12123,7 +12123,7 @@ }, "split-string": { "version": "3.1.0", - "resolved": "http://npmrepo.log1.recurly.net/split-string/-/split-string-3.1.0.tgz", + "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": { @@ -12162,7 +12162,7 @@ }, "static-extend": { "version": "0.1.2", - "resolved": "http://npmrepo.log1.recurly.net/static-extend/-/static-extend-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { @@ -12172,7 +12172,7 @@ "dependencies": { "define-property": { "version": "0.2.5", - "resolved": "http://npmrepo.log1.recurly.net/define-property/-/define-property-0.2.5.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { @@ -12181,7 +12181,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", - "resolved": "http://npmrepo.log1.recurly.net/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { @@ -12190,7 +12190,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -12201,7 +12201,7 @@ }, "is-data-descriptor": { "version": "0.1.4", - "resolved": "http://npmrepo.log1.recurly.net/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { @@ -12210,7 +12210,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -12221,7 +12221,7 @@ }, "is-descriptor": { "version": "0.1.6", - "resolved": "http://npmrepo.log1.recurly.net/is-descriptor/-/is-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { @@ -12232,7 +12232,7 @@ }, "kind-of": { "version": "5.1.0", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-5.1.0.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } @@ -12369,7 +12369,7 @@ }, "tabbable": { "version": "1.1.2", - "resolved": "http://npmrepo.log1.recurly.net/tabbable/-/tabbable-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-1.1.2.tgz", "integrity": "sha512-77oqsKEPrxIwgRcXUwipkj9W5ItO97L6eUT1Ar7vh+El16Zm4M6V+YU1cbipHEa6q0Yjw8O3Hoh8oRgatV5s7A==" }, "tapable": { @@ -12408,7 +12408,7 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "http://npmrepo.log1.recurly.net/debug/-/debug-2.6.9.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "optional": true, @@ -12432,7 +12432,7 @@ }, "test-exclude": { "version": "4.2.1", - "resolved": "http://npmrepo.log1.recurly.net/test-exclude/-/test-exclude-4.2.1.tgz", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.1.tgz", "integrity": "sha512-qpqlP/8Zl+sosLxBcVKl9vYy26T9NPalxSzzCP/OY6K7j938ui2oKgo+kRZYfxAeIpLqpbVnsHq1tyV70E4lWQ==", "dev": true, "requires": { @@ -12445,19 +12445,19 @@ "dependencies": { "arr-diff": { "version": "4.0.0", - "resolved": "http://npmrepo.log1.recurly.net/arr-diff/-/arr-diff-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, "array-unique": { "version": "0.3.2", - "resolved": "http://npmrepo.log1.recurly.net/array-unique/-/array-unique-0.3.2.tgz", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, "braces": { "version": "2.3.1", - "resolved": "http://npmrepo.log1.recurly.net/braces/-/braces-2.3.1.tgz", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", "dev": true, "requires": { @@ -12477,7 +12477,7 @@ "dependencies": { "define-property": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/define-property/-/define-property-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { @@ -12486,7 +12486,7 @@ }, "extend-shallow": { "version": "2.0.1", - "resolved": "http://npmrepo.log1.recurly.net/extend-shallow/-/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -12497,7 +12497,7 @@ }, "debug": { "version": "2.6.9", - "resolved": "http://npmrepo.log1.recurly.net/debug/-/debug-2.6.9.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { @@ -12506,7 +12506,7 @@ }, "expand-brackets": { "version": "2.1.4", - "resolved": "http://npmrepo.log1.recurly.net/expand-brackets/-/expand-brackets-2.1.4.tgz", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { @@ -12521,7 +12521,7 @@ "dependencies": { "define-property": { "version": "0.2.5", - "resolved": "http://npmrepo.log1.recurly.net/define-property/-/define-property-0.2.5.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { @@ -12530,7 +12530,7 @@ }, "extend-shallow": { "version": "2.0.1", - "resolved": "http://npmrepo.log1.recurly.net/extend-shallow/-/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -12539,7 +12539,7 @@ }, "is-descriptor": { "version": "0.1.6", - "resolved": "http://npmrepo.log1.recurly.net/is-descriptor/-/is-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { @@ -12550,7 +12550,7 @@ }, "kind-of": { "version": "5.1.0", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-5.1.0.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } @@ -12558,7 +12558,7 @@ }, "extglob": { "version": "2.0.4", - "resolved": "http://npmrepo.log1.recurly.net/extglob/-/extglob-2.0.4.tgz", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { @@ -12574,7 +12574,7 @@ "dependencies": { "define-property": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/define-property/-/define-property-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { @@ -12583,7 +12583,7 @@ }, "extend-shallow": { "version": "2.0.1", - "resolved": "http://npmrepo.log1.recurly.net/extend-shallow/-/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -12594,7 +12594,7 @@ }, "fill-range": { "version": "4.0.0", - "resolved": "http://npmrepo.log1.recurly.net/fill-range/-/fill-range-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { @@ -12606,7 +12606,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "http://npmrepo.log1.recurly.net/extend-shallow/-/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -12617,7 +12617,7 @@ }, "find-up": { "version": "1.1.2", - "resolved": "http://npmrepo.log1.recurly.net/find-up/-/find-up-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { @@ -12627,7 +12627,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", - "resolved": "http://npmrepo.log1.recurly.net/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { @@ -12636,7 +12636,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -12647,7 +12647,7 @@ }, "is-data-descriptor": { "version": "0.1.4", - "resolved": "http://npmrepo.log1.recurly.net/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { @@ -12656,7 +12656,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -12667,7 +12667,7 @@ }, "is-number": { "version": "3.0.0", - "resolved": "http://npmrepo.log1.recurly.net/is-number/-/is-number-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { @@ -12676,7 +12676,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-3.2.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { @@ -12687,19 +12687,19 @@ }, "isobject": { "version": "3.0.1", - "resolved": "http://npmrepo.log1.recurly.net/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, "kind-of": { "version": "6.0.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-6.0.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, "load-json-file": { "version": "1.1.0", - "resolved": "http://npmrepo.log1.recurly.net/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -12712,7 +12712,7 @@ }, "micromatch": { "version": "3.1.10", - "resolved": "http://npmrepo.log1.recurly.net/micromatch/-/micromatch-3.1.10.tgz", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { @@ -12733,7 +12733,7 @@ }, "path-exists": { "version": "2.1.0", - "resolved": "http://npmrepo.log1.recurly.net/path-exists/-/path-exists-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { @@ -12742,7 +12742,7 @@ }, "path-type": { "version": "1.1.0", - "resolved": "http://npmrepo.log1.recurly.net/path-type/-/path-type-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { @@ -12753,7 +12753,7 @@ }, "read-pkg": { "version": "1.1.0", - "resolved": "http://npmrepo.log1.recurly.net/read-pkg/-/read-pkg-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { @@ -12764,7 +12764,7 @@ }, "read-pkg-up": { "version": "1.0.1", - "resolved": "http://npmrepo.log1.recurly.net/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { @@ -12774,7 +12774,7 @@ }, "strip-bom": { "version": "2.0.0", - "resolved": "http://npmrepo.log1.recurly.net/strip-bom/-/strip-bom-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { @@ -12812,13 +12812,13 @@ }, "to-fast-properties": { "version": "1.0.3", - "resolved": "http://npmrepo.log1.recurly.net/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", "dev": true }, "to-object-path": { "version": "0.3.0", - "resolved": "http://npmrepo.log1.recurly.net/to-object-path/-/to-object-path-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { @@ -12827,7 +12827,7 @@ }, "to-regex": { "version": "3.0.2", - "resolved": "http://npmrepo.log1.recurly.net/to-regex/-/to-regex-3.0.2.tgz", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { @@ -12839,7 +12839,7 @@ }, "to-regex-range": { "version": "2.1.1", - "resolved": "http://npmrepo.log1.recurly.net/to-regex-range/-/to-regex-range-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { @@ -12849,7 +12849,7 @@ "dependencies": { "is-number": { "version": "3.0.0", - "resolved": "http://npmrepo.log1.recurly.net/is-number/-/is-number-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { @@ -12898,7 +12898,7 @@ }, "trim-right": { "version": "1.0.1", - "resolved": "http://npmrepo.log1.recurly.net/trim-right/-/trim-right-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, @@ -12923,7 +12923,7 @@ }, "type-check": { "version": "0.3.2", - "resolved": "http://npmrepo.log1.recurly.net/type-check/-/type-check-0.3.2.tgz", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { @@ -12991,7 +12991,7 @@ }, "union-value": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/union-value/-/union-value-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { @@ -13003,7 +13003,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "http://npmrepo.log1.recurly.net/extend-shallow/-/extend-shallow-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { @@ -13012,7 +13012,7 @@ }, "set-value": { "version": "0.4.3", - "resolved": "http://npmrepo.log1.recurly.net/set-value/-/set-value-0.4.3.tgz", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { @@ -13053,7 +13053,7 @@ }, "unset-value": { "version": "1.0.0", - "resolved": "http://npmrepo.log1.recurly.net/unset-value/-/unset-value-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { @@ -13063,7 +13063,7 @@ "dependencies": { "has-value": { "version": "0.3.1", - "resolved": "http://npmrepo.log1.recurly.net/has-value/-/has-value-0.3.1.tgz", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { @@ -13074,7 +13074,7 @@ "dependencies": { "isobject": { "version": "2.1.0", - "resolved": "http://npmrepo.log1.recurly.net/isobject/-/isobject-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "requires": { @@ -13085,13 +13085,13 @@ }, "has-values": { "version": "0.1.4", - "resolved": "http://npmrepo.log1.recurly.net/has-values/-/has-values-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true }, "isobject": { "version": "3.0.1", - "resolved": "http://npmrepo.log1.recurly.net/isobject/-/isobject-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } @@ -13099,7 +13099,7 @@ }, "urix": { "version": "0.1.0", - "resolved": "http://npmrepo.log1.recurly.net/urix/-/urix-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, @@ -13141,7 +13141,7 @@ }, "use": { "version": "3.1.0", - "resolved": "http://npmrepo.log1.recurly.net/use/-/use-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", "dev": true, "requires": { @@ -13150,7 +13150,7 @@ "dependencies": { "kind-of": { "version": "6.0.2", - "resolved": "http://npmrepo.log1.recurly.net/kind-of/-/kind-of-6.0.2.tgz", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } @@ -13187,7 +13187,7 @@ }, "uuid": { "version": "3.2.1", - "resolved": "http://npmrepo.log1.recurly.net/uuid/-/uuid-3.2.1.tgz", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" }, "validate-npm-package-license": { diff --git a/test/bank-account.test.js b/test/bank-account.test.js index d20b351c2..19de0b201 100644 --- a/test/bank-account.test.js +++ b/test/bank-account.test.js @@ -4,7 +4,7 @@ import after from 'lodash.after'; import merge from 'lodash.merge'; import {Recurly} from '../lib/recurly'; import {fixture} from './support/fixtures'; -import {initRecurly, apiTest, domTest} from './support/helpers'; +import {initRecurly, apiTest} from './support/helpers'; apiTest(function (requestMethod) { beforeEach(function (done) { diff --git a/test/recurly.test.js b/test/recurly.test.js index b94fca51f..64b058fae 100644 --- a/test/recurly.test.js +++ b/test/recurly.test.js @@ -1,4 +1,5 @@ import assert from 'assert'; +import {isUuidv4} from './support/helpers'; import {Recurly} from '../lib/recurly'; import CheckoutPricing from '../lib/recurly/pricing/checkout'; import SubscriptionPricing from '../lib/recurly/pricing/subscription'; @@ -14,6 +15,20 @@ describe('Recurly', () => { assert(window.recurly instanceof window.recurly.Recurly); }); + describe('Recurly.deviceId', () => { + it('is a uuid', () => assert(isUuidv4(recurly.deviceId))); + it('is set on localStorage', () => { + assert.strictEqual(recurly.deviceId, localStorage.getItem('__recurly__.deviceId')); + }); + }); + + describe('Recurly.sessionId', () => { + it('is a uuid', () => assert(isUuidv4(recurly.sessionId))); + it('is set on sessionStorage', () => { + assert.strictEqual(recurly.sessionId, sessionStorage.getItem('__recurly__.sessionId')); + }); + }); + describe('Pricing factories', () => { it('has a CheckoutPricing factory at recurly.Pricing.Checkout', function () { assert(recurly.Pricing.Checkout() instanceof CheckoutPricing); diff --git a/test/request.test.js b/test/request.test.js index 9eb1f71db..ee4f55fe3 100644 --- a/test/request.test.js +++ b/test/request.test.js @@ -25,6 +25,18 @@ describe('Request', () => { }); }); + describe('Request.deviceId', () => { + it('defers to recurly.deviceId', function () { + assert.strictEqual(this.request.deviceId, this.recurly.deviceId); + }); + }); + + describe('Request.sessionId', () => { + it('defers to recurly.sessionId', function () { + assert.strictEqual(this.request.sessionId, this.recurly.sessionId); + }); + }); + describe('Request.version', () => { describe('when Recurly is configured as a parent', () => { it('returns recurly.version', function () { @@ -106,6 +118,35 @@ describe('Request', () => { }); describe('Request.request', () => { + describe('Additional parameters', () => { + beforeEach(function () { sinon.spy(this.request, 'xhr'); }); + afterEach(function () { this.request.xhr.restore(); }); + + it('Applies Recurly.version to the request', function () { + let data = { example: 0 }; + this.request.request({ method: 'get', route: 'test', data }); + assert(this.request.xhr.calledWithMatch({ data: { example: 0, version: this.recurly.version } })); + }); + + it('Applies Recurly.key to the request', function () { + let data = { example: 0 }; + this.request.request({ method: 'get', route: 'test', data }); + assert(this.request.xhr.calledWithMatch({ data: { example: 0, key: this.recurly.config.publicKey } })); + }); + + it('Applies Recurly.deviceId to the request', function () { + let data = { example: 0 }; + this.request.request({ method: 'get', route: 'test', data }); + assert(this.request.xhr.calledWithMatch({ data: { example: 0, deviceId: this.recurly.deviceId } })); + }); + + it('Applies Recurly.sessionId to the request', function () { + let data = { example: 0 }; + this.request.request({ method: 'get', route: 'test', data }); + assert(this.request.xhr.calledWithMatch({ data: { example: 0, sessionId: this.recurly.sessionId } })); + }); + }); + describe('when configured for jsonp requests', () => { beforeEach(function () { const recurly = this.recurly = initRecurly({ cors: false }); @@ -170,7 +211,10 @@ describe('Request', () => { &arrayOfArrays[1][3]=d &arrayOfArrays[1][4]=e &version=${this.recurly.version} - &key=test`.replace(/\n|\s/g, ''); + &key=test + &deviceId=${this.recurly.deviceId} + &sessionId=${this.recurly.sessionId} + `.replace(/\n|\s/g, ''); this.XHR = (function () { const XHR = window.XMLHttpRequest; diff --git a/test/support/helpers.js b/test/support/helpers.js index 531bc9f8d..30d7d8c50 100644 --- a/test/support/helpers.js +++ b/test/support/helpers.js @@ -25,10 +25,6 @@ export function apiTest (suite) { suite('jsonp'); } -export function domTest (suite) { - suite(testBed(), () => testBed().innerHTML = ''); -} - export function testBed () { let el = window.document.getElementById('dom-testbed'); if (!el) { @@ -58,3 +54,8 @@ export function braintreeStub () { afterEach(() => delete window.braintree); } + +export function isUuidv4 (example) { + const matcher = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i; + return matcher.test(example); +} diff --git a/test/tax.test.js b/test/tax.test.js index a24923073..eddcc7e71 100644 --- a/test/tax.test.js +++ b/test/tax.test.js @@ -1,6 +1,6 @@ import assert from 'assert'; import {Recurly} from '../lib/recurly'; -import {initRecurly, apiTest, domTest} from './support/helpers'; +import {initRecurly, apiTest} from './support/helpers'; const sinon = window.sinon; diff --git a/test/token.test.js b/test/token.test.js index ce2de8c5c..8e0d836dd 100644 --- a/test/token.test.js +++ b/test/token.test.js @@ -5,7 +5,7 @@ import each from 'lodash.foreach'; import clone from 'component-clone'; import {Recurly} from '../lib/recurly'; import {applyFixtures} from './support/fixtures'; -import {initRecurly, apiTest, domTest} from './support/helpers'; +import {initRecurly, apiTest} from './support/helpers'; apiTest(requestMethod => { describe(`Recurly.token (${requestMethod})`, function () { diff --git a/test/util/web-storage.test.js b/test/util/web-storage.test.js new file mode 100644 index 000000000..30ee81537 --- /dev/null +++ b/test/util/web-storage.test.js @@ -0,0 +1,45 @@ +import assert from 'assert'; +import {storage, NAMESPACE} from '../../lib/util/web-storage'; + +describe('storage', () => { + const localStorage = window.localStorage; + const sessionStorage = window.sessionStorage; + const example = 'example'; + + beforeEach(() => { + localStorage.clear(); + sessionStorage.clear(); + assert.strictEqual(localStorage.length, 0); + assert.strictEqual(sessionStorage.length, 0); + }); + + afterEach(() => { + localStorage.clear(); + sessionStorage.clear(); + }); + + it('fetches from localStorage by default', () => { + assert.strictEqual(storage({ key: `${NAMESPACE}.test` }), null); + localStorage.setItem(`${NAMESPACE}.test`, example); + assert.strictEqual(storage({ key: 'test' }), example); + }); + + it('fetches from sessionStorage', () => { + assert.strictEqual(storage({ scope: 'session', key: `${NAMESPACE}.test` }), null); + sessionStorage.setItem(`${NAMESPACE}.test`, example); + assert.strictEqual(storage({ scope: 'session', key: 'test' }), example); + }); + + it('sets the value if given `otherwise` and the key does not exist', () => { + assert.strictEqual(storage({ key: 'test' }), null); + storage({ key: 'test', otherwise: example }); + assert.strictEqual(storage({ key: 'test' }), example); + assert.strictEqual(localStorage.getItem(`${NAMESPACE}.test`), example); + }); + + it('fetches a previously-set value', () => { + assert.strictEqual(storage({ key: 'test' }), null); + assert.strictEqual(storage({ key: 'test', otherwise: example }), example); + assert.strictEqual(storage({ key: 'test' }), example); + }); +});