mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-10 23:36:14 -05:00
Updated members service to use magic-link signin
no-issue
This commit is contained in:
parent
ef78fe7bab
commit
49672a1e4d
9 changed files with 89 additions and 1206 deletions
|
@ -57,7 +57,6 @@ function getAjaxHelper(clientId, clientSecret) {
|
|||
|
||||
function getMembersHelper() {
|
||||
return `
|
||||
<script src="${getAssetUrl('public/members-theme-bindings.js')}"></script>
|
||||
<script defer src="${getAssetUrl('public/members.js')}"></script>
|
||||
`;
|
||||
}
|
||||
|
|
|
@ -1,896 +0,0 @@
|
|||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.MembersThemeBindings = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
|
||||
"use strict";
|
||||
var root = require('./_root');
|
||||
var Symbol = root.Symbol;
|
||||
module.exports = Symbol;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_Symbol.js
|
||||
},{"./_root":24}],2:[function(require,module,exports){
|
||||
"use strict";
|
||||
function arrayEach(array, iteratee) {
|
||||
var index = -1,
|
||||
length = array == null ? 0 : array.length;
|
||||
while (++index < length) {
|
||||
if (iteratee(array[index], index, array) === false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
module.exports = arrayEach;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_arrayEach.js
|
||||
},{}],3:[function(require,module,exports){
|
||||
"use strict";
|
||||
var baseTimes = require('./_baseTimes'),
|
||||
isArguments = require('./isArguments'),
|
||||
isArray = require('./isArray'),
|
||||
isBuffer = require('./isBuffer'),
|
||||
isIndex = require('./_isIndex'),
|
||||
isTypedArray = require('./isTypedArray');
|
||||
var objectProto = Object.prototype;
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
function arrayLikeKeys(value, inherited) {
|
||||
var isArr = isArray(value),
|
||||
isArg = !isArr && isArguments(value),
|
||||
isBuff = !isArr && !isArg && isBuffer(value),
|
||||
isType = !isArr && !isArg && !isBuff && isTypedArray(value),
|
||||
skipIndexes = isArr || isArg || isBuff || isType,
|
||||
result = skipIndexes ? baseTimes(value.length, String) : [],
|
||||
length = result.length;
|
||||
for (var key in value) {
|
||||
if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == 'length' || (isBuff && (key == 'offset' || key == 'parent')) || (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || isIndex(key, length)))) {
|
||||
result.push(key);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
module.exports = arrayLikeKeys;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_arrayLikeKeys.js
|
||||
},{"./_baseTimes":11,"./_isIndex":18,"./isArguments":28,"./isArray":29,"./isBuffer":31,"./isTypedArray":36}],4:[function(require,module,exports){
|
||||
"use strict";
|
||||
var baseForOwn = require('./_baseForOwn'),
|
||||
createBaseEach = require('./_createBaseEach');
|
||||
var baseEach = createBaseEach(baseForOwn);
|
||||
module.exports = baseEach;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_baseEach.js
|
||||
},{"./_baseForOwn":6,"./_createBaseEach":14}],5:[function(require,module,exports){
|
||||
"use strict";
|
||||
var createBaseFor = require('./_createBaseFor');
|
||||
var baseFor = createBaseFor();
|
||||
module.exports = baseFor;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_baseFor.js
|
||||
},{"./_createBaseFor":15}],6:[function(require,module,exports){
|
||||
"use strict";
|
||||
var baseFor = require('./_baseFor'),
|
||||
keys = require('./keys');
|
||||
function baseForOwn(object, iteratee) {
|
||||
return object && baseFor(object, iteratee, keys);
|
||||
}
|
||||
module.exports = baseForOwn;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_baseForOwn.js
|
||||
},{"./_baseFor":5,"./keys":37}],7:[function(require,module,exports){
|
||||
"use strict";
|
||||
var Symbol = require('./_Symbol'),
|
||||
getRawTag = require('./_getRawTag'),
|
||||
objectToString = require('./_objectToString');
|
||||
var nullTag = '[object Null]',
|
||||
undefinedTag = '[object Undefined]';
|
||||
var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
|
||||
function baseGetTag(value) {
|
||||
if (value == null) {
|
||||
return value === undefined ? undefinedTag : nullTag;
|
||||
}
|
||||
return (symToStringTag && symToStringTag in Object(value)) ? getRawTag(value) : objectToString(value);
|
||||
}
|
||||
module.exports = baseGetTag;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_baseGetTag.js
|
||||
},{"./_Symbol":1,"./_getRawTag":17,"./_objectToString":22}],8:[function(require,module,exports){
|
||||
"use strict";
|
||||
var baseGetTag = require('./_baseGetTag'),
|
||||
isObjectLike = require('./isObjectLike');
|
||||
var argsTag = '[object Arguments]';
|
||||
function baseIsArguments(value) {
|
||||
return isObjectLike(value) && baseGetTag(value) == argsTag;
|
||||
}
|
||||
module.exports = baseIsArguments;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_baseIsArguments.js
|
||||
},{"./_baseGetTag":7,"./isObjectLike":35}],9:[function(require,module,exports){
|
||||
"use strict";
|
||||
var baseGetTag = require('./_baseGetTag'),
|
||||
isLength = require('./isLength'),
|
||||
isObjectLike = require('./isObjectLike');
|
||||
var argsTag = '[object Arguments]',
|
||||
arrayTag = '[object Array]',
|
||||
boolTag = '[object Boolean]',
|
||||
dateTag = '[object Date]',
|
||||
errorTag = '[object Error]',
|
||||
funcTag = '[object Function]',
|
||||
mapTag = '[object Map]',
|
||||
numberTag = '[object Number]',
|
||||
objectTag = '[object Object]',
|
||||
regexpTag = '[object RegExp]',
|
||||
setTag = '[object Set]',
|
||||
stringTag = '[object String]',
|
||||
weakMapTag = '[object WeakMap]';
|
||||
var arrayBufferTag = '[object ArrayBuffer]',
|
||||
dataViewTag = '[object DataView]',
|
||||
float32Tag = '[object Float32Array]',
|
||||
float64Tag = '[object Float64Array]',
|
||||
int8Tag = '[object Int8Array]',
|
||||
int16Tag = '[object Int16Array]',
|
||||
int32Tag = '[object Int32Array]',
|
||||
uint8Tag = '[object Uint8Array]',
|
||||
uint8ClampedTag = '[object Uint8ClampedArray]',
|
||||
uint16Tag = '[object Uint16Array]',
|
||||
uint32Tag = '[object Uint32Array]';
|
||||
var typedArrayTags = {};
|
||||
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
|
||||
typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
|
||||
function baseIsTypedArray(value) {
|
||||
return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
|
||||
}
|
||||
module.exports = baseIsTypedArray;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_baseIsTypedArray.js
|
||||
},{"./_baseGetTag":7,"./isLength":33,"./isObjectLike":35}],10:[function(require,module,exports){
|
||||
"use strict";
|
||||
var isPrototype = require('./_isPrototype'),
|
||||
nativeKeys = require('./_nativeKeys');
|
||||
var objectProto = Object.prototype;
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
function baseKeys(object) {
|
||||
if (!isPrototype(object)) {
|
||||
return nativeKeys(object);
|
||||
}
|
||||
var result = [];
|
||||
for (var key in Object(object)) {
|
||||
if (hasOwnProperty.call(object, key) && key != 'constructor') {
|
||||
result.push(key);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
module.exports = baseKeys;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_baseKeys.js
|
||||
},{"./_isPrototype":19,"./_nativeKeys":20}],11:[function(require,module,exports){
|
||||
"use strict";
|
||||
function baseTimes(n, iteratee) {
|
||||
var index = -1,
|
||||
result = Array(n);
|
||||
while (++index < n) {
|
||||
result[index] = iteratee(index);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
module.exports = baseTimes;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_baseTimes.js
|
||||
},{}],12:[function(require,module,exports){
|
||||
"use strict";
|
||||
function baseUnary(func) {
|
||||
return function(value) {
|
||||
return func(value);
|
||||
};
|
||||
}
|
||||
module.exports = baseUnary;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_baseUnary.js
|
||||
},{}],13:[function(require,module,exports){
|
||||
"use strict";
|
||||
var identity = require('./identity');
|
||||
function castFunction(value) {
|
||||
return typeof value == 'function' ? value : identity;
|
||||
}
|
||||
module.exports = castFunction;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_castFunction.js
|
||||
},{"./identity":27}],14:[function(require,module,exports){
|
||||
"use strict";
|
||||
var isArrayLike = require('./isArrayLike');
|
||||
function createBaseEach(eachFunc, fromRight) {
|
||||
return function(collection, iteratee) {
|
||||
if (collection == null) {
|
||||
return collection;
|
||||
}
|
||||
if (!isArrayLike(collection)) {
|
||||
return eachFunc(collection, iteratee);
|
||||
}
|
||||
var length = collection.length,
|
||||
index = fromRight ? length : -1,
|
||||
iterable = Object(collection);
|
||||
while ((fromRight ? index-- : ++index < length)) {
|
||||
if (iteratee(iterable[index], index, iterable) === false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return collection;
|
||||
};
|
||||
}
|
||||
module.exports = createBaseEach;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_createBaseEach.js
|
||||
},{"./isArrayLike":30}],15:[function(require,module,exports){
|
||||
"use strict";
|
||||
function createBaseFor(fromRight) {
|
||||
return function(object, iteratee, keysFunc) {
|
||||
var index = -1,
|
||||
iterable = Object(object),
|
||||
props = keysFunc(object),
|
||||
length = props.length;
|
||||
while (length--) {
|
||||
var key = props[fromRight ? length : ++index];
|
||||
if (iteratee(iterable[key], key, iterable) === false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return object;
|
||||
};
|
||||
}
|
||||
module.exports = createBaseFor;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_createBaseFor.js
|
||||
},{}],16:[function(require,module,exports){
|
||||
(function (global){
|
||||
"use strict";
|
||||
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
|
||||
module.exports = freeGlobal;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_freeGlobal.js
|
||||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
|
||||
},{}],17:[function(require,module,exports){
|
||||
"use strict";
|
||||
var Symbol = require('./_Symbol');
|
||||
var objectProto = Object.prototype;
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
var nativeObjectToString = objectProto.toString;
|
||||
var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
|
||||
function getRawTag(value) {
|
||||
var isOwn = hasOwnProperty.call(value, symToStringTag),
|
||||
tag = value[symToStringTag];
|
||||
try {
|
||||
value[symToStringTag] = undefined;
|
||||
var unmasked = true;
|
||||
} catch (e) {}
|
||||
var result = nativeObjectToString.call(value);
|
||||
if (unmasked) {
|
||||
if (isOwn) {
|
||||
value[symToStringTag] = tag;
|
||||
} else {
|
||||
delete value[symToStringTag];
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
module.exports = getRawTag;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_getRawTag.js
|
||||
},{"./_Symbol":1}],18:[function(require,module,exports){
|
||||
"use strict";
|
||||
var MAX_SAFE_INTEGER = 9007199254740991;
|
||||
var reIsUint = /^(?:0|[1-9]\d*)$/;
|
||||
function isIndex(value, length) {
|
||||
var type = typeof value;
|
||||
length = length == null ? MAX_SAFE_INTEGER : length;
|
||||
return !!length && (type == 'number' || (type != 'symbol' && reIsUint.test(value))) && (value > -1 && value % 1 == 0 && value < length);
|
||||
}
|
||||
module.exports = isIndex;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_isIndex.js
|
||||
},{}],19:[function(require,module,exports){
|
||||
"use strict";
|
||||
var objectProto = Object.prototype;
|
||||
function isPrototype(value) {
|
||||
var Ctor = value && value.constructor,
|
||||
proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
|
||||
return value === proto;
|
||||
}
|
||||
module.exports = isPrototype;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_isPrototype.js
|
||||
},{}],20:[function(require,module,exports){
|
||||
"use strict";
|
||||
var overArg = require('./_overArg');
|
||||
var nativeKeys = overArg(Object.keys, Object);
|
||||
module.exports = nativeKeys;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_nativeKeys.js
|
||||
},{"./_overArg":23}],21:[function(require,module,exports){
|
||||
"use strict";
|
||||
var freeGlobal = require('./_freeGlobal');
|
||||
var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
|
||||
var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
|
||||
var moduleExports = freeModule && freeModule.exports === freeExports;
|
||||
var freeProcess = moduleExports && freeGlobal.process;
|
||||
var nodeUtil = (function() {
|
||||
try {
|
||||
var types = freeModule && freeModule.require && freeModule.require('util').types;
|
||||
if (types) {
|
||||
return types;
|
||||
}
|
||||
return freeProcess && freeProcess.binding && freeProcess.binding('util');
|
||||
} catch (e) {}
|
||||
}());
|
||||
module.exports = nodeUtil;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_nodeUtil.js
|
||||
},{"./_freeGlobal":16}],22:[function(require,module,exports){
|
||||
"use strict";
|
||||
var objectProto = Object.prototype;
|
||||
var nativeObjectToString = objectProto.toString;
|
||||
function objectToString(value) {
|
||||
return nativeObjectToString.call(value);
|
||||
}
|
||||
module.exports = objectToString;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_objectToString.js
|
||||
},{}],23:[function(require,module,exports){
|
||||
"use strict";
|
||||
function overArg(func, transform) {
|
||||
return function(arg) {
|
||||
return func(transform(arg));
|
||||
};
|
||||
}
|
||||
module.exports = overArg;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_overArg.js
|
||||
},{}],24:[function(require,module,exports){
|
||||
"use strict";
|
||||
var freeGlobal = require('./_freeGlobal');
|
||||
var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
|
||||
var root = freeGlobal || freeSelf || Function('return this')();
|
||||
module.exports = root;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/_root.js
|
||||
},{"./_freeGlobal":16}],25:[function(require,module,exports){
|
||||
"use strict";
|
||||
module.exports = require('./forEach');
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/each.js
|
||||
},{"./forEach":26}],26:[function(require,module,exports){
|
||||
"use strict";
|
||||
var arrayEach = require('./_arrayEach'),
|
||||
baseEach = require('./_baseEach'),
|
||||
castFunction = require('./_castFunction'),
|
||||
isArray = require('./isArray');
|
||||
function forEach(collection, iteratee) {
|
||||
var func = isArray(collection) ? arrayEach : baseEach;
|
||||
return func(collection, castFunction(iteratee));
|
||||
}
|
||||
module.exports = forEach;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/forEach.js
|
||||
},{"./_arrayEach":2,"./_baseEach":4,"./_castFunction":13,"./isArray":29}],27:[function(require,module,exports){
|
||||
"use strict";
|
||||
function identity(value) {
|
||||
return value;
|
||||
}
|
||||
module.exports = identity;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/identity.js
|
||||
},{}],28:[function(require,module,exports){
|
||||
"use strict";
|
||||
var baseIsArguments = require('./_baseIsArguments'),
|
||||
isObjectLike = require('./isObjectLike');
|
||||
var objectProto = Object.prototype;
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
var propertyIsEnumerable = objectProto.propertyIsEnumerable;
|
||||
var isArguments = baseIsArguments(function() {
|
||||
return arguments;
|
||||
}()) ? baseIsArguments : function(value) {
|
||||
return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
|
||||
};
|
||||
module.exports = isArguments;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/isArguments.js
|
||||
},{"./_baseIsArguments":8,"./isObjectLike":35}],29:[function(require,module,exports){
|
||||
"use strict";
|
||||
var isArray = Array.isArray;
|
||||
module.exports = isArray;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/isArray.js
|
||||
},{}],30:[function(require,module,exports){
|
||||
"use strict";
|
||||
var isFunction = require('./isFunction'),
|
||||
isLength = require('./isLength');
|
||||
function isArrayLike(value) {
|
||||
return value != null && isLength(value.length) && !isFunction(value);
|
||||
}
|
||||
module.exports = isArrayLike;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/isArrayLike.js
|
||||
},{"./isFunction":32,"./isLength":33}],31:[function(require,module,exports){
|
||||
"use strict";
|
||||
var root = require('./_root'),
|
||||
stubFalse = require('./stubFalse');
|
||||
var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
|
||||
var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
|
||||
var moduleExports = freeModule && freeModule.exports === freeExports;
|
||||
var Buffer = moduleExports ? root.Buffer : undefined;
|
||||
var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;
|
||||
var isBuffer = nativeIsBuffer || stubFalse;
|
||||
module.exports = isBuffer;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/isBuffer.js
|
||||
},{"./_root":24,"./stubFalse":38}],32:[function(require,module,exports){
|
||||
"use strict";
|
||||
var baseGetTag = require('./_baseGetTag'),
|
||||
isObject = require('./isObject');
|
||||
var asyncTag = '[object AsyncFunction]',
|
||||
funcTag = '[object Function]',
|
||||
genTag = '[object GeneratorFunction]',
|
||||
proxyTag = '[object Proxy]';
|
||||
function isFunction(value) {
|
||||
if (!isObject(value)) {
|
||||
return false;
|
||||
}
|
||||
var tag = baseGetTag(value);
|
||||
return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
|
||||
}
|
||||
module.exports = isFunction;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/isFunction.js
|
||||
},{"./_baseGetTag":7,"./isObject":34}],33:[function(require,module,exports){
|
||||
"use strict";
|
||||
var MAX_SAFE_INTEGER = 9007199254740991;
|
||||
function isLength(value) {
|
||||
return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
|
||||
}
|
||||
module.exports = isLength;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/isLength.js
|
||||
},{}],34:[function(require,module,exports){
|
||||
"use strict";
|
||||
function isObject(value) {
|
||||
var type = typeof value;
|
||||
return value != null && (type == 'object' || type == 'function');
|
||||
}
|
||||
module.exports = isObject;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/isObject.js
|
||||
},{}],35:[function(require,module,exports){
|
||||
"use strict";
|
||||
function isObjectLike(value) {
|
||||
return value != null && typeof value == 'object';
|
||||
}
|
||||
module.exports = isObjectLike;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/isObjectLike.js
|
||||
},{}],36:[function(require,module,exports){
|
||||
"use strict";
|
||||
var baseIsTypedArray = require('./_baseIsTypedArray'),
|
||||
baseUnary = require('./_baseUnary'),
|
||||
nodeUtil = require('./_nodeUtil');
|
||||
var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
|
||||
var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
|
||||
module.exports = isTypedArray;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/isTypedArray.js
|
||||
},{"./_baseIsTypedArray":9,"./_baseUnary":12,"./_nodeUtil":21}],37:[function(require,module,exports){
|
||||
"use strict";
|
||||
var arrayLikeKeys = require('./_arrayLikeKeys'),
|
||||
baseKeys = require('./_baseKeys'),
|
||||
isArrayLike = require('./isArrayLike');
|
||||
function keys(object) {
|
||||
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
|
||||
}
|
||||
module.exports = keys;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/keys.js
|
||||
},{"./_arrayLikeKeys":3,"./_baseKeys":10,"./isArrayLike":30}],38:[function(require,module,exports){
|
||||
"use strict";
|
||||
function stubFalse() {
|
||||
return false;
|
||||
}
|
||||
module.exports = stubFalse;
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/lodash/stubFalse.js
|
||||
},{}],39:[function(require,module,exports){
|
||||
"use strict";
|
||||
module.exports = function(n) {
|
||||
var t = {},
|
||||
e = [];
|
||||
n = n || this, n.on = function(e, r, l) {
|
||||
return (t[e] = t[e] || []).push([r, l]), n;
|
||||
}, n.off = function(r, l) {
|
||||
r || (t = {});
|
||||
for (var o = t[r] || e,
|
||||
u = o.length = l ? o.length : 0; u--; )
|
||||
l == o[u][0] && o.splice(u, 1);
|
||||
return n;
|
||||
}, n.emit = function(r) {
|
||||
for (var l,
|
||||
o = t[r] || e,
|
||||
u = o.length > 0 ? o.slice(0, o.length) : o,
|
||||
i = 0; l = u[i++]; )
|
||||
l[0].apply(l[1], e.slice.call(arguments, 1));
|
||||
return n;
|
||||
};
|
||||
};
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/minivents/dist/minivents.commonjs.min.js
|
||||
},{}],40:[function(require,module,exports){
|
||||
"use strict";
|
||||
var gatewayApi = require('@tryghost/members-gateway-api');
|
||||
module.exports = function layer2(options) {
|
||||
var authUrl = (options.membersUrl + "/auth");
|
||||
var gatewayUrl = (options.membersUrl + "/gateway");
|
||||
var container = options.container;
|
||||
var members = gatewayApi({
|
||||
gatewayUrl: gatewayUrl,
|
||||
container: container
|
||||
});
|
||||
function postMessage(frame, data) {
|
||||
var origin = new URL(frame.getAttribute('src')).origin;
|
||||
frame.contentWindow.postMessage(data, origin);
|
||||
}
|
||||
var loadAuth = loadFrame(authUrl, container).then(function(frame) {
|
||||
frame.style.position = 'fixed';
|
||||
frame.style.width = '100%';
|
||||
frame.style.height = '100%';
|
||||
frame.style.background = 'transparent';
|
||||
frame.style.top = '0';
|
||||
frame.style['z-index'] = '9999';
|
||||
return frame;
|
||||
});
|
||||
function openAuth(hash) {
|
||||
var query = arguments[1] !== (void 0) ? arguments[1] : '';
|
||||
return loadAuth.then(function(frame) {
|
||||
return new Promise(function(resolve) {
|
||||
postMessage(frame, {
|
||||
hash: hash,
|
||||
query: query
|
||||
});
|
||||
frame.style.display = 'block';
|
||||
window.addEventListener('message', function messageListener(event) {
|
||||
if (event.source !== frame.contentWindow) {
|
||||
return;
|
||||
}
|
||||
if (!event.data || event.data.msg !== 'pls-close-auth-popup') {
|
||||
return;
|
||||
}
|
||||
window.removeEventListener('message', messageListener);
|
||||
frame.style.display = 'none';
|
||||
resolve(!!event.data.success);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
function resetPassword($__0) {
|
||||
var token = $__0.token;
|
||||
var query = ("token=" + token);
|
||||
return openAuth('reset-password', query);
|
||||
}
|
||||
function signin() {
|
||||
return openAuth('signin');
|
||||
}
|
||||
function upgrade() {
|
||||
return openAuth('upgrade');
|
||||
}
|
||||
function signup() {
|
||||
var coupon = (arguments[0] !== (void 0) ? arguments[0] : {}).coupon;
|
||||
var query = ("coupon=" + coupon);
|
||||
return openAuth('signup', query);
|
||||
}
|
||||
function getToken($__0) {
|
||||
var $__1 = $__0,
|
||||
audience = $__1.audience,
|
||||
fresh = $__1.fresh;
|
||||
return members.getToken({
|
||||
audience: audience,
|
||||
fresh: fresh
|
||||
});
|
||||
}
|
||||
function getSSRToken() {
|
||||
var fresh = (arguments[0] !== (void 0) ? arguments[0] : {}).fresh;
|
||||
return members.getConfig().then(function($__1) {
|
||||
var issuer = $__1.issuer;
|
||||
return members.getToken({
|
||||
audience: issuer,
|
||||
fresh: fresh
|
||||
});
|
||||
});
|
||||
}
|
||||
function signout() {
|
||||
return members.signout();
|
||||
}
|
||||
return Object.assign(members.bus, {
|
||||
getToken: getToken,
|
||||
getSSRToken: getSSRToken,
|
||||
signout: signout,
|
||||
signin: signin,
|
||||
signup: signup,
|
||||
upgrade: upgrade,
|
||||
resetPassword: resetPassword
|
||||
});
|
||||
};
|
||||
function loadFrame(src) {
|
||||
var container = arguments[1] !== (void 0) ? arguments[1] : document.body;
|
||||
return new Promise(function(resolve) {
|
||||
var frame = document.createElement('iframe');
|
||||
frame.style.display = 'none';
|
||||
frame.src = src;
|
||||
frame.onload = function() {
|
||||
resolve(frame);
|
||||
};
|
||||
container.appendChild(frame);
|
||||
});
|
||||
}
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/@tryghost/members-browser-auth/index.js
|
||||
},{"@tryghost/members-gateway-api":41}],41:[function(require,module,exports){
|
||||
"use strict";
|
||||
var gatewayProtocol = require('@tryghost/members-gateway-protocol');
|
||||
var events = require('minivents');
|
||||
module.exports = function layer1(options) {
|
||||
var members = {
|
||||
getToken: getToken,
|
||||
getConfig: getConfig,
|
||||
signout: signout,
|
||||
signin: signin,
|
||||
signup: signup,
|
||||
requestPasswordReset: requestPasswordReset,
|
||||
resetPassword: resetPassword,
|
||||
bus: new events()
|
||||
};
|
||||
var loadGateway = loadFrame(options.gatewayUrl, options.container).then(function(frame) {
|
||||
var gateway = gatewayProtocol(frame);
|
||||
var init = gatewayFn('init');
|
||||
gateway.listen(function(data) {
|
||||
members.bus.emit(data.event, data.payload);
|
||||
});
|
||||
return init(gateway).then(function() {
|
||||
return gateway;
|
||||
});
|
||||
});
|
||||
function getToken($__0) {
|
||||
var $__1 = $__0,
|
||||
audience = $__1.audience,
|
||||
fresh = $__1.fresh;
|
||||
return loadGateway.then(gatewayFn('getToken', {
|
||||
audience: audience,
|
||||
fresh: fresh
|
||||
}));
|
||||
}
|
||||
function getConfig() {
|
||||
return loadGateway.then(gatewayFn('getConfig'));
|
||||
}
|
||||
function signout() {
|
||||
return loadGateway.then(gatewayFn('signout'));
|
||||
}
|
||||
function signin($__0) {
|
||||
var $__1 = $__0,
|
||||
email = $__1.email,
|
||||
password = $__1.password;
|
||||
return loadGateway.then(gatewayFn('signin', {
|
||||
email: email,
|
||||
password: password
|
||||
}));
|
||||
}
|
||||
function signup($__0) {
|
||||
var $__1 = $__0,
|
||||
name = $__1.name,
|
||||
email = $__1.email,
|
||||
password = $__1.password;
|
||||
return loadGateway.then(gatewayFn('signin', {
|
||||
name: name,
|
||||
email: email,
|
||||
password: password
|
||||
}));
|
||||
}
|
||||
function requestPasswordReset($__0) {
|
||||
var email = $__0.email;
|
||||
return loadGateway.then(gatewayFn('request-password-reset', {email: email}));
|
||||
}
|
||||
function resetPassword($__0) {
|
||||
var $__1 = $__0,
|
||||
token = $__1.token,
|
||||
password = $__1.password;
|
||||
return loadGateway.then(gatewayFn('reset-password', {
|
||||
token: token,
|
||||
password: password
|
||||
}));
|
||||
}
|
||||
return members;
|
||||
};
|
||||
function gatewayFn(method) {
|
||||
var opts = arguments[1] !== (void 0) ? arguments[1] : {};
|
||||
return function(gateway) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
gateway.call(method, opts, function(err, res) {
|
||||
if (err) {
|
||||
reject(err);
|
||||
}
|
||||
resolve(res);
|
||||
});
|
||||
});
|
||||
};
|
||||
}
|
||||
function loadFrame(src) {
|
||||
var container = arguments[1] !== (void 0) ? arguments[1] : document.body;
|
||||
return new Promise(function(resolve) {
|
||||
var frame = document.createElement('iframe');
|
||||
frame.style.display = 'none';
|
||||
frame.src = src;
|
||||
frame.onload = function() {
|
||||
resolve(frame);
|
||||
};
|
||||
container.appendChild(frame);
|
||||
});
|
||||
}
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/@tryghost/members-gateway-api/index.js
|
||||
},{"@tryghost/members-gateway-protocol":42,"minivents":39}],42:[function(require,module,exports){
|
||||
"use strict";
|
||||
module.exports = function layer0(frame) {
|
||||
var getuid = (function(i) {
|
||||
return function() {
|
||||
return i += 1;
|
||||
};
|
||||
})(1);
|
||||
var origin = new URL(frame.getAttribute('src')).origin;
|
||||
var handlers = {};
|
||||
var listener = null;
|
||||
window.addEventListener('message', function(event) {
|
||||
if (event.origin !== origin) {
|
||||
return;
|
||||
}
|
||||
if (!event.data || !event.data.uid) {
|
||||
if (event.data.event) {
|
||||
return listener && listener(event.data);
|
||||
}
|
||||
return;
|
||||
}
|
||||
var handler = handlers[event.data.uid];
|
||||
if (!handler) {
|
||||
return;
|
||||
}
|
||||
delete handlers[event.data.uid];
|
||||
handler(event.data.error, event.data.data);
|
||||
});
|
||||
function call(method, options, cb) {
|
||||
var uid = getuid();
|
||||
var data = {
|
||||
uid: uid,
|
||||
method: method,
|
||||
options: options
|
||||
};
|
||||
handlers[uid] = cb;
|
||||
frame.contentWindow.postMessage(data, origin);
|
||||
}
|
||||
function listen(fn) {
|
||||
if (listener) {
|
||||
return false;
|
||||
}
|
||||
listener = fn;
|
||||
return true;
|
||||
}
|
||||
return {
|
||||
call: call,
|
||||
listen: listen
|
||||
};
|
||||
};
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/node_modules/@tryghost/members-gateway-protocol/index.js
|
||||
},{}],43:[function(require,module,exports){
|
||||
"use strict";
|
||||
var each = require('lodash/each');
|
||||
var browserAuth = require('@tryghost/members-browser-auth');
|
||||
module.exports.init = init;
|
||||
function init($__0) {
|
||||
var $__1 = $__0,
|
||||
membersUrl = $__1.membersUrl,
|
||||
ssrUrl = $__1.ssrUrl;
|
||||
var auth = browserAuth({membersUrl: membersUrl});
|
||||
var $__2 = window.location.hash.match(/^#([^?]+)\??(.*)$/) || [],
|
||||
hashMatch = $__2[0],
|
||||
hash = $__2[1],
|
||||
query = $__2[2];
|
||||
if (hashMatch && hash === 'reset-password') {
|
||||
var $__3 = query.match(/token=([a-zA-Z0-9-_]+.[a-zA-Z0-9-_]+.[a-zA-Z0-9-_]+)/) || [],
|
||||
tokenMatch = $__3[0],
|
||||
token = $__3[1];
|
||||
if (tokenMatch) {
|
||||
return auth.resetPassword({token: token}).then((function(success) {
|
||||
window.location.hash = '';
|
||||
return success;
|
||||
})).then(reload);
|
||||
}
|
||||
}
|
||||
auth.on('signedin', function() {
|
||||
auth.getSSRToken({fresh: true}).then(function(token) {
|
||||
createSession(token, ssrUrl);
|
||||
});
|
||||
});
|
||||
auth.on('signedout', function() {
|
||||
destroySession();
|
||||
});
|
||||
function signout() {
|
||||
auth.signout().then((function() {
|
||||
return destroySession(ssrUrl);
|
||||
})).then(reload);
|
||||
}
|
||||
function signin() {
|
||||
auth.signin().then((function() {
|
||||
return auth.getSSRToken({fresh: true}).then(function(token) {
|
||||
return createSession(token, ssrUrl);
|
||||
});
|
||||
})).then(reload);
|
||||
}
|
||||
function signup($__4) {
|
||||
var $__6;
|
||||
var $__5 = $__4,
|
||||
coupon = ($__6 = $__5.coupon) === void 0 ? '' : $__6;
|
||||
auth.signup({coupon: coupon}).then((function() {
|
||||
return auth.getSSRToken({fresh: true}).then(function(token) {
|
||||
return createSession(token, ssrUrl);
|
||||
});
|
||||
})).then(reload);
|
||||
}
|
||||
function upgrade() {
|
||||
auth.upgrade().then((function() {
|
||||
return auth.getSSRToken({fresh: true}).then(function(token) {
|
||||
return createSession(token, ssrUrl);
|
||||
});
|
||||
})).then(reload);
|
||||
}
|
||||
var signinEls = document.querySelectorAll('[data-members-signin]');
|
||||
var signupEls = document.querySelectorAll('[data-members-signup]');
|
||||
var upgradeEls = document.querySelectorAll('[data-members-upgrade]');
|
||||
var signoutEls = document.querySelectorAll('[data-members-signout]');
|
||||
each(signinEls, (function(el) {
|
||||
el.addEventListener('click', (function(event) {
|
||||
event.preventDefault();
|
||||
signin();
|
||||
}));
|
||||
}));
|
||||
each(signupEls, (function(el) {
|
||||
el.addEventListener('click', (function(event) {
|
||||
event.preventDefault();
|
||||
var coupon = el.dataset.membersCoupon;
|
||||
signup({coupon: coupon});
|
||||
}));
|
||||
}));
|
||||
each(upgradeEls, (function(el) {
|
||||
el.addEventListener('click', (function(event) {
|
||||
event.preventDefault();
|
||||
upgrade();
|
||||
}));
|
||||
}));
|
||||
each(signoutEls, (function(el) {
|
||||
el.addEventListener('click', (function(event) {
|
||||
event.preventDefault();
|
||||
signout();
|
||||
}));
|
||||
}));
|
||||
}
|
||||
function reload(success) {
|
||||
if (success) {
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
function createSession(token, ssrUrl) {
|
||||
return fetch(ssrUrl, {
|
||||
method: 'post',
|
||||
credentials: 'include',
|
||||
body: token
|
||||
}).then(function(res) {
|
||||
return !!res.ok;
|
||||
});
|
||||
}
|
||||
function destroySession(ssrUrl) {
|
||||
return fetch(ssrUrl, {method: 'delete'}).then(function(res) {
|
||||
return !!res.ok;
|
||||
});
|
||||
}
|
||||
|
||||
//# sourceURL=/home/donny/usr/src/ghost.org/Members/packages/members-theme-bindings/index.js
|
||||
},{"@tryghost/members-browser-auth":40,"lodash/each":25}]},{},[43])(43)
|
||||
});
|
|
@ -1 +1,44 @@
|
|||
MembersThemeBindings.init({ssrUrl: "{{blog-url}}/members/ssr", membersUrl: "{{admin-url}}/api/v2/members/static"});
|
||||
const form = document.querySelector('form[data-members-form]');
|
||||
if (form) {
|
||||
form.addEventListener('submit', function (event) {
|
||||
event.preventDefault();
|
||||
form.classList.remove('success', 'invalid', 'error');
|
||||
const input = event.target.querySelector('input[data-members-email]');
|
||||
const email = input.value;
|
||||
|
||||
if (!email.includes('@')) {
|
||||
form.classList.add('invalid')
|
||||
return;
|
||||
}
|
||||
|
||||
fetch('{{admin-url}}/api/v2/members/send-magic-link/', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
email
|
||||
})
|
||||
}).then(function (res) {
|
||||
if (res.ok) {
|
||||
form.classList.add('success')
|
||||
} else {
|
||||
form.classList.add('error')
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
const magicLinkRegEx = /token=([a-zA-Z0-9_\-]+\.[a-zA-Z0-9_\-]+\.[a-zA-Z0-9_\-]+)/;
|
||||
const [isMagicLink, token] = location.search.match(magicLinkRegEx) || [false, null];
|
||||
|
||||
if (isMagicLink) {
|
||||
fetch('{{blog-url}}/members/ssr', {
|
||||
method: 'POST',
|
||||
body: token
|
||||
}).then(function (res) {
|
||||
if (res.ok) {
|
||||
window.location.search = window.location.search.replace(magicLinkRegEx, '');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,34 +1,23 @@
|
|||
const url = require('url');
|
||||
const {URL} = require('url');
|
||||
const settingsCache = require('../settings/cache');
|
||||
const urlUtils = require('../../lib/url-utils');
|
||||
const MembersApi = require('@tryghost/members-api');
|
||||
const common = require('../../lib/common');
|
||||
const models = require('../../models');
|
||||
const mail = require('../mail');
|
||||
const blogIcon = require('../../lib/image/blog-icon');
|
||||
const doBlock = fn => fn();
|
||||
const models = require('../../models');
|
||||
|
||||
function createMember({name, email, password}) {
|
||||
function createMember({email}) {
|
||||
return models.Member.add({
|
||||
name,
|
||||
email,
|
||||
password
|
||||
}).then((member) => {
|
||||
return member.toJSON();
|
||||
});
|
||||
}
|
||||
|
||||
function updateMember(member, newData) {
|
||||
return models.Member.findOne(member, {
|
||||
require: true
|
||||
}).then(({id}) => {
|
||||
return models.Member.edit(newData, {id});
|
||||
email
|
||||
}).then((member) => {
|
||||
return member.toJSON();
|
||||
});
|
||||
}
|
||||
|
||||
function getMember(data, options = {}) {
|
||||
if (!data.email && !data.id) {
|
||||
return Promise.resolve(null);
|
||||
}
|
||||
return models.Member.findOne(data, options).then((model) => {
|
||||
if (!model) {
|
||||
return null;
|
||||
|
@ -57,153 +46,46 @@ function listMembers(options) {
|
|||
});
|
||||
}
|
||||
|
||||
function validateMember({email, password}) {
|
||||
return models.Member.findOne({email}, {
|
||||
require: true
|
||||
}).then((member) => {
|
||||
return member.comparePassword(password).then((res) => {
|
||||
if (!res) {
|
||||
throw new Error('Password is incorrect');
|
||||
}
|
||||
return member;
|
||||
});
|
||||
}).then((member) => {
|
||||
return member.toJSON();
|
||||
});
|
||||
}
|
||||
|
||||
function getSubscriptionSettings() {
|
||||
let membersSettings = settingsCache.get('members_subscription_settings');
|
||||
if (!membersSettings) {
|
||||
membersSettings = {
|
||||
isPaid: false,
|
||||
paymentProcessors: [{
|
||||
adapter: 'stripe',
|
||||
config: {
|
||||
secret_token: '',
|
||||
public_token: '',
|
||||
product: {
|
||||
name: 'Ghost Subscription'
|
||||
},
|
||||
plans: [
|
||||
{
|
||||
name: 'Monthly',
|
||||
currency: 'usd',
|
||||
interval: 'month',
|
||||
amount: ''
|
||||
},
|
||||
{
|
||||
name: 'Yearly',
|
||||
currency: 'usd',
|
||||
interval: 'year',
|
||||
amount: ''
|
||||
}
|
||||
]
|
||||
}
|
||||
}]
|
||||
};
|
||||
}
|
||||
if (!membersSettings.isPaid) {
|
||||
membersSettings.paymentProcessors = [];
|
||||
}
|
||||
return membersSettings;
|
||||
}
|
||||
|
||||
const siteUrl = urlUtils.getSiteUrl();
|
||||
const siteOrigin = doBlock(() => {
|
||||
const {protocol, host} = url.parse(siteUrl);
|
||||
return `${protocol}//${host}`;
|
||||
});
|
||||
|
||||
const adminOrigin = doBlock(() => {
|
||||
const {protocol, host} = url.parse(urlUtils.urlFor('admin', true));
|
||||
return `${protocol}//${host}`;
|
||||
});
|
||||
|
||||
const getApiUrl = ({version, type}) => {
|
||||
const {href} = new url.URL(
|
||||
const {href} = new URL(
|
||||
urlUtils.getApiPath({version, type}),
|
||||
urlUtils.urlFor('admin', true)
|
||||
);
|
||||
return href;
|
||||
};
|
||||
|
||||
const contentApiUrl = getApiUrl({version: 'v2', type: 'content'});
|
||||
const siteUrl = urlUtils.getSiteUrl();
|
||||
const membersApiUrl = getApiUrl({version: 'v2', type: 'members'});
|
||||
|
||||
const accessControl = {
|
||||
[siteOrigin]: {
|
||||
[contentApiUrl]: {
|
||||
tokenLength: '20m'
|
||||
},
|
||||
[membersApiUrl]: {
|
||||
tokenLength: '180d'
|
||||
}
|
||||
},
|
||||
'*': {
|
||||
tokenLength: '20m'
|
||||
}
|
||||
};
|
||||
|
||||
const sendEmail = (function createSendEmail(mailer) {
|
||||
return function sendEmail(member, {token}) {
|
||||
if (!(mailer instanceof mail.GhostMailer)) {
|
||||
mailer = new mail.GhostMailer();
|
||||
}
|
||||
const message = {
|
||||
to: member.email,
|
||||
subject: 'Reset password',
|
||||
html: `
|
||||
Hi ${member.name},
|
||||
|
||||
To reset your password, click the following link and follow the instructions:
|
||||
|
||||
${siteUrl}#reset-password?token=${token}
|
||||
|
||||
If you didn't request a password change, just ignore this email.
|
||||
`
|
||||
};
|
||||
|
||||
/* eslint-disable */
|
||||
// @TODO remove this
|
||||
console.log(message.html);
|
||||
/* eslint-enable */
|
||||
return mailer.send(message).catch((err) => {
|
||||
return Promise.reject(err);
|
||||
});
|
||||
};
|
||||
})();
|
||||
|
||||
const getSiteConfig = () => {
|
||||
return {
|
||||
title: settingsCache.get('title') ? settingsCache.get('title').replace(/"/g, '\\"') : 'Publication',
|
||||
icon: blogIcon.getIconUrl()
|
||||
};
|
||||
};
|
||||
const ghostMailer = new mail.GhostMailer();
|
||||
|
||||
module.exports = createApiInstance;
|
||||
|
||||
function createApiInstance() {
|
||||
const membersApiInstance = MembersApi({
|
||||
authConfig: {
|
||||
tokenConfig: {
|
||||
issuer: membersApiUrl,
|
||||
ssoOrigin: adminOrigin,
|
||||
publicKey: settingsCache.get('members_public_key'),
|
||||
privateKey: settingsCache.get('members_private_key'),
|
||||
sessionSecret: settingsCache.get('members_session_secret'),
|
||||
accessControl
|
||||
privateKey: settingsCache.get('members_private_key')
|
||||
},
|
||||
paymentConfig: {
|
||||
processors: getSubscriptionSettings().paymentProcessors
|
||||
auth: {
|
||||
getSigninURL(token) {
|
||||
const signinURL = new URL(siteUrl);
|
||||
signinURL.searchParams.set('token', token);
|
||||
return signinURL.href;
|
||||
}
|
||||
},
|
||||
mail: {
|
||||
transporter: {
|
||||
sendMail(message) {
|
||||
return ghostMailer.send(Object.assign({subject: 'Signin'}, message));
|
||||
}
|
||||
}
|
||||
},
|
||||
siteConfig: getSiteConfig(),
|
||||
createMember,
|
||||
getMember,
|
||||
deleteMember,
|
||||
listMembers,
|
||||
validateMember,
|
||||
updateMember,
|
||||
sendEmail
|
||||
listMembers
|
||||
});
|
||||
|
||||
membersApiInstance.setLogger(common.logging);
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
const {static} = require('express');
|
||||
const path = require('path');
|
||||
const MembersSSR = require('@tryghost/members-ssr');
|
||||
|
||||
const createMembersApiInstance = require('./api');
|
||||
|
@ -47,14 +45,7 @@ const membersService = {
|
|||
// This is passed as a function so that updates to the instance
|
||||
// are picked up in the ssr module
|
||||
membersApi: () => membersApi
|
||||
}),
|
||||
|
||||
authPages: static(
|
||||
path.join(
|
||||
require.resolve('@tryghost/members-auth-pages'),
|
||||
'../dist'
|
||||
)
|
||||
)
|
||||
})
|
||||
};
|
||||
|
||||
module.exports = membersService;
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
const {URL} = require('url');
|
||||
const debug = require('ghost-ignition').debug('web:canary:members:app');
|
||||
const express = require('express');
|
||||
const cors = require('cors');
|
||||
const membersService = require('../../../../services/members');
|
||||
const urlUtils = require('../../../../lib/url-utils');
|
||||
const labs = require('../../../shared/middlewares/labs');
|
||||
const shared = require('../../../shared');
|
||||
|
||||
|
@ -11,8 +14,9 @@ module.exports = function setupMembersApiApp() {
|
|||
// Entire app is behind labs flag
|
||||
apiApp.use(labs.members);
|
||||
|
||||
// Set up the auth pages
|
||||
apiApp.use('/static/auth', membersService.authPages);
|
||||
// Support CORS for requests from the frontend
|
||||
const siteUrl = new URL(urlUtils.getSiteUrl());
|
||||
apiApp.use(cors(siteUrl.origin));
|
||||
|
||||
// Set up the api endpoints and the gateway
|
||||
// NOTE: this is wrapped in a function to ensure we always go via the getter
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
const {URL} = require('url');
|
||||
const debug = require('ghost-ignition').debug('web:v2:members:app');
|
||||
const express = require('express');
|
||||
const cors = require('cors');
|
||||
const membersService = require('../../../../services/members');
|
||||
const urlUtils = require('../../../../lib/url-utils');
|
||||
const labs = require('../../../shared/middlewares/labs');
|
||||
const shared = require('../../../shared');
|
||||
|
||||
|
@ -11,8 +14,9 @@ module.exports = function setupMembersApiApp() {
|
|||
// Entire app is behind labs flag
|
||||
apiApp.use(labs.members);
|
||||
|
||||
// Set up the auth pages
|
||||
apiApp.use('/static/auth', membersService.authPages);
|
||||
// Support CORS for requests from the frontend
|
||||
const siteUrl = new URL(urlUtils.getSiteUrl());
|
||||
apiApp.use(cors(siteUrl.origin));
|
||||
|
||||
// Set up the api endpoints and the gateway
|
||||
// NOTE: this is wrapped in a function to ensure we always go via the getter
|
||||
|
|
|
@ -32,8 +32,7 @@
|
|||
"lint:test": "eslint -c core/test/.eslintrc.json --ignore-path core/test/.eslintignore 'core/test/**/*.js'",
|
||||
"lint": "yarn lint:server && yarn lint:frontend && yarn lint:test",
|
||||
"posttest": "yarn lint",
|
||||
"fixmodulenotdefined": "yarn cache clean && cd core/client && rm -rf node_modules tmp dist && yarn && cd ../../",
|
||||
"postinstall": "cpy node_modules/@tryghost/members-theme-bindings/build/members-theme-bindings.js core/server/public/"
|
||||
"fixmodulenotdefined": "yarn cache clean && cd core/client && rm -rf node_modules tmp dist && yarn && cd ../../"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^8.10.0 || ^10.13.0",
|
||||
|
@ -43,9 +42,7 @@
|
|||
"@nexes/nql": "0.3.0",
|
||||
"@tryghost/helpers": "1.1.8",
|
||||
"@tryghost/members-api": "0.4.1",
|
||||
"@tryghost/members-auth-pages": "1.1.0",
|
||||
"@tryghost/members-ssr": "0.3.0",
|
||||
"@tryghost/members-theme-bindings": "0.2.3",
|
||||
"@tryghost/social-urls": "0.1.2",
|
||||
"@tryghost/string": "^0.1.3",
|
||||
"@tryghost/url-utils": "0.3.0",
|
||||
|
|
151
yarn.lock
151
yarn.lock
|
@ -210,46 +210,6 @@
|
|||
node-jose "^1.1.3"
|
||||
stripe "^7.4.0"
|
||||
|
||||
"@tryghost/members-auth-pages@1.1.0":
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/members-auth-pages/-/members-auth-pages-1.1.0.tgz#417d27d009d90a509debfaf1ffd25ab1cc58aece"
|
||||
integrity sha512-1+YeHB9JRYj5O48ItcfMz4CLzwrMj5CjAje7Gt+ytXf2+WE2fQeAT2WcWEKS4lBB0ZskDTYjBkGBv+6KQrGG/w==
|
||||
dependencies:
|
||||
"@tryghost/members-gateway-protocol" "^0.1.2"
|
||||
preact "^8.2.1"
|
||||
preact-compat "^3.17.0"
|
||||
react-stripe-elements "^2.0.3"
|
||||
|
||||
"@tryghost/members-browser-auth@^0.2.0":
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/members-browser-auth/-/members-browser-auth-0.2.0.tgz#d2d7ad20d5c5566380851a21aa64b59d9e768860"
|
||||
integrity sha512-u2G4TdxJctX0ols/kmOqBFFSHVwPAA9sJRf3DQU5DEM0KiMllSvdhADKl2mbaH7rXO+3dNaTUJAc7yXDEu+TaQ==
|
||||
dependencies:
|
||||
"@tryghost/members-gateway-api" "^0.1.4"
|
||||
bluebird "^3.5.4"
|
||||
ghost-ignition "^3.1.0"
|
||||
lodash "^4.17.11"
|
||||
|
||||
"@tryghost/members-gateway-api@^0.1.4":
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/members-gateway-api/-/members-gateway-api-0.1.4.tgz#d458c3ccb574c109861c703a69a4d3e967eb19cc"
|
||||
integrity sha512-AjrnB6htHy4tR6zvRhokxRkxbGRzMJCOg5fOjc05w2dzolMF2HUeYqIsMtyMn4pnogbJb25WBtkiwxq+s59UWA==
|
||||
dependencies:
|
||||
"@tryghost/members-gateway-protocol" "^0.1.2"
|
||||
bluebird "^3.5.4"
|
||||
ghost-ignition "^3.1.0"
|
||||
lodash "^4.17.11"
|
||||
minivents "^2.2.0"
|
||||
|
||||
"@tryghost/members-gateway-protocol@^0.1.2":
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/members-gateway-protocol/-/members-gateway-protocol-0.1.2.tgz#afd004bd91b5e403ebb9e130d3208046ce621bc2"
|
||||
integrity sha512-lZVJ5tKqAiGZhZ+JD+dSjHKN9q04W7JkWPVl/+zOl2FuVbMiIOvlcmrHWug++hZhAyYHcWjnRPM/paRkiR/KBQ==
|
||||
dependencies:
|
||||
bluebird "^3.5.4"
|
||||
ghost-ignition "^3.1.0"
|
||||
lodash "^4.17.11"
|
||||
|
||||
"@tryghost/members-ssr@0.3.0":
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/members-ssr/-/members-ssr-0.3.0.tgz#92e972a35c4eb571c25678f6864c183a0dc2a8df"
|
||||
|
@ -262,16 +222,6 @@
|
|||
jsonwebtoken "^8.5.1"
|
||||
lodash "^4.17.11"
|
||||
|
||||
"@tryghost/members-theme-bindings@0.2.3":
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/members-theme-bindings/-/members-theme-bindings-0.2.3.tgz#0f69ec555425a12a8e1436331c62408677354c2d"
|
||||
integrity sha512-uFtAZvKSWJMlNeUv0U+jKQBfCJpXxewP5g+VPAZJPeY52JMM6uLfJIyhUtWWulvhyV+bJC3X9hb5vVHfkTARXQ==
|
||||
dependencies:
|
||||
"@tryghost/members-browser-auth" "^0.2.0"
|
||||
bluebird "^3.5.4"
|
||||
ghost-ignition "^3.1.0"
|
||||
lodash "^4.17.11"
|
||||
|
||||
"@tryghost/mobiledoc-kit@^0.11.2-ghost.4":
|
||||
version "0.11.2-ghost.4"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/mobiledoc-kit/-/mobiledoc-kit-0.11.2-ghost.4.tgz#144189e7e62748b3c56e7b723fa18a5e8c807ccf"
|
||||
|
@ -4023,13 +3973,6 @@ image-size@0.7.4, image-size@^0.7.4:
|
|||
resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.7.4.tgz#092c1e541a93511917bfc957a1fc7add21c72e87"
|
||||
integrity sha512-GqPgxs+VkOr12aWwjSkyRzf5atzObWpFtiRuDgxCl2I/SDpZOKZFRD3iIAeAN6/usmn8SeLWRt7a8JRYK0Whbw==
|
||||
|
||||
immutability-helper@^2.7.1:
|
||||
version "2.9.1"
|
||||
resolved "https://registry.yarnpkg.com/immutability-helper/-/immutability-helper-2.9.1.tgz#71c423ba387e67b6c6ceba0650572f2a2a6727df"
|
||||
integrity sha512-r/RmRG8xO06s/k+PIaif2r5rGc3j4Yhc01jSBfwPCXDLYZwp/yxralI37Df1mwmuzcCsen/E/ITKcTEvc1PQmQ==
|
||||
dependencies:
|
||||
invariant "^2.2.0"
|
||||
|
||||
import-fresh@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118"
|
||||
|
@ -4184,13 +4127,6 @@ intl@1.2.5:
|
|||
resolved "https://registry.yarnpkg.com/intl/-/intl-1.2.5.tgz#82244a2190c4e419f8371f5aa34daa3420e2abde"
|
||||
integrity sha1-giRKIZDE5Bn4Nx9ao02qNCDiq94=
|
||||
|
||||
invariant@^2.2.0:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
|
||||
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
|
||||
dependencies:
|
||||
loose-envify "^1.0.0"
|
||||
|
||||
invert-kv@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
|
||||
|
@ -4546,16 +4482,16 @@ js-beautify@1.8.8:
|
|||
mkdirp "~0.5.0"
|
||||
nopt "~4.0.1"
|
||||
|
||||
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||
|
||||
js-tokens@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
|
||||
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
|
||||
|
||||
js-tokens@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||
|
||||
js-yaml@3.13.1, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.9.1, js-yaml@~3.13.0:
|
||||
version "3.13.1"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
|
||||
|
@ -5135,13 +5071,6 @@ long@^4.0.0:
|
|||
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
|
||||
integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
|
||||
|
||||
loose-envify@^1.0.0, loose-envify@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
|
||||
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
|
||||
dependencies:
|
||||
js-tokens "^3.0.0 || ^4.0.0"
|
||||
|
||||
loud-rejection@^1.0.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
|
||||
|
@ -5571,11 +5500,6 @@ minipass@^2.2.1, minipass@^2.3.5:
|
|||
safe-buffer "^5.1.2"
|
||||
yallist "^3.0.0"
|
||||
|
||||
minivents@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/minivents/-/minivents-2.2.0.tgz#559492edc04bc00b62168850af5b8ca06d5e088b"
|
||||
integrity sha1-VZSS7cBLwAtiFohQr1uMoG1eCIs=
|
||||
|
||||
minizlib@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
|
||||
|
@ -6855,40 +6779,6 @@ posthtml@^0.9.0:
|
|||
posthtml-parser "^0.2.0"
|
||||
posthtml-render "^1.0.5"
|
||||
|
||||
preact-compat@^3.17.0:
|
||||
version "3.19.0"
|
||||
resolved "https://registry.yarnpkg.com/preact-compat/-/preact-compat-3.19.0.tgz#a71457b6a3bf051690a4411603bc2085aa061c2f"
|
||||
integrity sha512-f83A4hIhH8Uzhb9GbIcGk8SM19ffWlwP9mDaYwQdRnMdekZwcCA7eIAbeV4EMQaV9C0Yuy8iKgBAtyTKPZQt/Q==
|
||||
dependencies:
|
||||
immutability-helper "^2.7.1"
|
||||
preact-context "^1.1.3"
|
||||
preact-render-to-string "^3.8.2"
|
||||
preact-transition-group "^1.1.1"
|
||||
prop-types "^15.6.2"
|
||||
standalone-react-addons-pure-render-mixin "^0.1.1"
|
||||
|
||||
preact-context@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/preact-context/-/preact-context-1.1.3.tgz#26d06db0f39d8d9c890df5ada9a99a943586ec68"
|
||||
integrity sha512-2LcpjZG6JUhBgqziVH+nJtmu9PS5KzWoFx6wX2svXw0oBHhU6e8tQZhEkKLMOAxdmj7gVzApfS/B6V+fjJ/llA==
|
||||
|
||||
preact-render-to-string@^3.8.2:
|
||||
version "3.8.2"
|
||||
resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-3.8.2.tgz#bd72964d705a57da3a9e72098acaa073dd3ceff9"
|
||||
integrity sha512-przuZPajiurStGgxMoJP0EJeC4xj5CgHv+M7GfF3YxAdhGgEWAkhOSE0xympAFN20uMayntBZpttIZqqLl77fw==
|
||||
dependencies:
|
||||
pretty-format "^3.5.1"
|
||||
|
||||
preact-transition-group@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/preact-transition-group/-/preact-transition-group-1.1.1.tgz#f0a49327ea515ece34ea2be864c4a7d29e5d6e10"
|
||||
integrity sha1-8KSTJ+pRXs406ivoZMSn0p5dbhA=
|
||||
|
||||
preact@^8.2.1:
|
||||
version "8.4.2"
|
||||
resolved "https://registry.yarnpkg.com/preact/-/preact-8.4.2.tgz#1263b974a17d1ea80b66590e41ef786ced5d6a23"
|
||||
integrity sha512-TsINETWiisfB6RTk0wh3/mvxbGRvx+ljeBccZ4Z6MPFKgu/KFGyf2Bmw3Z/jlXhL5JlNKY6QAbA9PVyzIy9//A==
|
||||
|
||||
prebuild-install@^2.3.0:
|
||||
version "2.5.3"
|
||||
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.3.tgz#9f65f242782d370296353710e9bc843490c19f69"
|
||||
|
@ -6959,11 +6849,6 @@ pretty-bytes@^4.0.2:
|
|||
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
|
||||
integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=
|
||||
|
||||
pretty-format@^3.5.1:
|
||||
version "3.8.0"
|
||||
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385"
|
||||
integrity sha1-v77VbV6ad2ZF9LH/eqGjrE+jw4U=
|
||||
|
||||
prettyjson@^1.1.3:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/prettyjson/-/prettyjson-1.2.1.tgz#fcffab41d19cab4dfae5e575e64246619b12d289"
|
||||
|
@ -6999,15 +6884,6 @@ promise-wtf@^1.2.4:
|
|||
resolved "https://registry.yarnpkg.com/promise-wtf/-/promise-wtf-1.2.4.tgz#8cbdd31ea10dee074fbb6387cbc96e413993376c"
|
||||
integrity sha512-wOZ+ZUG0/Lsk+muOElLtteIteyvF5B1bNcVLhmlv6PDKcAAQGa5Bf0maN3rj73FWyjJE840MzeQyNE6KOKpgrg==
|
||||
|
||||
prop-types@^15.5.10, prop-types@^15.6.2:
|
||||
version "15.7.2"
|
||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
|
||||
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
|
||||
dependencies:
|
||||
loose-envify "^1.4.0"
|
||||
object-assign "^4.1.1"
|
||||
react-is "^16.8.1"
|
||||
|
||||
propagate@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/propagate/-/propagate-1.0.0.tgz#00c2daeedda20e87e3782b344adba1cddd6ad709"
|
||||
|
@ -7170,18 +7046,6 @@ rc@^1.1.6, rc@^1.2.7:
|
|||
minimist "^1.2.0"
|
||||
strip-json-comments "~2.0.1"
|
||||
|
||||
react-is@^16.8.1:
|
||||
version "16.8.6"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
|
||||
integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==
|
||||
|
||||
react-stripe-elements@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/react-stripe-elements/-/react-stripe-elements-2.0.3.tgz#cfd0f68d00ce52a07aab1cb2b59b29dc12309486"
|
||||
integrity sha512-aKLiWyfP0n3Gq42BKykULgoruNVRXEaeYh8NSokdgH3ubGU3nsHFZJg3LgbT/XOquttDGHE7kLhleaX+UnN81A==
|
||||
dependencies:
|
||||
prop-types "^15.5.10"
|
||||
|
||||
read-pkg-up@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
|
||||
|
@ -8037,11 +7901,6 @@ stack-trace@0.0.10:
|
|||
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
|
||||
integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=
|
||||
|
||||
standalone-react-addons-pure-render-mixin@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/standalone-react-addons-pure-render-mixin/-/standalone-react-addons-pure-render-mixin-0.1.1.tgz#3c7409f4c79c40de9ac72c616cf679a994f37551"
|
||||
integrity sha1-PHQJ9MecQN6axyxhbPZ5qZTzdVE=
|
||||
|
||||
static-eval@2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.2.tgz#2d1759306b1befa688938454c546b7871f806a42"
|
||||
|
|
Loading…
Add table
Reference in a new issue