@sendgrid/client
Advanced tools
Comparing version 6.5.5 to 7.0.0
{ | ||
"name": "@sendgrid/client", | ||
"description": "Twilio SendGrid NodeJS API client", | ||
"version": "6.5.5", | ||
"version": "7.0.0", | ||
"author": "Twilio SendGrid <dx@sendgrid.com> (sendgrid.com)", | ||
@@ -30,5 +30,4 @@ "contributors": [ | ||
"dependencies": { | ||
"@sendgrid/helpers": "^6.5.5", | ||
"@types/request": "^2.48.4", | ||
"request": "^2.88.0" | ||
"@sendgrid/helpers": "^7.0.0", | ||
"axios": "^0.19.2" | ||
}, | ||
@@ -42,3 +41,3 @@ "tags": [ | ||
], | ||
"gitHead": "bc3e7371aa73af6c2b53128d6866837b0a60df65" | ||
"gitHead": "ae1148c025261fc831def208782a6e94e0c19138" | ||
} |
'use strict'; | ||
/** | ||
* Dependencies | ||
*/ | ||
const http = require('request'); | ||
const axios = require('axios'); | ||
const pkg = require('../../package.json'); | ||
@@ -13,2 +9,3 @@ const { | ||
classes: { | ||
Response, | ||
ResponseError, | ||
@@ -18,24 +15,15 @@ }, | ||
/** | ||
* Twilio SendGrid REST Client | ||
*/ | ||
const API_KEY_PREFIX = 'SG.'; | ||
class Client { | ||
/** | ||
* Constructor | ||
*/ | ||
constructor() { | ||
//API key | ||
this.apiKey = ''; | ||
//Default headers | ||
this.defaultHeaders = { | ||
'Accept': 'application/json', | ||
Accept: 'application/json', | ||
'Content-Type': 'application/json', | ||
'User-agent': 'sendgrid/' + pkg.version + ';nodejs', | ||
}; | ||
//Empty default request | ||
this.defaultRequest = { | ||
json: true, | ||
baseUrl: 'https://api.sendgrid.com/', | ||
@@ -48,12 +36,18 @@ url: '', | ||
/** | ||
* Set API key | ||
*/ | ||
setApiKey(apiKey) { | ||
this.apiKey = apiKey; | ||
if (!this.isValidApiKey(apiKey)) { | ||
console.warn(`API key does not start with "${API_KEY_PREFIX}".`); | ||
} | ||
} | ||
/** | ||
* Set default header | ||
*/ | ||
isValidApiKey(apiKey) { | ||
return this.isString(apiKey) && apiKey.trim().startsWith(API_KEY_PREFIX); | ||
} | ||
isString(value) { | ||
return typeof value === 'string' || value instanceof String; | ||
} | ||
setDefaultHeader(key, value) { | ||
@@ -64,5 +58,2 @@ this.defaultHeaders[key] = value; | ||
/** | ||
* Set default request | ||
*/ | ||
setDefaultRequest(key, value) { | ||
@@ -73,11 +64,7 @@ this.defaultRequest[key] = value; | ||
/** | ||
* Create headers for request | ||
*/ | ||
createHeaders(data) { | ||
//Merge data with default headers | ||
// Merge data with default headers. | ||
const headers = mergeData(this.defaultHeaders, data); | ||
//Add API key, but don't overwrite if header already set | ||
// Add API key, but don't overwrite if header already set. | ||
if (typeof headers.Authorization === 'undefined' && this.apiKey) { | ||
@@ -87,53 +74,46 @@ headers.Authorization = 'Bearer ' + this.apiKey; | ||
//Return | ||
return headers; | ||
} | ||
/** | ||
* Create request | ||
*/ | ||
createRequest(data) { | ||
let options = { | ||
url: data.uri || data.url, | ||
baseUrl: data.baseUrl, | ||
method: data.method, | ||
data: data.body, | ||
params: data.qs, | ||
headers: data.headers, | ||
}; | ||
//Keep URL parameter consistent | ||
if (data.uri) { | ||
data.url = data.uri; | ||
delete data.uri; | ||
} | ||
// Merge data with default request. | ||
options = mergeData(this.defaultRequest, options); | ||
options.headers = this.createHeaders(options.headers); | ||
options.baseURL = options.baseUrl; | ||
delete options.baseUrl; | ||
//Merge data with empty request | ||
const request = mergeData(this.defaultRequest, data); | ||
//Add headers | ||
request.headers = this.createHeaders(request.headers); | ||
return request; | ||
return options; | ||
} | ||
/** | ||
* Do a request | ||
*/ | ||
request(data, cb) { | ||
data = this.createRequest(data); | ||
//Create request | ||
const request = this.createRequest(data); | ||
//Perform request | ||
const promise = new Promise((resolve, reject) => { | ||
http(request, (error, response, body) => { | ||
//Request error | ||
if (error) { | ||
axios(data) | ||
.then(response => { | ||
return resolve([ | ||
new Response(response.status, response.data, response.headers), | ||
response.data, | ||
]); | ||
}) | ||
.catch(error => { | ||
if (error.response) { | ||
if (error.response.status >= 400) { | ||
return reject(new ResponseError(error.response)); | ||
} | ||
} | ||
return reject(error); | ||
} | ||
//Response error | ||
if (response.statusCode >= 400) { | ||
return reject(new ResponseError(response)); | ||
} | ||
//Successful response | ||
resolve([response, body]); | ||
}); | ||
}); | ||
}); | ||
// Throw and error incase function not passed | ||
// Throw an error in case a callback function was not passed. | ||
if (cb && typeof cb !== 'function') { | ||
@@ -143,3 +123,2 @@ throw new Error('Callback passed is not a function.'); | ||
//Execute callback if provided | ||
if (cb) { | ||
@@ -151,3 +130,2 @@ return promise | ||
//Return promise | ||
return promise; | ||
@@ -157,3 +135,2 @@ } | ||
//Export class | ||
module.exports = Client; |
@@ -6,2 +6,3 @@ import {ResponseError} from "@sendgrid/helpers/classes"; | ||
declare class Client { | ||
constructor(); | ||
/** | ||
@@ -8,0 +9,0 @@ * Set API key |
@@ -1,3 +0,3 @@ | ||
import {OptionsWithUrl} from "request"; | ||
import RequestOptions from "@sendgrid/helpers/classes/request"; | ||
export type ClientRequest = OptionsWithUrl; | ||
export type ClientRequest = RequestOptions; |
@@ -1,3 +0,3 @@ | ||
import {RequestResponse} from "request"; | ||
import Response from "@sendgrid/helpers/classes/response"; | ||
export type ClientResponse = RequestResponse; | ||
export type ClientResponse = Response; |
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
315286
2
2928
+ Addedaxios@^0.19.2
+ Added@sendgrid/helpers@7.7.0(transitive)
+ Addedaxios@0.19.2(transitive)
+ Addedfollow-redirects@1.5.10(transitive)
- Removed@types/request@^2.48.4
- Removedrequest@^2.88.0
- Removed@sendgrid/helpers@6.5.5(transitive)
- Removed@types/caseless@0.12.5(transitive)
- Removed@types/node@22.7.4(transitive)
- Removed@types/request@2.48.12(transitive)
- Removed@types/tough-cookie@4.0.5(transitive)
- Removedajv@6.12.6(transitive)
- Removedansi-styles@3.2.1(transitive)
- Removedasn1@0.2.6(transitive)
- Removedassert-plus@1.0.0(transitive)
- Removedasynckit@0.4.0(transitive)
- Removedaws-sign2@0.7.0(transitive)
- Removedaws4@1.13.2(transitive)
- Removedbcrypt-pbkdf@1.0.2(transitive)
- Removedcaseless@0.12.0(transitive)
- Removedchalk@2.4.2(transitive)
- Removedcolor-convert@1.9.3(transitive)
- Removedcolor-name@1.1.3(transitive)
- Removedcombined-stream@1.0.8(transitive)
- Removedcore-util-is@1.0.2(transitive)
- Removeddashdash@1.14.1(transitive)
- Removeddelayed-stream@1.0.0(transitive)
- Removedecc-jsbn@0.1.2(transitive)
- Removedescape-string-regexp@1.0.5(transitive)
- Removedextend@3.0.2(transitive)
- Removedextsprintf@1.3.0(transitive)
- Removedfast-deep-equal@3.1.3(transitive)
- Removedfast-json-stable-stringify@2.1.0(transitive)
- Removedforever-agent@0.6.1(transitive)
- Removedform-data@2.3.32.5.1(transitive)
- Removedgetpass@0.1.7(transitive)
- Removedhar-schema@2.0.0(transitive)
- Removedhar-validator@5.1.5(transitive)
- Removedhas-flag@3.0.0(transitive)
- Removedhttp-signature@1.2.0(transitive)
- Removedis-typedarray@1.0.0(transitive)
- Removedisstream@0.1.2(transitive)
- Removedjsbn@0.1.1(transitive)
- Removedjson-schema@0.4.0(transitive)
- Removedjson-schema-traverse@0.4.1(transitive)
- Removedjson-stringify-safe@5.0.1(transitive)
- Removedjsprim@1.4.2(transitive)
- Removedmime-db@1.52.0(transitive)
- Removedmime-types@2.1.35(transitive)
- Removedoauth-sign@0.9.0(transitive)
- Removedperformance-now@2.1.0(transitive)
- Removedpsl@1.9.0(transitive)
- Removedpunycode@2.3.1(transitive)
- Removedqs@6.5.3(transitive)
- Removedrequest@2.88.2(transitive)
- Removedsafe-buffer@5.2.1(transitive)
- Removedsafer-buffer@2.1.2(transitive)
- Removedsshpk@1.18.0(transitive)
- Removedsupports-color@5.5.0(transitive)
- Removedtough-cookie@2.5.0(transitive)
- Removedtunnel-agent@0.6.0(transitive)
- Removedtweetnacl@0.14.5(transitive)
- Removedundici-types@6.19.8(transitive)
- Removeduri-js@4.4.1(transitive)
- Removeduuid@3.4.0(transitive)
- Removedverror@1.10.0(transitive)
Updated@sendgrid/helpers@^7.0.0