Socket
Socket
Sign inDemoInstall

@firebase/messaging

Package Overview
Dependencies
Maintainers
3
Versions
3277
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@firebase/messaging - npm Package Compare versions

Comparing version 0.2.2-canary.df183a5 to 0.2.2-canary.faa54d8

11

dist/cjs/src/controllers/controller-interface.d.ts

@@ -31,6 +31,6 @@ import TokenDetailsModel from '../models/token-details-model';

*/
private manageExistingToken(tokenDetails, swReg);
private manageExistingToken(swReg, pushSubscription, publicVapidKey, tokenDetails);
private isTokenStillValid(tokenDetails);
private updateToken(tokenDetails, swReg);
private getNewToken(swReg);
private updateToken(swReg, pushSubscription, publicVapidKey, tokenDetails);
private getNewToken(swReg, pushSubscription, publicVapidKey);
/**

@@ -47,4 +47,7 @@ * This method deletes tokens that the token manager looks after,

requestPermission(): void;
getPushSubscription_(registration: any, publicVapidKey: any): Promise<PushSubscription>;
/**
* Gets a PushSubscription for the current user.
*/
getPushSubscription(swRegistration: ServiceWorkerRegistration, publicVapidKey: Uint8Array): Promise<PushSubscription>;
/**
* @export

@@ -51,0 +54,0 @@ * @param {!ServiceWorkerRegistration} registration

@@ -18,2 +18,3 @@ /**

Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var util_1 = require("@firebase/util");

@@ -53,23 +54,33 @@ var errors_1 = require("../models/errors");

ControllerInterface.prototype.getToken = function () {
var _this = this;
// Check with permissions
var currentPermission = this.getNotificationPermission_();
if (currentPermission !== notification_permission_1.default.granted) {
if (currentPermission === notification_permission_1.default.denied) {
return Promise.reject(this.errorFactory_.create(errors_1.default.codes.NOTIFICATIONS_BLOCKED));
}
// We must wait for permission to be granted
return Promise.resolve(null);
}
var swReg;
return this.getSWRegistration_()
.then(function (reg) {
swReg = reg;
return _this.tokenDetailsModel_.getTokenDetailsFromSWScope(swReg.scope);
})
.then(function (tokenDetails) {
if (tokenDetails) {
return _this.manageExistingToken(tokenDetails, swReg);
}
return _this.getNewToken(swReg);
return tslib_1.__awaiter(this, void 0, void 0, function () {
var currentPermission, swReg, publicVapidKey, pushSubscription, tokenDetails;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
currentPermission = this.getNotificationPermission_();
if (currentPermission !== notification_permission_1.default.granted) {
if (currentPermission === notification_permission_1.default.denied) {
return [2 /*return*/, Promise.reject(this.errorFactory_.create(errors_1.default.codes.NOTIFICATIONS_BLOCKED))];
}
// We must wait for permission to be granted
return [2 /*return*/, Promise.resolve(null)];
}
return [4 /*yield*/, this.getSWRegistration_()];
case 1:
swReg = _a.sent();
return [4 /*yield*/, this.getPublicVapidKey_()];
case 2:
publicVapidKey = _a.sent();
return [4 /*yield*/, this.getPushSubscription(swReg, publicVapidKey)];
case 3:
pushSubscription = _a.sent();
return [4 /*yield*/, this.tokenDetailsModel_.getTokenDetailsFromSWScope(swReg.scope)];
case 4:
tokenDetails = _a.sent();
if (tokenDetails) {
return [2 /*return*/, this.manageExistingToken(swReg, pushSubscription, publicVapidKey, tokenDetails)];
}
return [2 /*return*/, this.getNewToken(swReg, pushSubscription, publicVapidKey)];
}
});
});

@@ -86,21 +97,29 @@ };

*/
ControllerInterface.prototype.manageExistingToken = function (tokenDetails, swReg) {
var _this = this;
return this.isTokenStillValid(tokenDetails).then(function (isValid) {
if (isValid) {
var now = Date.now();
if (now < tokenDetails['createTime'] + exports.TOKEN_EXPIRATION_MILLIS) {
return tokenDetails['fcmToken'];
ControllerInterface.prototype.manageExistingToken = function (swReg, pushSubscription, publicVapidKey, tokenDetails) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var isTokenValid, now;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.isTokenStillValid(tokenDetails)];
case 1:
isTokenValid = _a.sent();
if (isTokenValid) {
now = Date.now();
if (now < tokenDetails['createTime'] + exports.TOKEN_EXPIRATION_MILLIS) {
return [2 /*return*/, tokenDetails['fcmToken']];
}
else {
return [2 /*return*/, this.updateToken(swReg, pushSubscription, publicVapidKey, tokenDetails)];
}
}
// If the token is no longer valid (for example if the VAPID details
// have changed), delete the existing token, and create a new one.
return [4 /*yield*/, this.deleteToken(tokenDetails['fcmToken'])];
case 2:
// If the token is no longer valid (for example if the VAPID details
// have changed), delete the existing token, and create a new one.
_a.sent();
return [2 /*return*/, this.getNewToken(swReg, pushSubscription, publicVapidKey)];
}
else {
return _this.updateToken(tokenDetails, swReg);
}
}
else {
// If the VAPID details are updated, delete the existing token,
// and create a new one.
return _this.deleteToken(tokenDetails['fcmToken']).then(function () {
return _this.getNewToken(swReg);
});
}
});
});

@@ -120,71 +139,63 @@ };

};
ControllerInterface.prototype.updateToken = function (tokenDetails, swReg) {
var _this = this;
var publicVapidKey;
var updatedToken;
var subscription;
return this.getPublicVapidKey_()
.then(function (publicKey) {
publicVapidKey = publicKey;
return _this.getPushSubscription_(swReg, publicVapidKey);
})
.then(function (pushSubscription) {
subscription = pushSubscription;
return _this.iidModel_.updateToken(_this.messagingSenderId_, tokenDetails['fcmToken'], tokenDetails['fcmPushSet'], subscription, publicVapidKey);
})
.catch(function (err) {
return _this.deleteToken(tokenDetails['fcmToken']).then(function () {
throw err;
ControllerInterface.prototype.updateToken = function (swReg, pushSubscription, publicVapidKey, tokenDetails) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var updatedToken, allDetails, e_1;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 4, , 6]);
return [4 /*yield*/, this.iidModel_.updateToken(this.messagingSenderId_, tokenDetails['fcmToken'], tokenDetails['fcmPushSet'], pushSubscription, publicVapidKey)];
case 1:
updatedToken = _a.sent();
allDetails = {
swScope: swReg.scope,
vapidKey: publicVapidKey,
subscription: pushSubscription,
fcmSenderId: this.messagingSenderId_,
fcmToken: updatedToken,
fcmPushSet: tokenDetails['fcmPushSet']
};
return [4 /*yield*/, this.tokenDetailsModel_.saveTokenDetails(allDetails)];
case 2:
_a.sent();
return [4 /*yield*/, this.vapidDetailsModel_.saveVapidDetails(swReg.scope, publicVapidKey)];
case 3:
_a.sent();
return [2 /*return*/, updatedToken];
case 4:
e_1 = _a.sent();
return [4 /*yield*/, this.deleteToken(tokenDetails['fcmToken'])];
case 5:
_a.sent();
throw e_1;
case 6: return [2 /*return*/];
}
});
})
.then(function (token) {
updatedToken = token;
var allDetails = {
swScope: swReg.scope,
vapidKey: publicVapidKey,
subscription: subscription,
fcmSenderId: _this.messagingSenderId_,
fcmToken: updatedToken,
fcmPushSet: tokenDetails['fcmPushSet']
};
return _this.tokenDetailsModel_.saveTokenDetails(allDetails);
})
.then(function () {
return _this.vapidDetailsModel_.saveVapidDetails(swReg.scope, publicVapidKey);
})
.then(function () {
return updatedToken;
});
};
ControllerInterface.prototype.getNewToken = function (swReg) {
var _this = this;
var publicVapidKey;
var subscription;
var tokenDetails;
return this.getPublicVapidKey_()
.then(function (publicKey) {
publicVapidKey = publicKey;
return _this.getPushSubscription_(swReg, publicVapidKey);
})
.then(function (pushSubscription) {
subscription = pushSubscription;
return _this.iidModel_.getToken(_this.messagingSenderId_, subscription, publicVapidKey);
})
.then(function (iidTokenDetails) {
tokenDetails = iidTokenDetails;
var allDetails = {
swScope: swReg.scope,
vapidKey: publicVapidKey,
subscription: subscription,
fcmSenderId: _this.messagingSenderId_,
fcmToken: tokenDetails['token'],
fcmPushSet: tokenDetails['pushSet']
};
return _this.tokenDetailsModel_.saveTokenDetails(allDetails);
})
.then(function () {
return _this.vapidDetailsModel_.saveVapidDetails(swReg.scope, publicVapidKey);
})
.then(function () {
return tokenDetails['token'];
ControllerInterface.prototype.getNewToken = function (swReg, pushSubscription, publicVapidKey) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var tokenDetails, allDetails;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.iidModel_.getToken(this.messagingSenderId_, pushSubscription, publicVapidKey)];
case 1:
tokenDetails = _a.sent();
allDetails = {
swScope: swReg.scope,
vapidKey: publicVapidKey,
subscription: pushSubscription,
fcmSenderId: this.messagingSenderId_,
fcmToken: tokenDetails['token'],
fcmPushSet: tokenDetails['pushSet']
};
return [4 /*yield*/, this.tokenDetailsModel_.saveTokenDetails(allDetails)];
case 2:
_a.sent();
return [4 /*yield*/, this.vapidDetailsModel_.saveVapidDetails(swReg.scope, publicVapidKey)];
case 3:
_a.sent();
return [2 /*return*/, tokenDetails['token']];
}
});
});

@@ -232,4 +243,15 @@ };

};
ControllerInterface.prototype.getPushSubscription_ = function (registration, publicVapidKey) {
throw this.errorFactory_.create(errors_1.default.codes.AVAILABLE_IN_WINDOW);
/**
* Gets a PushSubscription for the current user.
*/
ControllerInterface.prototype.getPushSubscription = function (swRegistration, publicVapidKey) {
return swRegistration.pushManager.getSubscription().then(function (subscription) {
if (subscription) {
return subscription;
}
return swRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: publicVapidKey
});
});
};

@@ -236,0 +258,0 @@ /**

@@ -102,9 +102,2 @@ import { FirebaseMessaging } from '@firebase/messaging-types';

/**
* Gets a PushSubscription for the current user.
* @private
* @param {ServiceWorkerRegistration} registration
* @return {Promise<PushSubscription>}
*/
getPushSubscription_(swRegistration: any, publicVapidKey: any): any;
/**
* This method will set up a message listener to handle

@@ -111,0 +104,0 @@ * events from the service worker that should trigger

@@ -322,22 +322,2 @@ /**

/**
* Gets a PushSubscription for the current user.
* @private
* @param {ServiceWorkerRegistration} registration
* @return {Promise<PushSubscription>}
*/
WindowController.prototype.getPushSubscription_ = function (swRegistration, publicVapidKey) {
// Check for existing subscription first
var subscription;
var fcmTokenDetails;
return swRegistration.pushManager.getSubscription().then(function (subscription) {
if (subscription) {
return subscription;
}
return swRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: publicVapidKey
});
});
};
/**
* This method will set up a message listener to handle

@@ -344,0 +324,0 @@ * events from the service worker that should trigger

@@ -31,6 +31,6 @@ import TokenDetailsModel from '../models/token-details-model';

*/
private manageExistingToken(tokenDetails, swReg);
private manageExistingToken(swReg, pushSubscription, publicVapidKey, tokenDetails);
private isTokenStillValid(tokenDetails);
private updateToken(tokenDetails, swReg);
private getNewToken(swReg);
private updateToken(swReg, pushSubscription, publicVapidKey, tokenDetails);
private getNewToken(swReg, pushSubscription, publicVapidKey);
/**

@@ -47,4 +47,7 @@ * This method deletes tokens that the token manager looks after,

requestPermission(): void;
getPushSubscription_(registration: any, publicVapidKey: any): Promise<PushSubscription>;
/**
* Gets a PushSubscription for the current user.
*/
getPushSubscription(swRegistration: ServiceWorkerRegistration, publicVapidKey: Uint8Array): Promise<PushSubscription>;
/**
* @export

@@ -51,0 +54,0 @@ * @param {!ServiceWorkerRegistration} registration

@@ -17,2 +17,3 @@ /**

'use strict';
import * as tslib_1 from "tslib";
import { ErrorFactory } from '@firebase/util';

@@ -52,23 +53,33 @@ import Errors from '../models/errors';

ControllerInterface.prototype.getToken = function () {
var _this = this;
// Check with permissions
var currentPermission = this.getNotificationPermission_();
if (currentPermission !== NOTIFICATION_PERMISSION.granted) {
if (currentPermission === NOTIFICATION_PERMISSION.denied) {
return Promise.reject(this.errorFactory_.create(Errors.codes.NOTIFICATIONS_BLOCKED));
}
// We must wait for permission to be granted
return Promise.resolve(null);
}
var swReg;
return this.getSWRegistration_()
.then(function (reg) {
swReg = reg;
return _this.tokenDetailsModel_.getTokenDetailsFromSWScope(swReg.scope);
})
.then(function (tokenDetails) {
if (tokenDetails) {
return _this.manageExistingToken(tokenDetails, swReg);
}
return _this.getNewToken(swReg);
return tslib_1.__awaiter(this, void 0, void 0, function () {
var currentPermission, swReg, publicVapidKey, pushSubscription, tokenDetails;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
currentPermission = this.getNotificationPermission_();
if (currentPermission !== NOTIFICATION_PERMISSION.granted) {
if (currentPermission === NOTIFICATION_PERMISSION.denied) {
return [2 /*return*/, Promise.reject(this.errorFactory_.create(Errors.codes.NOTIFICATIONS_BLOCKED))];
}
// We must wait for permission to be granted
return [2 /*return*/, Promise.resolve(null)];
}
return [4 /*yield*/, this.getSWRegistration_()];
case 1:
swReg = _a.sent();
return [4 /*yield*/, this.getPublicVapidKey_()];
case 2:
publicVapidKey = _a.sent();
return [4 /*yield*/, this.getPushSubscription(swReg, publicVapidKey)];
case 3:
pushSubscription = _a.sent();
return [4 /*yield*/, this.tokenDetailsModel_.getTokenDetailsFromSWScope(swReg.scope)];
case 4:
tokenDetails = _a.sent();
if (tokenDetails) {
return [2 /*return*/, this.manageExistingToken(swReg, pushSubscription, publicVapidKey, tokenDetails)];
}
return [2 /*return*/, this.getNewToken(swReg, pushSubscription, publicVapidKey)];
}
});
});

@@ -85,21 +96,29 @@ };

*/
ControllerInterface.prototype.manageExistingToken = function (tokenDetails, swReg) {
var _this = this;
return this.isTokenStillValid(tokenDetails).then(function (isValid) {
if (isValid) {
var now = Date.now();
if (now < tokenDetails['createTime'] + TOKEN_EXPIRATION_MILLIS) {
return tokenDetails['fcmToken'];
ControllerInterface.prototype.manageExistingToken = function (swReg, pushSubscription, publicVapidKey, tokenDetails) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var isTokenValid, now;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.isTokenStillValid(tokenDetails)];
case 1:
isTokenValid = _a.sent();
if (isTokenValid) {
now = Date.now();
if (now < tokenDetails['createTime'] + TOKEN_EXPIRATION_MILLIS) {
return [2 /*return*/, tokenDetails['fcmToken']];
}
else {
return [2 /*return*/, this.updateToken(swReg, pushSubscription, publicVapidKey, tokenDetails)];
}
}
// If the token is no longer valid (for example if the VAPID details
// have changed), delete the existing token, and create a new one.
return [4 /*yield*/, this.deleteToken(tokenDetails['fcmToken'])];
case 2:
// If the token is no longer valid (for example if the VAPID details
// have changed), delete the existing token, and create a new one.
_a.sent();
return [2 /*return*/, this.getNewToken(swReg, pushSubscription, publicVapidKey)];
}
else {
return _this.updateToken(tokenDetails, swReg);
}
}
else {
// If the VAPID details are updated, delete the existing token,
// and create a new one.
return _this.deleteToken(tokenDetails['fcmToken']).then(function () {
return _this.getNewToken(swReg);
});
}
});
});

@@ -119,71 +138,63 @@ };

};
ControllerInterface.prototype.updateToken = function (tokenDetails, swReg) {
var _this = this;
var publicVapidKey;
var updatedToken;
var subscription;
return this.getPublicVapidKey_()
.then(function (publicKey) {
publicVapidKey = publicKey;
return _this.getPushSubscription_(swReg, publicVapidKey);
})
.then(function (pushSubscription) {
subscription = pushSubscription;
return _this.iidModel_.updateToken(_this.messagingSenderId_, tokenDetails['fcmToken'], tokenDetails['fcmPushSet'], subscription, publicVapidKey);
})
.catch(function (err) {
return _this.deleteToken(tokenDetails['fcmToken']).then(function () {
throw err;
ControllerInterface.prototype.updateToken = function (swReg, pushSubscription, publicVapidKey, tokenDetails) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var updatedToken, allDetails, e_1;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 4, , 6]);
return [4 /*yield*/, this.iidModel_.updateToken(this.messagingSenderId_, tokenDetails['fcmToken'], tokenDetails['fcmPushSet'], pushSubscription, publicVapidKey)];
case 1:
updatedToken = _a.sent();
allDetails = {
swScope: swReg.scope,
vapidKey: publicVapidKey,
subscription: pushSubscription,
fcmSenderId: this.messagingSenderId_,
fcmToken: updatedToken,
fcmPushSet: tokenDetails['fcmPushSet']
};
return [4 /*yield*/, this.tokenDetailsModel_.saveTokenDetails(allDetails)];
case 2:
_a.sent();
return [4 /*yield*/, this.vapidDetailsModel_.saveVapidDetails(swReg.scope, publicVapidKey)];
case 3:
_a.sent();
return [2 /*return*/, updatedToken];
case 4:
e_1 = _a.sent();
return [4 /*yield*/, this.deleteToken(tokenDetails['fcmToken'])];
case 5:
_a.sent();
throw e_1;
case 6: return [2 /*return*/];
}
});
})
.then(function (token) {
updatedToken = token;
var allDetails = {
swScope: swReg.scope,
vapidKey: publicVapidKey,
subscription: subscription,
fcmSenderId: _this.messagingSenderId_,
fcmToken: updatedToken,
fcmPushSet: tokenDetails['fcmPushSet']
};
return _this.tokenDetailsModel_.saveTokenDetails(allDetails);
})
.then(function () {
return _this.vapidDetailsModel_.saveVapidDetails(swReg.scope, publicVapidKey);
})
.then(function () {
return updatedToken;
});
};
ControllerInterface.prototype.getNewToken = function (swReg) {
var _this = this;
var publicVapidKey;
var subscription;
var tokenDetails;
return this.getPublicVapidKey_()
.then(function (publicKey) {
publicVapidKey = publicKey;
return _this.getPushSubscription_(swReg, publicVapidKey);
})
.then(function (pushSubscription) {
subscription = pushSubscription;
return _this.iidModel_.getToken(_this.messagingSenderId_, subscription, publicVapidKey);
})
.then(function (iidTokenDetails) {
tokenDetails = iidTokenDetails;
var allDetails = {
swScope: swReg.scope,
vapidKey: publicVapidKey,
subscription: subscription,
fcmSenderId: _this.messagingSenderId_,
fcmToken: tokenDetails['token'],
fcmPushSet: tokenDetails['pushSet']
};
return _this.tokenDetailsModel_.saveTokenDetails(allDetails);
})
.then(function () {
return _this.vapidDetailsModel_.saveVapidDetails(swReg.scope, publicVapidKey);
})
.then(function () {
return tokenDetails['token'];
ControllerInterface.prototype.getNewToken = function (swReg, pushSubscription, publicVapidKey) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var tokenDetails, allDetails;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.iidModel_.getToken(this.messagingSenderId_, pushSubscription, publicVapidKey)];
case 1:
tokenDetails = _a.sent();
allDetails = {
swScope: swReg.scope,
vapidKey: publicVapidKey,
subscription: pushSubscription,
fcmSenderId: this.messagingSenderId_,
fcmToken: tokenDetails['token'],
fcmPushSet: tokenDetails['pushSet']
};
return [4 /*yield*/, this.tokenDetailsModel_.saveTokenDetails(allDetails)];
case 2:
_a.sent();
return [4 /*yield*/, this.vapidDetailsModel_.saveVapidDetails(swReg.scope, publicVapidKey)];
case 3:
_a.sent();
return [2 /*return*/, tokenDetails['token']];
}
});
});

@@ -231,4 +242,15 @@ };

};
ControllerInterface.prototype.getPushSubscription_ = function (registration, publicVapidKey) {
throw this.errorFactory_.create(Errors.codes.AVAILABLE_IN_WINDOW);
/**
* Gets a PushSubscription for the current user.
*/
ControllerInterface.prototype.getPushSubscription = function (swRegistration, publicVapidKey) {
return swRegistration.pushManager.getSubscription().then(function (subscription) {
if (subscription) {
return subscription;
}
return swRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: publicVapidKey
});
});
};

@@ -235,0 +257,0 @@ /**

@@ -102,9 +102,2 @@ import { FirebaseMessaging } from '@firebase/messaging-types';

/**
* Gets a PushSubscription for the current user.
* @private
* @param {ServiceWorkerRegistration} registration
* @return {Promise<PushSubscription>}
*/
getPushSubscription_(swRegistration: any, publicVapidKey: any): any;
/**
* This method will set up a message listener to handle

@@ -111,0 +104,0 @@ * events from the service worker that should trigger

@@ -321,22 +321,2 @@ /**

/**
* Gets a PushSubscription for the current user.
* @private
* @param {ServiceWorkerRegistration} registration
* @return {Promise<PushSubscription>}
*/
WindowController.prototype.getPushSubscription_ = function (swRegistration, publicVapidKey) {
// Check for existing subscription first
var subscription;
var fcmTokenDetails;
return swRegistration.pushManager.getSubscription().then(function (subscription) {
if (subscription) {
return subscription;
}
return swRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: publicVapidKey
});
});
};
/**
* This method will set up a message listener to handle

@@ -343,0 +323,0 @@ * events from the service worker that should trigger

{
"name": "@firebase/messaging",
"version": "0.2.2-canary.df183a5",
"version": "0.2.2-canary.faa54d8",
"description": "",

@@ -16,7 +16,7 @@ "author": "Firebase <firebase-support@google.com> (https://firebase.google.com/)",

"peerDependencies": {
"@firebase/app": "0.1.10-canary.df183a5"
"@firebase/app": "0.1.10-canary.faa54d8"
},
"dependencies": {
"@firebase/messaging-types": "0.1.2-canary.df183a5",
"@firebase/util": "0.1.10-canary.df183a5",
"@firebase/messaging-types": "0.1.2-canary.faa54d8",
"@firebase/util": "0.1.10-canary.faa54d8",
"tslib": "^1.9.0"

@@ -23,0 +23,0 @@ },

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