var _ = require('./utility'); function buildPayload(accessToken, data, jsonBackup) { if (!_.isType(data.context, 'string')) { var contextResult = _.stringify(data.context, jsonBackup); if (contextResult.error) { data.context = 'Error: could not serialize \'context\''; } else { data.context = contextResult.value || ''; } if (data.context.length > 255) { data.context = data.context.substr(0, 255); } } return { access_token: accessToken, data: data }; } function getTransportFromOptions(options, defaults, url) { var hostname = defaults.hostname; var protocol = defaults.protocol; var port = defaults.port; var path = defaults.path; var search = defaults.search; var timeout = options.timeout; var transport = detectTransport(options) var proxy = options.proxy; if (options.endpoint) { var opts = url.parse(options.endpoint); hostname = opts.hostname; protocol = opts.protocol; port = opts.port; path = opts.pathname; search = opts.search; } return { timeout: timeout, hostname: hostname, protocol: protocol, port: port, path: path, search: search, proxy: proxy, transport: transport }; } function detectTransport(options) { var gWindow = ((typeof window != 'undefined') && window) || ((typeof self != 'undefined') && self); var transport = options.defaultTransport || 'xhr'; if (typeof gWindow.fetch === 'undefined') transport = 'xhr'; if (typeof gWindow.XMLHttpRequest === 'undefined') transport = 'fetch'; return transport; } function transportOptions(transport, method) { var protocol = transport.protocol || 'https:'; var port = transport.port || (protocol === 'http:' ? 80 : protocol === 'https:' ? 443 : undefined); var hostname = transport.hostname; var path = transport.path; var timeout = transport.timeout; var transportAPI = transport.transport; if (transport.search) { path = path + transport.search; } if (transport.proxy) { path = protocol + '//' + hostname + path; hostname = transport.proxy.host || transport.proxy.hostname; port = transport.proxy.port; protocol = transport.proxy.protocol || protocol; } return { timeout: timeout, protocol: protocol, hostname: hostname, path: path, port: port, method: method, transport: transportAPI }; } function appendPathToPath(base, path) { var baseTrailingSlash = /\/$/.test(base); var pathBeginningSlash = /^\//.test(path); if (baseTrailingSlash && pathBeginningSlash) { path = path.substring(1); } else if (!baseTrailingSlash && !pathBeginningSlash) { path = '/' + path; } return base + path; } module.exports = { buildPayload: buildPayload, getTransportFromOptions: getTransportFromOptions, transportOptions: transportOptions, appendPathToPath: appendPathToPath };