New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@fanoutio/grip

Package Overview
Dependencies
Maintainers
1
Versions
49
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@fanoutio/grip - npm Package Compare versions

Comparing version 2.1.1 to 3.0.0-alpha.1

.idea/shelf/Uncommitted_changes_before_rebase_[Default_Changelist]/shelved.patch

2

build/data/http/HttpResponseFormat.d.ts
import Response from '../Response';
import { IFormat } from "@fanoutio/pubcontrol";
import IFormat from '../IFormat';
export default class HttpResponseFormat extends Response implements IFormat {
name(): string;
}
/// <reference types="node" />
import { IFormat } from '@fanoutio/pubcontrol';
import IFormat from '../IFormat';
export default class HttpStreamFormat implements IFormat {

@@ -4,0 +4,0 @@ content: string | Buffer;

/// <reference types="node" />
import { IFormat } from "@fanoutio/pubcontrol";
import IFormat from '../IFormat';
export default class WebSocketMessageFormat implements IFormat {

@@ -4,0 +4,0 @@ content: Buffer | string;

@@ -1,16 +0,26 @@

import Channel from './data/Channel';
import Response from './data/Response';
import GripPubControl from './engine/GripPubControl';
import HttpStreamFormat from './data/http/HttpStreamFormat';
import HttpResponseFormat from './data/http/HttpResponseFormat';
import WebSocketContext from './data/websocket/WebSocketContext';
import WebSocketEvent from './data/websocket/WebSocketEvent';
import WebSocketMessageFormat from './data/websocket/WebSocketMessageFormat';
export * from './gripUtilities';
import IGripConfig from './engine/IGripConfig';
import IExportedChannel from './data/IExportedChannel';
import IExportedResponse from './data/IExportedResponse';
import IHoldInstruction from './IHoldInstruction';
import IWebSocketEvent from './data/websocket/IWebSocketEvent';
export { Channel, Response, HttpResponseFormat, HttpStreamFormat, WebSocketContext, WebSocketEvent, WebSocketMessageFormat, GripPubControl, };
export type { IGripConfig, IExportedChannel, IExportedResponse, IHoldInstruction, IWebSocketEvent, };
export { default as Publisher } from './engine/Publisher';
export { default as GripInstruct } from './data/GripInstruct';
export { default as Auth } from './auth/index';
export { default as Format } from './data/Format';
export { default as Item } from './data/Item';
export { default as PublisherClient } from './engine/PublisherClient';
export { default as Channel } from './data/Channel';
export { default as Response } from './data/Response';
export { default as HttpStreamFormat } from './data/http/HttpStreamFormat';
export { default as HttpResponseFormat } from './data/http/HttpResponseFormat';
export { default as WebSocketContext } from './data/websocket/WebSocketContext';
export { default as WebSocketEvent } from './data/websocket/WebSocketEvent';
export { default as WebSocketMessageFormat } from './data/websocket/WebSocketMessageFormat';
export type { default as IGripConfig } from './engine/IGripConfig';
export type { default as IExportedChannel } from './data/IExportedChannel';
export type { default as IExportedResponse } from './data/IExportedResponse';
export type { default as IWebSocketEvent } from './data/websocket/IWebSocketEvent';
export type { default as IFormat } from './data/IFormat';
export type { default as IFormatExport } from './data/IFormatExport';
export type { default as IItem } from './data/IItem';
export type { default as IItemExport } from './data/IItemExport';
export type { default as IPublisherConfig } from './engine/IPublisherConfig';
export type { default as IPublishCallback } from "./engine/IPublishCallback";
export { createGripChannelHeader, parseGripUri, } from './utilities/grip';
export { encodeWebSocketEvents, decodeWebSocketEvents, createWebSocketControlMessage, } from './utilities/webSocketEvents';
export { validateSig, } from './utilities/jwt';

@@ -10,6 +10,7 @@ # js-grip Changelog

## [Planned for 2.0.0]
Major update with great improvements in usability, with support for modern
language features such as `class` and `async`/`await`. Now also uses
`@fanoutio/pubcontrol@2`.
## [Planned for 3.0.0]
- Major update with great improvements in usability, with support for modern
language features such as `class` and `async`/`await`. Collapses js-pubcontrol into
js-grip, simplifying use and deployment.
- Reorganized utility functions into categorized files.

@@ -20,3 +21,6 @@ ### To be Added

### To be Changed
- buildWebSocketControlMessage() renamed to createWebSocketControlMessage().
### To be Removed
- Removal of createHold* functions in favor of GripInstruct class

@@ -23,0 +27,0 @@ ## [2.0.0-beta.0] - 2020-01-13

{
"name": "@fanoutio/grip",
"version": "2.1.1",
"version": "3.0.0-alpha.1",
"author": "Fanout, Inc. <info@fanout.io>",

@@ -35,3 +35,3 @@ "description": "GRIP Interface Library",

"type": "git",
"url": "https://github.com/fanout/node-grip.git"
"url": "https://github.com/fanout/js-grip.git"
},

@@ -49,3 +49,4 @@ "readmeFilename": "README.md",

"dependencies": {
"@fanoutio/pubcontrol": "^2.1.4",
"agentkeepalive": "^4.1.0",
"isomorphic-fetch": "^2.2.1",
"jspack": "0.0.4",

@@ -52,0 +53,0 @@ "jwt-simple": "^0.5.6"

@@ -18,6 +18,5 @@ # GRIP Interface Library for JavaScript

Examples for how to publish HTTP response and HTTP stream messages to GRIP proxy endpoints via the GripPubControl class.
Examples for how to publish HTTP response and HTTP stream messages to GRIP proxy endpoints via the Publisher class.
```javascript
var pubcontrol = require('@fanoutio/pubcontrol');
var grip = require('@fanoutio/grip');

@@ -37,7 +36,7 @@

// GripPubControl can be initialized with or without an endpoint configuration.
// Publisher can be initialized with or without an endpoint configuration.
// Each endpoint can include optional JWT authentication info.
// Multiple endpoints can be included in a single configuration.
var grippub = new grip.GripPubControl({
var grippub = new grip.Publisher({
'control_uri': 'https://api.fanout.io/realm/<myrealm>',

@@ -54,8 +53,2 @@ 'control_iss': '<myrealm>',

// Explicitly add an endpoint as a PubControlClient instance:
var pubclient = new pubcontrol.PubControlClient('<myendpoint_uri>');
// Optionally set JWT auth: pubclient.setAuthJwt(<claim>, '<key>');
// Optionally set basic auth: pubclient.setAuthBasic('<user>', '<password>');
grippub.addClient(pubclient);
// Publish across all configured endpoints:

@@ -121,5 +114,9 @@ grippub.publishHttpResponse('<channel>', 'Test Publish!', callback);

const gripInstruct = new grip.GripInstruct();
gripInstruct.setHoldLongPoll();
// Instruct the client to long poll via the response body:
res.writeHead(200, {'Content-Type': 'application/grip-instruct'});
res.end(grip.createHoldResponse('<channel>'));
res.writeHead(200, gripInstruct.toHeaders());
res.end('[start longpoll]');
// Or to optionally set a timeout value in seconds:

@@ -150,3 +147,2 @@ // res.end(grip.createHoldResponse('<channel>', null, <timeout_value>));

var ws = require("nodejs-websocket")
var pubcontrol = require('@fanoutio/pubcontrol');
var grip = require('@fanoutio/grip');

@@ -161,5 +157,5 @@

setTimeout(function() {
var grippub = new grip.GripPubControl({
var grippub = new grip.Publisher({
'control_uri': '<myendpoint>'});
grippub.publish('test_channel', new pubcontrol.Item(
grippub.publish('test_channel', new grip.Item(
new grip.WebSocketMessageFormat(

@@ -177,3 +173,2 @@ 'Test WebSocket Publish!!')));

var http = require('http');
var pubcontrol = require('@fanoutio/pubcontrol');
var grip = require('@fanoutio/grip');

@@ -212,5 +207,5 @@

setTimeout(function() {
var grippub = new grip.GripPubControl({
var grippub = new grip.Publisher({
'control_uri': '<myendpoint>'});
grippub.publish('channel', new pubcontrol.Item(
grippub.publish('channel', new grip.Item(
new grip.WebSocketMessageFormat(

@@ -226,2 +221,159 @@ 'Test WebSocket Publish!!')));

## Using the API
All of the APIs exposed on the root object, so for example you can bring them in
as follows:
```javascript
const { createWebSocketControlMessage, Publisher, Format, Item } = require('@fanoutio/grip');
```
or
```javascript
import { createWebSocketControlMessage, Publisher, Format, Item } from '@fanoutio/grip';
```
## API
The API exports the following functions, classes, and interfaces.
| Function | Description |
| --- | --- |
| `validateSig(token, key)` | Validate the specified JWT token and key. |
| `encodeWebSocketEvents(events)` | Encode the specified array of WebSocketEvent instances. |
| `decodeWebSocketEvents(body)` | Decode the specified HTTP request body into an array of WebSocketEvent instances when using the WebSocket-over-HTTP protocol. |
| `createGripChannelHeader(channels)` | Create a GRIP channel header for the specified channels. |
| `parseGripUri(uri)` | Parse the specified GRIP URI into a config object that can then be passed to the Publisher class. |
| `createWebSocketControlMessage(type, args)` | Generate a WebSocket control message with the specified type and optional arguments. |
| Class | Description |
| --- | --- |
| `GripInstruct` | Class used to create the necessary HTTP headers that instruct the Grip proxy to hold connections. |
| `Publisher` | Main object used to publish HTTP response and HTTP Stream format messages to Grip proxies. |
| `HttpStreamFormat` | Format used to publish messages to HTTP stream clients connected to a GRIP proxy. |
| `HttpResponseFormat` | Format used to publish messages to HTTP response clients connected to a GRIP proxy. |
| `WebSocketContext` | WebSocket context |
| `WebSocketEvent` | WebSocket event |
| `WebSocketMessageFormat` | Format used to publish messages to Web Socket clients connected to a GRIP proxy. |
| `Format` | Base class for Format used to publish messages with `Publisher`. |
| `Item` | Base class for Item used to publish messages with `Publisher`. |
| Interfaces | Description |
| --- | --- |
| `IGripConfig` | Represents a Grip client's configuration |
| `IFormat` | Represents a publishing format to be used with Publisher |
| `IItem` | Represents a container used to contain a data object in one or more formats |
Additionally, the following are exported for their types and use with code completion but with most uses of the library
the consumer rarely needs to instantiate or use them directly.
| Class | Description |
| --- | --- |
| `Auth.Basic` | Represents Basic authentication to be used with `Publisher`. |
| `Auth.Jwt` | Represents JWT authentication to be used with `Publisher`. |
| `Auth.Base` | Base class for authentication to be used with `Publisher`. |
| `Channel` | Represents a channel used by a Grip proxy. |
| `Response` | Represents a set of HTTP response data. |
| `PublisherClient` | Represents an endpoint and its attributes, including authentication, used with `Publisher`. |
| Interfaces | Description |
| --- | --- |
| `IExportedChannel` | A representation of a channel, containing the name and previous ID value|
| `IExportedResponse` | A representation of all of the non-null data from a Response |
| `IWebSocketEvent` | Decscribes information about a WebSocket event |
| `IFormatExport` | Represents a format-specific hash containing the required format-specific data|
| `IItemExport` | Describes an item that has been serialized for export |
| `IPublisherConfig` | Represents an EPCP client's configuration |
| `IPublisherCallback` | (May not be needed anymore) |
Class `GripInstruct`
| Method | Description |
| --- | --- |
| constructor(`channels?`) | Create a `GripInstruct` instance, configuring it with an optional array of channels to bind to. |
| `addChannel(channels)` | Bind to additional channels. |
| `setHoldLongPoll(timeout?)` | Set the `Grip-Hold` header to the `response` value, and specify an optional timeout value. |
| `setHoldStream()` | Set the `Grip-Hold` header to the `stream` mode. |
| `setKeepAlive(data, timeout)` | Set the `Grip-Keep-Alive` header to the specified data value and timeout value. The value for `data` may be provided as either a string or `Buffer`, and the appropriate encoding will be performed. |
| `setNextLink(uri, timeout?)` | Set the `Grip-Link` header to the specified uri, with an optional timeout value. |
| `meta` (property) | A property to be set directly on the instance. This is serialized into the `Grip-Set-Meta` header. |
| `toHeaders(params)` | Turns the current instance into an object that can be sent as HTTP headers. |
Class `Publisher`
| Method | Description |
| --- | --- |
| constructor(`configs`) | Create a `Publisher` instance, configuring it with clients that based on the specified GRIP or publisher settings. |
| `applyConfig(configs)` | Apply additional clients based on specified Grip or publisher configs to the publisher instance. |
| `removeAllClients()` | Remove all clients from this publisher instance. |
| `async publish(channel, item)` | Publish an item to the specified channel. |
| `async publishHttpResponse(channel, data, id?, prevId?)` | Publish an HTTP response format message to the specified channel, with optional ID and previous ID. |
| `async publishHttpStream(channel, item)` | Publish an HTTP stream format message to the specified channel, with optional ID and previous ID. |
| `addClient(client)` | Advanced: Add a PublisherClient instance that you have configured on your own. |
The constructor and `applyConfig` methods accept either a single object or an array of objects that implement
the `IGripConfig` interface (or in advanced cases, the `IPublisherConfig` interface).
Interface `IGripConfig`
Represents the configuration for a Grip client, such as Pushpin or Fanout Cloud.
| Field | Description |
| --- | --- |
| `control_uri` | The Control URI of the Grip client. |
| `control_iss` | (optional) The Control ISS, if required by the Grip client. |
| `key` | (optional) The key to use with the Control ISS, if required by the Grip client. |
Class `Format`
A base class for all publishing formats that are included in the Item class.
Examples of format implementations include JsonObjectFormat and HttpStreamFormat.
### Advanced APIs
Interface `IPublisherConfig`
Represents the configuration for an EPCP publisher client, not limited to
Grip clients.
| Field | Description |
| --- | --- |
| `control_uri` | The URI of the client. |
| `control_iss` | (optional) The ISS, if required by the client. |
| `key` | (optional) The key to use with the ISS, if required by the client. |
Class `PublisherClient`
Represents an endpoint and its configuration, including authentication, that
is used by `Publisher` to publish messages to. This class is typically not used
directly, but you may instantiate this on your own if you wish to set up authentication
directly.
| Method | Description |
| --- | --- |
| constructor(`uri`) | Create a `PublisherClient` instance, initializing it with the given publishing endpoint. |
| `setAuthBasic(username, password)` | Configure this instance with Basic authentication with the specified username and password. |
| `setAuthJwt(token)`<br />`setAuthJwt(claim, key?)` | Configure this instance with Jwt authentication with the specified claim and key, or with the specified token. |
| `async publish(channel, item)` | Publish a specified item to the specified channel. |
Class `Auth.Base`
An abstract class that represents authentication to be used with a `PublisherClient`.
Class `Auth.Basic`
Represents Basic authentication to be used with a `PublisherClient`.
Class `Auth.Jwt`
## Configuring the GRIP endpoint
Parse a GRIP URI to extract the URI, ISS, and key values. The values will be returned in a dictionary containing 'control_uri', 'control_iss', and 'key' keys.

@@ -245,3 +397,3 @@

const grip = require('@fanoutio/grip');
const grippub = new grip.GripPubControl({control_uri: "<endpoint_uri>"});
const grippub = new grip.Publisher({control_uri: "<endpoint_uri>"});
```

@@ -253,3 +405,3 @@

import grip from '@fanoutio/grip';
const pub = new grip.GripPubControl({control_uri: "<endpoint_uri>"});
const pub = new grip.Publisher({control_uri: "<endpoint_uri>"});
```

@@ -261,10 +413,11 @@

```javascript
import grip, { IHoldInstruction } from '@fanoutio/grip';
const pub = new grip.GripPubControl({control_uri: "<endpoint_uri>"});
import grip, { IGripConfig } from '@fanoutio/grip';
const pub = new grip.Publisher({control_uri: "<endpoint_uri>"});
// IHoldInstruction is a type declaration.
// IGripConfig is a type declaration.
```
### Demo
### Demos
Included in this package is a demo that publishes a message using a Grip Stream

@@ -283,3 +436,3 @@ to a sample server that is proxied behind the open-source Pushpin (https://pushpin.org/) server.

```
node demo/server
node demo/grip/server
```

@@ -300,10 +453,29 @@

```
curl http://localhost:7999/long-poll
curl http://localhost:7999/stream
```
7. In another terminal window, run the publish demo file.
```
node demo/publish test "Message"
node demo/grip/publish test "Message"
```
8. In the window that you opened in step 6, you should see the test message.
### Browser Demo
This demo runs in a browser and streams from the endpoint. This demo
uses the fetch API with its ReadableStream interface to read from the
streaming endpoint.
1. Follow Steps 1 through 5 in the demo above to start the server and
proxy processes.
2. In a web browser, open the `demo/grip/fetch.html` file.
3. Click the button labeled `Go`. The browser will connect to the
streaming API at `http://localhost:7999/stream`.
4. In another terminal window follow step 7 in the demo above.
5. In the web browser that you opened in step 2, you should see the test
message.
## License

@@ -310,0 +482,0 @@

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

var pubcontrol = require('pubcontrol');
var grip = require('grip');
var grip = require('@fanout/grip');

@@ -12,11 +11,11 @@ var callback = function(success, message, context) {

console.log("Context: ");
console.dir(context);
console.dir(context);
}
};
// GripPubControl can be initialized with or without an endpoint configuration.
// Publisher can be initialized with or without an endpoint configuration.
// Each endpoint can include optional JWT authentication info.
// Multiple endpoints can be included in a single configuration.
var grippub = new grip.GripPubControl({
var grippub = new grip.Publisher({
'control_uri': 'https://api.fanout.io/realm/<myrealm>',

@@ -33,4 +32,4 @@ 'control_iss': '<myrealm>',

// Explicitly add an endpoint as a PubControlClient instance:
var pubclient = new pubcontrol.PubControlClient('<myendpoint_uri>');
// Explicitly add an endpoint as a PublisherClient instance:
var pubclient = new grip.PublisherClient('<myendpoint_uri>');
// Optionally set JWT auth: pubclient.setAuthJwt(<claim>, '<key>');

@@ -37,0 +36,0 @@ // Optionally set basic auth: pubclient.setAuthBasic('<user>', '<password>');

var http = require('http');
var pubcontrol = require('pubcontrol');
var grip = require('grip');

@@ -34,5 +33,5 @@

setTimeout(function() {
var grippub = new grip.GripPubControl({
var grippub = new grip.Publisher({
'control_uri': '<myendpoint>'});
grippub.publish('channel', new pubcontrol.Item(
grippub.publish('channel', new grip.Item(
new grip.WebSocketMessageFormat(

@@ -39,0 +38,0 @@ 'Test WebSocket Publish!!')));

var ws = require("nodejs-websocket")
var pubcontrol = require('pubcontrol');
var grip = require('grip');
var grip = require('@fanout/grip');

@@ -12,5 +11,5 @@ ws.createServer(function (conn) {

setTimeout(function() {
var grippub = new grip.GripPubControl({
var grippub = new grip.Publisher({
'control_uri': '<myendpoint>'});
grippub.publish('test_channel', new pubcontrol.Item(
grippub.publish('test_channel', new grip.Item(
new grip.WebSocketMessageFormat(

@@ -17,0 +16,0 @@ 'Test WebSocket Publish!!')));

import IExportedChannel from "./IExportedChannel";
// The Channel class is used to represent a channel in for a GRIP proxy and
// The Channel class is used to represent a channel in a GRIP proxy and
// tracks the previous ID of the last message.

@@ -5,0 +5,0 @@

import Response from '../Response';
import { IFormat } from "@fanoutio/pubcontrol";
import IFormat from '../IFormat';

@@ -4,0 +4,0 @@ // The HttpResponseFormat class is the format used to publish messages to

import { Buffer } from 'buffer';
import { IFormat } from '@fanoutio/pubcontrol';
import IFormat from '../IFormat';

@@ -4,0 +4,0 @@ // The HttpStreamFormat class is the format used to publish messages to

import { Buffer } from 'buffer';
import { jspack } from "jspack";
/// <reference path="../../types/jspack.d.ts" />
/// <reference path="../../../types/jspack.d.ts" />
import { buildWebSocketControlMessage } from "../../gripUtilities";
import { createWebSocketControlMessage } from "../../utilities/webSocketEvents";

@@ -120,12 +120,12 @@ import WebSocketEvent from "./WebSocketEvent";

subscribe(channel: string) {
this.sendControl(buildWebSocketControlMessage('subscribe',
this.sendControl(createWebSocketControlMessage('subscribe',
{'channel': this.prefix + channel}));
}
unsubscribe(channel: string) {
this.sendControl(buildWebSocketControlMessage('unsubscribe',
this.sendControl(createWebSocketControlMessage('unsubscribe',
{'channel': this.prefix + channel}));
}
detach() {
this.sendControl(buildWebSocketControlMessage('detach'));
this.sendControl(createWebSocketControlMessage('detach'));
}
}
import { Buffer } from 'buffer';
import { IFormat } from "@fanoutio/pubcontrol";
import IFormat from '../IFormat';

@@ -4,0 +4,0 @@ // The WebSocketMessageFormat class is the format used to publish data to

import { Buffer } from 'buffer';
import * as main from './main';
export default Object.assign(main, { Buffer });
export default Object.assign({}, main, { Buffer });

@@ -1,34 +0,42 @@

import Channel from './data/Channel';
import Response from './data/Response';
import GripPubControl from './engine/GripPubControl';
import HttpStreamFormat from './data/http/HttpStreamFormat';
import HttpResponseFormat from './data/http/HttpResponseFormat';
import WebSocketContext from './data/websocket/WebSocketContext';
import WebSocketEvent from './data/websocket/WebSocketEvent';
import WebSocketMessageFormat from './data/websocket/WebSocketMessageFormat';
export * from './gripUtilities';
// Flatten and export
import IGripConfig from './engine/IGripConfig';
import IExportedChannel from './data/IExportedChannel';
import IExportedResponse from './data/IExportedResponse';
import IHoldInstruction from './IHoldInstruction';
import IWebSocketEvent from './data/websocket/IWebSocketEvent';
// Classes
export { default as Publisher } from './engine/Publisher';
export { default as GripInstruct } from './data/GripInstruct';
export { default as Auth } from './auth/index';
export { default as Format } from './data/Format';
export { default as Item } from './data/Item';
export { default as PublisherClient } from './engine/PublisherClient';
export { default as Channel } from './data/Channel';
export { default as Response } from './data/Response';
export { default as HttpStreamFormat } from './data/http/HttpStreamFormat';
export { default as HttpResponseFormat } from './data/http/HttpResponseFormat';
export { default as WebSocketContext } from './data/websocket/WebSocketContext';
export { default as WebSocketEvent } from './data/websocket/WebSocketEvent';
export { default as WebSocketMessageFormat } from './data/websocket/WebSocketMessageFormat';
// Interfaces
export type { default as IGripConfig } from './engine/IGripConfig';
export type { default as IExportedChannel } from './data/IExportedChannel';
export type { default as IExportedResponse } from './data/IExportedResponse';
export type { default as IWebSocketEvent } from './data/websocket/IWebSocketEvent';
export type { default as IFormat } from './data/IFormat';
export type { default as IFormatExport } from './data/IFormatExport';
export type { default as IItem } from './data/IItem';
export type { default as IItemExport } from './data/IItemExport';
export type { default as IPublisherConfig } from './engine/IPublisherConfig';
export type { default as IPublishCallback } from "./engine/IPublishCallback";
// Utility Functions
export {
Channel,
Response,
HttpResponseFormat,
HttpStreamFormat,
WebSocketContext,
WebSocketEvent,
WebSocketMessageFormat,
GripPubControl,
};
export type {
IGripConfig,
IExportedChannel,
IExportedResponse,
IHoldInstruction,
IWebSocketEvent,
};
createGripChannelHeader,
parseGripUri,
} from './utilities/grip';
export {
encodeWebSocketEvents,
decodeWebSocketEvents,
createWebSocketControlMessage,
} from './utilities/webSocketEvents';
export {
validateSig,
} from './utilities/jwt';

@@ -5,3 +5,3 @@ import assert from "assert";

const { jspack } = jspackModule;
/// <reference path="../src/types/jspack.d.ts" />
/// <reference path="../types/jspack.d.ts" />

@@ -8,0 +8,0 @@ import WebSocketContext from "../src/data/websocket/WebSocketContext";

@@ -23,4 +23,5 @@ {

"./src/**/*",
"./tests/**/*"
"./tests/**/*",
"./types/**/*"
]
}

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

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 too big to display

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