Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

aws-amplify

Package Overview
Dependencies
Maintainers
8
Versions
2399
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

aws-amplify - npm Package Compare versions

Comparing version 0.2.11 to 0.2.12

lib/Common/OAuthHelper/FacebookOAuth.d.ts

9

lib/Analytics/Analytics.d.ts

@@ -10,2 +10,3 @@ import { AnalyticsProvider, EventAttributes, EventMetrics } from './types';

private _pluggables;
private _disabled;
/**

@@ -27,2 +28,10 @@ * Initialize Analtyics

/**
* stop sending events
*/
disable(): void;
/**
* start sending events
*/
enable(): void;
/**
* Record Session start

@@ -29,0 +38,0 @@ * @return - A promise which resolves if buffer doesn't overflow

@@ -71,2 +71,3 @@ "use strict";

this._pluggables = [];
this._disabled = false;
// default one

@@ -95,2 +96,5 @@ // events batch

this._config = conf;
if (conf['disabled']) {
this._disabled = true;
}
this._pluggables.map(function (pluggable) {

@@ -129,2 +133,14 @@ pluggable.configure(conf);

/**
* stop sending events
*/
AnalyticsClass.prototype.disable = function () {
this._disabled = true;
};
/**
* start sending events
*/
AnalyticsClass.prototype.enable = function () {
this._disabled = false;
};
/**
* Record Session start

@@ -240,2 +256,6 @@ * @return - A promise which resolves if buffer doesn't overflow

AnalyticsClass.prototype._putToBuffer = function (params) {
if (this._disabled) {
logger.debug('Analytics has been disabled');
return Promise.resolve();
}
if (this._buffer.length < BUFFER_SIZE) {

@@ -242,0 +262,0 @@ this._buffer.push(params);

8

lib/Analytics/index.js

@@ -20,2 +20,3 @@ "use strict";

var logger = new Common_1.ConsoleLogger('Analytics');
var startsessionRecorded = false;
var _instance = null;

@@ -80,2 +81,8 @@ if (!_instance) {

break;
case 'configured':
if (!startsessionRecorded) {
startsessionRecorded = true;
Common_1.Hub.dispatch('analytics', { eventType: 'session_start' }, 'Analytics');
}
break;
}

@@ -96,3 +103,2 @@ };

Common_1.Hub.listen('analytics', Analytics);
Common_1.Hub.dispatch('analytics', { eventType: 'session_start' }, 'Analytics');
//# sourceMappingURL=index.js.map

@@ -66,2 +66,3 @@ import { AnalyticsProvider } from '../types';

Address: any;
Attributes: any;
ChannelType: string;

@@ -80,2 +81,3 @@ Demographic: {

UserId: any;
UserAttributes: any;
};

@@ -82,0 +84,0 @@ };

9

lib/Analytics/Providers/AWSAnalyticsProvider.js

@@ -403,3 +403,3 @@ "use strict";

AWSAnalyticsProvider.prototype._endpointRequest = function () {
var _a = this._config, clientInfo = _a.clientInfo, credentials = _a.credentials, Address = _a.Address, RequestId = _a.RequestId, endpointId = _a.endpointId;
var _a = this._config, clientInfo = _a.clientInfo, credentials = _a.credentials, Address = _a.Address, RequestId = _a.RequestId, Attributes = _a.Attributes, UserAttributes = _a.UserAttributes, endpointId = _a.endpointId, UserId = _a.UserId;
var user_id = (credentials && credentials.authenticated) ? credentials.identityId : null;

@@ -409,4 +409,5 @@ var ChannelType = Address ? ((clientInfo.platform === 'android') ? 'GCM' : 'APNS') : undefined;

var OptOut = this._config.OptOut ? this._config.OptOut : undefined;
return {
var ret = {
Address: Address,
Attributes: Attributes,
ChannelType: ChannelType,

@@ -424,5 +425,7 @@ Demographic: {

User: {
UserId: credentials.identityId
UserId: UserId ? UserId : credentials.identityId,
UserAttributes: UserAttributes
}
};
return ret;
};

@@ -429,0 +432,0 @@ /**

@@ -1,2 +0,2 @@

import { AuthOptions } from './types';
import { AuthOptions, FederatedResponse } from './types';
/**

@@ -12,2 +12,4 @@ * Provide authentication steps

private user;
private _refreshHandlers;
private _gettingCredPromise;
/**

@@ -138,2 +140,3 @@ * Initialize Auth with AWS configurations

currentUserCredentials(): Promise<any>;
private _refreshFederatedToken(federatedInfo);
currentCredentials(): Promise<any>;

@@ -199,6 +202,7 @@ /**

* @param {String} provider - federation login provider
* @param {Object} response - response including access_token
* @param {FederatedResponse} response - response should have the access token
* and the expiration time (the universal time)
* @param {String} user - user info
*/
federatedSignIn(provider: any, response: any, user: any): Promise<any>;
federatedSignIn(provider: string, response: FederatedResponse, user: object): Promise<{}>;
/**

@@ -217,9 +221,11 @@ * Compact version of credentials

private attributesToObject(attributes);
private setCredentialsFromFederation(provider, token, user);
private pickupCredentials();
private setCredentialsFromAWS();
private setCredentialsForGuest();
private setCredentialsFromSession(session);
private _setCredentialsFromAWS();
private _setCredentialsForGuest();
private _setCredentialsFromSession(session);
private _setCredentialsFromFederation(params);
private _loadCredentials(credentials, source, authenticated, rawUser);
private keepAlive();
private createCognitoUser(username);
private _isExpired(credentials);
}

@@ -54,3 +54,3 @@ "use strict";

var logger = new Common_1.ConsoleLogger('AuthClass');
var CognitoIdentityCredentials = Common_1.AWS.CognitoIdentityCredentials;
var CognitoIdentityCredentials = Common_1.AWS.CognitoIdentityCredentials, Credentials = Common_1.AWS.Credentials;
var CookieStorage = Common_1.Cognito.CookieStorage, CognitoUserPool = Common_1.Cognito.CognitoUserPool, CognitoUserAttribute = Common_1.Cognito.CognitoUserAttribute, CognitoUser = Common_1.Cognito.CognitoUser, AuthenticationDetails = Common_1.Cognito.AuthenticationDetails;

@@ -73,3 +73,8 @@ var dispatchAuthEvent = function (event, data) {

this.user = null;
this._refreshHandlers = {};
this._gettingCredPromise = null;
this.configure(config);
// refresh token
this._refreshHandlers['google'] = Common_1.GoogleOAuth.refreshGoogleToken;
this._refreshHandlers['facebook'] = Common_1.FacebookOAuth.refreshFacebookToken;
if (Common_1.AWS.config) {

@@ -122,6 +127,4 @@ Common_1.AWS.config.update({ customUserAgent: Common_1.Constants.userAgent });

}
else {
this.pickupCredentials();
}
}
dispatchAuthEvent('configured', null);
return this._config;

@@ -272,6 +275,10 @@ };

logger.debug(session);
that.setCredentialsFromSession(session);
that.user = user;
dispatchAuthEvent('signIn', user);
resolve(user);
that._setCredentialsFromSession(session).then(function (cred) {
that.user = user;
dispatchAuthEvent('signIn', user);
resolve(user);
}).catch(function (e) {
logger.debug('cannot get cognito credentials');
reject('signin failed');
});
},

@@ -501,6 +508,10 @@ onFailure: function (err) {

logger.debug(session);
that.setCredentialsFromSession(session);
that.user = user;
dispatchAuthEvent('signIn', user);
resolve(user);
that._setCredentialsFromSession(session).then(function (cred) {
that.user = user;
dispatchAuthEvent('signIn', user);
resolve(user);
}).catch(function (e) {
logger.debug('cannot get cognito credentials');
reject('signin failed');
});
},

@@ -523,6 +534,10 @@ onFailure: function (err) {

logger.debug(session);
that.setCredentialsFromSession(session);
that.user = user;
dispatchAuthEvent('signIn', user);
resolve(user);
that._setCredentialsFromSession(session).then(function (cred) {
that.user = user;
dispatchAuthEvent('signIn', user);
resolve(user);
}).catch(function (e) {
logger.debug('cannot get cognito credentials');
reject('signin failed');
});
},

@@ -687,11 +702,41 @@ onFailure: function (err) {

AuthClass.prototype.currentAuthenticatedUser = function () {
var source = this.credentials_source;
logger.debug('get current authenticated user. source ' + source);
if (!source || source === 'aws' || source === 'userPool') {
return this.currentUserPoolUser();
}
if (source === 'federated') {
return Promise.resolve(this.user);
}
return Promise.reject('not authenticated');
return __awaiter(this, void 0, void 0, function () {
var federatedUser, e_1, _a, e_2;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
federatedUser = null;
_b.label = 1;
case 1:
_b.trys.push([1, 3, , 4]);
return [4 /*yield*/, Cache_1.default.getItem('federatedUser')];
case 2:
federatedUser = _b.sent();
return [3 /*break*/, 4];
case 3:
e_1 = _b.sent();
logger.debug('cannot load federated user from cache');
return [3 /*break*/, 4];
case 4:
if (!federatedUser) return [3 /*break*/, 5];
this.user = federatedUser;
logger.debug('get current authenticated federated user', this.user);
return [2 /*return*/, this.user];
case 5:
logger.debug('get current authenticated userpool user');
_b.label = 6;
case 6:
_b.trys.push([6, 8, , 9]);
_a = this;
return [4 /*yield*/, this.currentUserPoolUser()];
case 7:
_a.user = _b.sent();
return [2 /*return*/, this.user];
case 8:
e_2 = _b.sent();
return [2 /*return*/, Promise.reject('not authenticated')];
case 9: return [2 /*return*/];
}
});
});
};

@@ -705,2 +750,3 @@ /**

var that = this;
logger.debug('getting current session');
if (!this.userPool) {

@@ -749,23 +795,22 @@ return Promise.reject('No userPool');

var _this = this;
var that = this;
logger.debug('getting current user credentials');
if (Platform_1.default.isReactNative) {
// asyncstorage
var that_1 = this;
return Cache_1.default.getItem('federatedInfo')
.then(function (federatedInfo) {
if (federatedInfo) {
var provider_1 = federatedInfo.provider, token_1 = federatedInfo.token, user_1 = federatedInfo.user;
return new Promise(function (resolve, reject) {
that_1.setCredentialsFromFederation(provider_1, token_1, user_1);
resolve();
});
// refresh the jwt token here if necessary
return that._refreshFederatedToken(federatedInfo);
}
else {
return that_1.currentSession()
.then(function (session) { return that_1.setCredentialsFromSession(session); })
.catch(function (error) { return that_1.setCredentialsForGuest(); });
return that.currentSession()
.then(function (session) {
return that._setCredentialsFromSession(session);
}).catch(function (error) {
return that._setCredentialsForGuest();
});
}
}).catch(function (error) {
return new Promise(function (resolve, reject) {
reject(error);
});
return Promise.reject(error);
});

@@ -777,15 +822,47 @@ }

if (federatedInfo) {
var provider_2 = federatedInfo.provider, token_2 = federatedInfo.token, user_2 = federatedInfo.user;
return new Promise(function (resolve, reject) {
_this.setCredentialsFromFederation(provider_2, token_2, user_2);
resolve();
});
// refresh the jwt token here if necessary
return this._refreshFederatedToken(federatedInfo);
}
else {
return this.currentSession()
.then(function (session) { return _this.setCredentialsFromSession(session); })
.catch(function (error) { return _this.setCredentialsForGuest(); });
.then(function (session) {
logger.debug('getting session success', session);
return _this._setCredentialsFromSession(session);
}).catch(function (error) {
logger.debug('getting session failed', error);
return _this._setCredentialsForGuest();
});
}
}
};
AuthClass.prototype._refreshFederatedToken = function (federatedInfo) {
var provider = federatedInfo.provider, user = federatedInfo.user;
var token = federatedInfo.token;
var expires_at = federatedInfo.expires_at;
var that = this;
logger.debug('checking if federated jwt token expired');
if (expires_at < new Date().getTime()
&& typeof that._refreshHandlers[provider] === 'function') {
logger.debug('getting refreshed jwt token from federation provider');
return that._refreshHandlers[provider]().then(function (data) {
logger.debug('refresh federated token sucessfully', data);
token = data.token;
expires_at = data.expires_at;
// Cache.setItem('federatedInfo', { provider, token, user, expires_at }, { priority: 1 });
return that._setCredentialsFromFederation({ provider: provider, token: token, user: user, expires_at: expires_at });
}).catch(function (e) {
logger.debug('refresh federated token failed', e);
return Promise.reject(e);
});
}
else {
if (!that._refreshHandlers[provider]) {
logger.debug('no refresh hanlder for provider:', provider);
}
else {
logger.debug('token not expired');
}
return this._setCredentialsFromFederation({ provider: provider, token: token, user: user, expires_at: expires_at });
}
};
AuthClass.prototype.currentCredentials = function () {

@@ -849,6 +926,6 @@ return this.pickupCredentials();

var _this = this;
var source, user;
var source, user, that;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.currentUserCredentials()];
case 0: return [4 /*yield*/, this.currentCredentials()];
case 1:

@@ -861,2 +938,3 @@ _a.sent();

Cache_1.default.removeItem('federatedInfo');
Cache_1.default.removeItem('federatedUser');
if (source === 'aws' || source === 'userPool') {

@@ -870,9 +948,14 @@ if (!this.userPool) {

}
logger.debug('user sign out', user);
user.signOut();
}
that = this;
return [2 /*return*/, new Promise(function (resolve, reject) {
_this.setCredentialsForGuest();
dispatchAuthEvent('signOut', _this.user);
_this.user = null;
resolve();
that._setCredentialsForGuest().then(function (cred) {
dispatchAuthEvent('signOut', _this.user);
that.user = null;
resolve();
}).catch(function (e) {
reject('cannot get guest credentials');
});
})];

@@ -1010,13 +1093,21 @@ }

* @param {String} provider - federation login provider
* @param {Object} response - response including access_token
* @param {FederatedResponse} response - response should have the access token
* and the expiration time (the universal time)
* @param {String} user - user info
*/
AuthClass.prototype.federatedSignIn = function (provider, response, user) {
var _this = this;
var token = response.token, expires_at = response.expires_at;
this.setCredentialsFromFederation(provider, token, user);
// store it into localstorage
Cache_1.default.setItem('federatedInfo', { provider: provider, token: token, user: user }, { priority: 1 });
dispatchAuthEvent('signIn', this.user);
logger.debug('federated sign in credentials', this.credentials);
return this.keepAlive();
// Cache.setItem('federatedInfo', { provider, token, user, expires_at }, { priority: 1 });
var that = this;
return new Promise(function (res, rej) {
that._setCredentialsFromFederation({ provider: provider, token: token, user: user, expires_at: expires_at }).then(function (cred) {
dispatchAuthEvent('signIn', that.user);
logger.debug('federated sign in credentials', _this.credentials);
res(cred);
}).catch(function (e) {
rej(e);
});
});
};

@@ -1056,66 +1147,35 @@ /**

};
AuthClass.prototype.setCredentialsFromFederation = function (provider, token, user) {
var domains = {
'google': 'accounts.google.com',
'facebook': 'graph.facebook.com',
'amazon': 'www.amazon.com',
'developer': 'cognito-identity.amazonaws.com'
};
var domain = domains[provider];
if (!domain) {
return Promise.reject(provider + ' is not supported: [google, facebook, amazon, developer]');
AuthClass.prototype.pickupCredentials = function () {
logger.debug('picking up credentials');
if (!this._gettingCredPromise || !this._gettingCredPromise.isPending()) {
logger.debug('getting new cred promise');
if (Common_1.AWS.config && Common_1.AWS.config.credentials && Common_1.AWS.config.credentials instanceof Credentials) {
this._gettingCredPromise = Common_1.JS.makeQuerablePromise(this._setCredentialsFromAWS());
}
else {
this._gettingCredPromise = Common_1.JS.makeQuerablePromise(this.keepAlive());
}
}
var logins = {};
logins[domain] = token;
var _a = this._config, identityPoolId = _a.identityPoolId, region = _a.region;
this.credentials = new Common_1.AWS.CognitoIdentityCredentials({
IdentityPoolId: identityPoolId,
Logins: logins
}, {
region: region
});
this.credentials.authenticated = true;
this.credentials_source = 'federated';
this.user = Object.assign({ id: this.credentials.identityId }, user);
if (Common_1.AWS && Common_1.AWS.config) {
Common_1.AWS.config.credentials = this.credentials;
else {
logger.debug('getting old cred promise');
}
return this._gettingCredPromise;
};
AuthClass.prototype.pickupCredentials = function () {
AuthClass.prototype._setCredentialsFromAWS = function () {
var credentials = Common_1.AWS.config.credentials;
logger.debug('setting credentials from aws');
var that = this;
if (this.credentials) {
return this.keepAlive();
if (credentials instanceof Credentials) {
return this._loadCredentials(credentials, 'aws', undefined, null);
}
else if (this.setCredentialsFromAWS()) {
return this.keepAlive();
}
else {
return this.currentUserCredentials()
.then(function () {
if (that.credentials_source === 'no credentials') {
return Promise.resolve(null);
}
return that.keepAlive();
})
.catch(function (err) {
logger.debug('error when pickup', err);
that.setCredentialsForGuest();
return that.keepAlive();
});
logger.debug('AWS.config.credentials is not an instance of AWS Credentials');
return Promise.reject('AWS.config.credentials is not an instance of AWS Credentials');
}
};
AuthClass.prototype.setCredentialsFromAWS = function () {
if (Common_1.AWS.config && Common_1.AWS.config.credentials) {
this.credentials = Common_1.AWS.config.credentials;
this.credentials_source = 'aws';
return true;
}
return false;
};
AuthClass.prototype.setCredentialsForGuest = function () {
AuthClass.prototype._setCredentialsForGuest = function () {
logger.debug('setting credentials for guest');
var _a = this._config, identityPoolId = _a.identityPoolId, region = _a.region, mandatorySignIn = _a.mandatorySignIn;
if (mandatorySignIn) {
this.credentials = null;
this.credentials_source = 'no credentials';
return;
return Promise.reject('cannot get guest credentials when mandatory signin enabled');
}

@@ -1127,8 +1187,6 @@ var credentials = new CognitoIdentityCredentials({

});
credentials.params['IdentityId'] = null; // Cognito load IdentityId from local cache
this.credentials = credentials;
this.credentials.authenticated = false;
this.credentials_source = 'guest';
var that = this;
return this._loadCredentials(credentials, 'guest', false, null);
};
AuthClass.prototype.setCredentialsFromSession = function (session) {
AuthClass.prototype._setCredentialsFromSession = function (session) {
logger.debug('set credentials from session');

@@ -1140,3 +1198,3 @@ var idToken = session.getIdToken().getJwtToken();

logins[key] = idToken;
this.credentials = new CognitoIdentityCredentials({
var credentials = new CognitoIdentityCredentials({
IdentityPoolId: identityPoolId,

@@ -1147,35 +1205,57 @@ Logins: logins

});
this.credentials.authenticated = true;
this.credentials_source = 'userPool';
var that = this;
return this._loadCredentials(credentials, 'userPool', true, null);
};
AuthClass.prototype.keepAlive = function () {
if (!this.credentials) {
this.setCredentialsForGuest();
AuthClass.prototype._setCredentialsFromFederation = function (params) {
var provider = params.provider, token = params.token, user = params.user, expires_at = params.expires_at;
var domains = {
'google': 'accounts.google.com',
'facebook': 'graph.facebook.com',
'amazon': 'www.amazon.com',
'developer': 'cognito-identity.amazonaws.com'
};
var domain = domains[provider];
if (!domain) {
return Promise.reject(provider + ' is not supported: [google, facebook, amazon, developer]');
}
var ts = new Date().getTime();
var delta = 10 * 60 * 1000; // 10 minutes
var credentials = this.credentials;
var expired = credentials.expired, expireTime = credentials.expireTime;
if (!expired && expireTime > ts + delta) {
return Promise.resolve(credentials);
}
var logins = {};
logins[domain] = token;
var _a = this._config, identityPoolId = _a.identityPoolId, region = _a.region;
var credentials = new Common_1.AWS.CognitoIdentityCredentials({
IdentityPoolId: identityPoolId,
Logins: logins
}, {
region: region
});
Cache_1.default.setItem('federatedInfo', { provider: provider, token: token, user: user, expires_at: expires_at }, { priority: 1 });
return this._loadCredentials(credentials, 'federated', true, user);
};
AuthClass.prototype._loadCredentials = function (credentials, source, authenticated, rawUser) {
var _this = this;
var that = this;
return new Promise(function (resolve, reject) {
that.currentUserCredentials()
.then(function () {
credentials = that.credentials;
credentials.refresh(function (err) {
logger.debug('changed from previous');
if (err) {
logger.debug('refresh credentials error', err);
resolve(null);
}
else {
resolve(credentials);
}
});
})
.catch(function () { return resolve(null); });
return new Promise(function (res, rej) {
credentials.getPromise().then(function () {
logger.debug('Load credentials successfully', credentials);
that.credentials = credentials;
that.credentials.authenticated = authenticated;
that.credentials_source = source;
if (source === 'federated') {
that.user = Object.assign({ id: _this.credentials.identityId }, rawUser);
Cache_1.default.setItem('federatedUser', that.user, { priority: 1 });
}
res(that.credentials);
}, function (err) {
logger.debug('Failed to load credentials', credentials);
rej('Failed to load creadentials');
});
});
};
AuthClass.prototype.keepAlive = function () {
var cred = this.credentials;
if (cred && !this._isExpired(cred)) {
logger.debug('not changed, directly return credentials');
return Promise.resolve(cred);
}
return this.currentUserCredentials();
};
AuthClass.prototype.createCognitoUser = function (username) {

@@ -1192,2 +1272,16 @@ var userData = {

};
AuthClass.prototype._isExpired = function (credentials) {
if (!credentials) {
logger.debug('no credentials for expiration check');
return true;
}
logger.debug('is this credentials expired?', credentials);
var ts = new Date().getTime();
var delta = 10 * 60 * 1000; // 10 minutes
var expired = credentials.expired, expireTime = credentials.expireTime;
if (!expired && expireTime > ts + delta) {
return false;
}
return true;
};
return AuthClass;

@@ -1194,0 +1288,0 @@ }());

@@ -28,1 +28,8 @@ import { ICookieStorageData } from "amazon-cognito-identity-js";

}
/**
* interface for federatedResponse
*/
export interface FederatedResponse {
token: string;
expires_at: number;
}

@@ -9,2 +9,3 @@ export * from './Facet';

export { default as Parser } from './Parser';
export { FacebookOAuth, GoogleOAuth } from './OAuthHelper';
export * from './RNComponents';

@@ -11,0 +12,0 @@ export declare const Constants: {

@@ -33,2 +33,5 @@ "use strict";

exports.Parser = Parser_1.default;
var OAuthHelper_1 = require("./OAuthHelper");
exports.FacebookOAuth = OAuthHelper_1.FacebookOAuth;
exports.GoogleOAuth = OAuthHelper_1.GoogleOAuth;
__export(require("./RNComponents"));

@@ -35,0 +38,0 @@ var Platform_1 = require("./Platform");

@@ -11,2 +11,3 @@ export default class JS {

static generateRandomString(): string;
static makeQuerablePromise(promise: any): any;
}

@@ -119,2 +119,22 @@ "use strict";

};
JS.makeQuerablePromise = function (promise) {
if (promise.isResolved)
return promise;
var isPending = true;
var isRejected = false;
var isFullfilled = false;
var result = promise.then(function (data) {
isFullfilled = true;
isPending = false;
return data;
}, function (e) {
isRejected = true;
isPending = false;
throw e;
});
result.isFullfilled = function () { return isFullfilled; };
result.isPending = function () { return isPending; };
result.isRejected = function () { return isRejected; };
return result;
};
return JS;

@@ -121,0 +141,0 @@ }());

{
"name": "aws-amplify",
"version": "0.2.11",
"version": "0.2.12",
"description": "AWS Amplify is a JavaScript library for Frontend and mobile developers building cloud-enabled applications.",

@@ -83,3 +83,3 @@ "main": "./lib/index.js",

"global": {
"branches": 74.8,
"branches": 74,
"functions": 80,

@@ -86,0 +86,0 @@ "lines": 80,

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc