auth.js000066400000003254151114560230006047 0ustar00 module.exports = (aliases) => { function find (alias, options) { var config = aliases[alias] var endpoints = config.endpoints if (!endpoints || (!endpoints.all && !endpoints.str && !endpoints.regex)) { return config.auth } var auth = {} var endpoint = options.url // all if (endpoints.all) { var __endpoint = endpoints.all.__endpoint if (__endpoint && __endpoint.auth) { auth = __endpoint.auth } } // string if (endpoints.str && endpoints.str[endpoint]) { var __endpoint = endpoints.str[endpoint].__endpoint if (__endpoint && __endpoint.auth) { auth = __endpoint.auth } } // regex if (endpoints.regex) { for (var key in endpoints.regex) { if (new RegExp(key).test(endpoint)) { var __endpoint = endpoints.regex[key].__endpoint if (__endpoint && __endpoint.auth) { auth = __endpoint.auth break } } } } return Object.keys(auth).length ? auth : config.auth } function replace (config, arg1, arg2) { if (config instanceof Array) { config = (arg1 !== undefined && arg2 !== undefined) ? config[1] : config[0] } var auth = {} Object.keys(config).forEach((key) => { auth[key] = {} Object.keys(config[key]).forEach((sub) => { var value = config[key][sub] if (value.indexOf('[0]') !== -1) { auth[key][sub] = value.replace('[0]', arg1) } else if (value.indexOf('[1]') !== -1) { auth[key][sub] = value.replace('[1]', arg2) } }) }) return auth } return {find, replace} } endpoint.js000066400000002747151114560230006734 0ustar00 var extend = require('extend') var _auth = require('./auth') module.exports = (aliases) => { var __auth = _auth(aliases) function options (alias, options) { var config = aliases[alias] var endpoints = config.endpoints if (!endpoints || (!endpoints.all && !endpoints.str && !endpoints.regex)) { return options } var result = {} var endpoint = options.url var method = options.method || '' function _extend (config) { if (config.all) { extend(true, result, config.all, options) } else { var obj = config[method.toLowerCase()] || config[method.toUpperCase()] if (obj) { extend(true, result, obj, options) } } } // all if (endpoints.all) { _extend(endpoints.all) } // string if (endpoints.str && endpoints.str[endpoint]) { _extend(endpoints.str[endpoint]) } // regex if (endpoints.regex) { for (var key in endpoints.regex) { if (new RegExp(key).test(endpoint)) { var config = endpoints.regex[key] if (config.all || config[method]) { _extend(config) break } } } } return Object.keys(result).length ? result : options } function auth (alias, options, arg1, arg2) { var config = __auth.find(alias, options) if (config) { var auth = __auth.replace(config, arg1, arg2) extend(true, options, auth) } } return {options, auth} } init.js000066400000004615151114560230006053 0ustar00 function initAlias (provider, domain, path) { var alias = {domain: domain, path: path} var __domain = provider[domain].__domain || {} var __path = provider[domain][path].__path || {} if (__domain.subdomain) { alias.subdomain = __domain.subdomain } if (__domain.auth) { alias.auth = __domain.auth } if (__path.subdomain) { alias.subdomain = __path.subdomain } if (__path.subpath) { alias.subpath = __path.subpath } if (__path.version) { alias.version = __path.version } if (__path.type) { alias.type = __path.type } if (__path.endpoint) { alias.endpoint = __path.endpoint } if (__path.auth) { alias.auth = __path.auth } return alias } function initEndpoints (provider, domain, path) { var result = {all: {}, str: {}, regex: {}} var endpoints = provider[domain][path] for (var key in endpoints) { if (key === '__path') { continue } if (key === '*') { result.all = endpoints[key] } else if (endpoints[key].__endpoint && endpoints[key].__endpoint.regex) { result.regex[key] = endpoints[key] } else { result.str[key] = endpoints[key] } } if (!Object.keys(result.all).length) { delete result.all } if (!Object.keys(result.str).length) { delete result.str } if (!Object.keys(result.regex).length) { delete result.regex } if (Object.keys(result).length) { return result } } function initAliases (provider) { var aliases = {} for (var domain in provider) { if (domain === '__provider') { continue } for (var path in provider[domain]) { if (path === '__domain') { continue } var __path = provider[domain][path].__path if (!__path) { throw new Error('Purest: __path key is required!') } if (!__path.alias) { throw new Error('Purest: __path.alias key is required!') } var alias = __path.alias alias = (alias instanceof Array) ? alias : [alias] alias.forEach((name) => { var result = initAlias(provider, domain, path) var endpoints = initEndpoints(provider, domain, path) if (endpoints) { result.endpoints = endpoints } aliases[name] = result }) } } if (Object.keys(aliases).length) { return aliases } } exports.alias = initAlias exports.endpoints = initEndpoints exports.aliases = initAliases url.js000066400000002145151114560230005706 0ustar00 module.exports = (ctor, aliases) => { function domain (alias, options) { var config = aliases[alias] var subdomain = (options.subdomain || ctor.subdomain || config.subdomain) return (subdomain !== undefined) ? config.domain.replace('[subdomain]', subdomain) : config.domain } function path (alias, options) { var config = aliases[alias] var path = config.path var value value = (options.subpath || ctor.subpath || config.subpath) if (value !== undefined) { path = path.replace('[subpath]', value) } value = (options.version || ctor.version || config.version) if (value !== undefined) { path = path.replace('[version]', value) } value = (options.type || ctor.type || config.type || 'json') path = path.replace('[type]', value) value = (options.url || config.endpoint || '') path = path.replace('{endpoint}', value) return path } function url (alias, options) { return [ domain(alias, options), path(alias, options) ].join('/') } url.domain = domain url.path = path return url }