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

@mux/playback-core

Package Overview
Dependencies
Maintainers
1
Versions
585
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mux/playback-core - npm Package Compare versions

Comparing version 0.25.2-canary.0-f6f99b3 to 0.25.2-canary.0-ff78173

8

dist/cjs.json

@@ -20,3 +20,3 @@ {

"src/types.ts": {
"bytes": 5800,
"bytes": 5827,
"imports": [],

@@ -26,3 +26,3 @@ "format": "esm"

"src/util.ts": {
"bytes": 3300,
"bytes": 3368,
"imports": [

@@ -118,3 +118,3 @@ {

"src/index.ts": {
"bytes": 45892,
"bytes": 45747,
"imports": [

@@ -185,3 +185,3 @@ {

"inputs": {},
"bytes": 124661
"bytes": 124608
},

@@ -188,0 +188,0 @@ "dist/index.cjs.js": {

@@ -20,3 +20,3 @@ {

"src/types.ts": {
"bytes": 5800,
"bytes": 5827,
"imports": [],

@@ -26,3 +26,3 @@ "format": "esm"

"src/util.ts": {
"bytes": 3300,
"bytes": 3368,
"imports": [

@@ -118,3 +118,3 @@ {

"src/index.ts": {
"bytes": 45892,
"bytes": 45747,
"imports": [

@@ -185,3 +185,3 @@ {

"inputs": {},
"bytes": 122603
"bytes": 122550
},

@@ -188,0 +188,0 @@ "dist/index.mjs": {

@@ -30,3 +30,3 @@ {

"src/types.ts": {
"bytes": 5800,
"bytes": 5827,
"imports": [],

@@ -36,3 +36,3 @@ "format": "esm"

"src/util.ts": {
"bytes": 3300,
"bytes": 3368,
"imports": [

@@ -128,3 +128,3 @@ {

"src/index.ts": {
"bytes": 45892,
"bytes": 45747,
"imports": [

@@ -195,3 +195,3 @@ {

"inputs": {},
"bytes": 2150795
"bytes": 2150742
},

@@ -198,0 +198,0 @@ "dist/playback-core.js": {

@@ -30,3 +30,3 @@ {

"src/types.ts": {
"bytes": 5800,
"bytes": 5827,
"imports": [],

@@ -36,3 +36,3 @@ "format": "esm"

"src/util.ts": {
"bytes": 3300,
"bytes": 3368,
"imports": [

@@ -128,3 +128,3 @@ {

"src/index.ts": {
"bytes": 45892,
"bytes": 45747,
"imports": [

@@ -195,3 +195,3 @@ {

"inputs": {},
"bytes": 2150794
"bytes": 2150741
},

@@ -198,0 +198,0 @@ "dist/playback-core.mjs": {

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

/// <reference types="mux-embed/dist/types/mux-embed" />
import { ValueOf, PlaybackCore, MuxMediaProps, MuxMediaPropsInternal, MaxResolutionValue, MinResolutionValue, RenditionOrderValue } from './types';
import mux from 'mux-embed';

@@ -8,3 +8,2 @@ import Hls from './hls';

import { getStartDate, getCurrentPdt } from './pdt';
import { ValueOf, PlaybackCore, MuxMediaProps, MuxMediaPropsInternal, MaxResolutionValue, MinResolutionValue, RenditionOrderValue } from './types';
import { StreamTypes, MediaTypes } from './types';

@@ -27,3 +26,3 @@ import { HlsConfig } from 'hls.js';

};
export declare const getStreamInfoFromSrcAndType: (src: string, type?: MediaTypes | '') => Promise<{
export declare const getStreamInfoFromSrcAndType: (src: string, type?: MediaTypes | "") => Promise<{
streamType: "on-demand" | "live";

@@ -37,3 +36,3 @@ targetLiveWindow: number;

}>;
export declare const updateStreamInfoFromSrc: (src: string, mediaEl: HTMLMediaElement, type?: MediaTypes | '') => Promise<void>;
export declare const updateStreamInfoFromSrc: (src: string, mediaEl: HTMLMediaElement, type?: MediaTypes | "") => Promise<void>;
export declare const getStreamInfoFromHlsjsLevelDetails: (levelDetails: any) => {

@@ -45,3 +44,3 @@ streamType: "on-demand" | "live";

};
export declare const updateStreamInfoFromHlsjsLevelDetails: (levelDetails: any, mediaEl: HTMLMediaElement, hls: Pick<Hls, 'config' | 'userConfig' | 'liveSyncPosition'>) => void;
export declare const updateStreamInfoFromHlsjsLevelDetails: (levelDetails: any, mediaEl: HTMLMediaElement, hls: Pick<Hls, "config" | "userConfig" | "liveSyncPosition">) => void;
declare global {

@@ -91,22 +90,22 @@ interface NavigatorUAData {

/** Should we add audio fragments logic here, too? (CJP) */
'levels' | 'currentLevel'>) => boolean | undefined;
"levels" | "currentLevel">) => boolean | undefined;
export declare const getEnded: (mediaEl: HTMLMediaElement, hls?: Pick<Hls,
/** Should we add audio fragments logic here, too? (CJP) */
'levels' | 'currentLevel'>) => boolean;
"levels" | "currentLevel">) => boolean;
export declare const initialize: (props: Partial<MuxMediaPropsInternal>, mediaEl: HTMLMediaElement, core?: PlaybackCore) => {
engine: Hls | undefined;
setAutoplay: (newAutoplay?: import("./types").Autoplay | undefined) => void;
setPreload: (val?: "" | "none" | "metadata" | "auto" | undefined) => void;
setAutoplay: (newAutoplay?: import("./types").Autoplay) => void;
setPreload: (val?: HTMLMediaElement["preload"]) => void;
};
export declare const teardown: (mediaEl?: HTMLMediaElement | null, core?: PlaybackCore) => void;
export declare const setupHls: (props: Partial<Pick<MuxMediaPropsInternal, 'debug' | 'streamType' | 'type' | 'startTime' | 'metadata' | 'preferCmcd' | '_hlsConfig' | 'drmToken' | 'drmTypeCb'>>, mediaEl: Pick<HTMLMediaElement, 'canPlayType'>) => Hls | undefined;
export declare const setupHls: (props: Partial<Pick<MuxMediaPropsInternal, "debug" | "streamType" | "type" | "startTime" | "metadata" | "preferCmcd" | "_hlsConfig" | "drmToken" | "drmTypeCb">>, mediaEl: Pick<HTMLMediaElement, "canPlayType">) => Hls | undefined;
export declare const getStreamTypeConfig: (streamType?: ValueOf<StreamTypes>) => {};
export declare const getDRMConfig: (props: Partial<Pick<MuxMediaPropsInternal, 'src' | 'playbackId' | 'drmToken' | 'customDomain' | 'drmTypeCb'>>) => Partial<HlsConfig>;
export declare const getDRMConfig: (props: Partial<Pick<MuxMediaPropsInternal, "src" | "playbackId" | "drmToken" | "customDomain" | "drmTypeCb">>) => Partial<HlsConfig>;
export declare const getAppCertificate: (appCertificateUrl: string) => Promise<ArrayBuffer>;
export declare const getLicenseKey: (message: ArrayBuffer, licenseServerUrl: string) => Promise<Uint8Array>;
export declare const setupNativeFairplayDRM: (props: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'drmToken' | 'customDomain' | 'drmTypeCb'>>, mediaEl: HTMLMediaElement) => void;
export declare const toLicenseKeyURL: ({ playbackId, drmToken: token, customDomain, }: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'drmToken' | 'customDomain'>>, scheme: 'widevine' | 'playready' | 'fairplay') => string;
export declare const toAppCertURL: ({ playbackId, drmToken: token, customDomain, }: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'drmToken' | 'customDomain'>>, scheme: 'widevine' | 'playready' | 'fairplay') => string;
export declare const isMuxVideoSrc: ({ playbackId, src, customDomain, }: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'src' | 'customDomain'>>) => boolean;
export declare const setupMux: (props: Partial<Pick<MuxMediaPropsInternal, 'envKey' | 'playerInitTime' | 'beaconCollectionDomain' | 'errorTranslator' | 'metadata' | 'debug' | 'playerSoftwareName' | 'playerSoftwareVersion' | 'playbackId' | 'src' | 'customDomain' | 'disableCookies' | 'disableTracking'>>, mediaEl: HTMLMediaElement, hlsjs?: HlsInterface) => void;
export declare const loadMedia: (props: Partial<Pick<MuxMediaProps, 'preferPlayback' | 'src' | 'type' | 'startTime' | 'streamType' | 'autoplay' | 'playbackId' | 'drmToken' | 'customDomain'>>, mediaEl: HTMLMediaElement, hls?: Pick<Hls, 'config' | 'on' | 'once' | 'off' | 'trigger' | 'startLoad' | 'stopLoad' | 'recoverMediaError' | 'destroy' | 'loadSource' | 'attachMedia' | 'liveSyncPosition' | 'subtitleTracks' | 'subtitleTrack' | 'userConfig' | 'audioTrack' | 'audioTracks' | 'autoLevelEnabled' | 'nextLevel' | 'levels' | 'currentLevel'>) => void;
export declare const setupNativeFairplayDRM: (props: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "drmToken" | "customDomain" | "drmTypeCb">>, mediaEl: HTMLMediaElement) => void;
export declare const toLicenseKeyURL: ({ playbackId, drmToken: token, customDomain, }: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "drmToken" | "customDomain">>, scheme: "widevine" | "playready" | "fairplay") => string;
export declare const toAppCertURL: ({ playbackId, drmToken: token, customDomain, }: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "drmToken" | "customDomain">>, scheme: "widevine" | "playready" | "fairplay") => string;
export declare const isMuxVideoSrc: ({ playbackId, src, customDomain, }: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "src" | "customDomain">>) => boolean;
export declare const setupMux: (props: Partial<Pick<MuxMediaPropsInternal, "envKey" | "playerInitTime" | "beaconCollectionDomain" | "errorTranslator" | "metadata" | "debug" | "playerSoftwareName" | "playerSoftwareVersion" | "playbackId" | "src" | "customDomain" | "disableCookies" | "disableTracking">>, mediaEl: HTMLMediaElement, hlsjs?: HlsInterface) => void;
export declare const loadMedia: (props: Partial<Pick<MuxMediaProps, "preferPlayback" | "src" | "type" | "startTime" | "streamType" | "autoplay" | "playbackId" | "drmToken" | "customDomain">>, mediaEl: HTMLMediaElement, hls?: Pick<Hls, "config" | "on" | "once" | "off" | "trigger" | "startLoad" | "stopLoad" | "recoverMediaError" | "destroy" | "loadSource" | "attachMedia" | "liveSyncPosition" | "subtitleTracks" | "subtitleTrack" | "userConfig" | "audioTrack" | "audioTracks" | "autoLevelEnabled" | "nextLevel" | "levels" | "currentLevel">) => void;
import { PlaybackEngine } from './types';
export declare const setupPreload: ({ preload, src }: Partial<HTMLMediaElement>, mediaEl: HTMLMediaElement, hls?: PlaybackEngine) => (val?: HTMLMediaElement['preload']) => void;
export declare const setupPreload: ({ preload, src }: Partial<HTMLMediaElement>, mediaEl: HTMLMediaElement, hls?: PlaybackEngine) => (val?: HTMLMediaElement["preload"]) => void;

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

/// <reference types="mux-embed/dist/types/mux-embed" />
/// <reference path="../../../../node_modules/mux-embed/dist/types/mux-embed.d.ts" />
import { Options } from 'mux-embed';

@@ -3,0 +3,0 @@ import { MediaError } from './errors';

@@ -9,3 +9,3 @@ import { HlsPlaylistTypes, MuxMediaProps } from './types';

];
export declare const getType: (props: Partial<Pick<MuxMediaProps, 'type' | 'src'>>) => "" | import("./types").MediaTypes;
export declare const getType: (props: Partial<Pick<MuxMediaProps, "type" | "src">>) => "" | import("./types").MediaTypes;
export declare const toStreamTypeFromPlaylistType: (playlistType: HlsPlaylistTypes) => "on-demand" | "live";

@@ -12,0 +12,0 @@ export declare const toTargetLiveWindowFromPlaylistType: (playlistType: HlsPlaylistTypes) => number;

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

/// <reference types="mux-embed/dist/types/mux-embed" />
import type { ValueOf, PlaybackCore, MuxMediaProps, MuxMediaPropsInternal, MaxResolutionValue, MinResolutionValue, RenditionOrderValue } from './types';
import mux from 'mux-embed';

@@ -8,3 +8,2 @@ import Hls from './hls';

import { getStartDate, getCurrentPdt } from './pdt';
import type { ValueOf, PlaybackCore, MuxMediaProps, MuxMediaPropsInternal, MaxResolutionValue, MinResolutionValue, RenditionOrderValue } from './types';
import { StreamTypes, MediaTypes } from './types';

@@ -27,3 +26,3 @@ import type { HlsConfig } from 'hls.js';

};
export declare const getStreamInfoFromSrcAndType: (src: string, type?: MediaTypes | '') => Promise<{
export declare const getStreamInfoFromSrcAndType: (src: string, type?: MediaTypes | "") => Promise<{
streamType: "on-demand" | "live";

@@ -37,3 +36,3 @@ targetLiveWindow: number;

}>;
export declare const updateStreamInfoFromSrc: (src: string, mediaEl: HTMLMediaElement, type?: MediaTypes | '') => Promise<void>;
export declare const updateStreamInfoFromSrc: (src: string, mediaEl: HTMLMediaElement, type?: MediaTypes | "") => Promise<void>;
export declare const getStreamInfoFromHlsjsLevelDetails: (levelDetails: any) => {

@@ -45,3 +44,3 @@ streamType: "on-demand" | "live";

};
export declare const updateStreamInfoFromHlsjsLevelDetails: (levelDetails: any, mediaEl: HTMLMediaElement, hls: Pick<Hls, 'config' | 'userConfig' | 'liveSyncPosition'>) => void;
export declare const updateStreamInfoFromHlsjsLevelDetails: (levelDetails: any, mediaEl: HTMLMediaElement, hls: Pick<Hls, "config" | "userConfig" | "liveSyncPosition">) => void;
declare global {

@@ -91,22 +90,22 @@ interface NavigatorUAData {

/** Should we add audio fragments logic here, too? (CJP) */
'levels' | 'currentLevel'>) => boolean | undefined;
"levels" | "currentLevel">) => boolean | undefined;
export declare const getEnded: (mediaEl: HTMLMediaElement, hls?: Pick<Hls,
/** Should we add audio fragments logic here, too? (CJP) */
'levels' | 'currentLevel'>) => boolean;
"levels" | "currentLevel">) => boolean;
export declare const initialize: (props: Partial<MuxMediaPropsInternal>, mediaEl: HTMLMediaElement, core?: PlaybackCore) => {
engine: Hls | undefined;
setAutoplay: (newAutoplay?: import("./types").Autoplay | undefined) => void;
setPreload: (val?: "" | "none" | "metadata" | "auto" | undefined) => void;
setAutoplay: (newAutoplay?: import("./types").Autoplay) => void;
setPreload: (val?: HTMLMediaElement["preload"]) => void;
};
export declare const teardown: (mediaEl?: HTMLMediaElement | null, core?: PlaybackCore) => void;
export declare const setupHls: (props: Partial<Pick<MuxMediaPropsInternal, 'debug' | 'streamType' | 'type' | 'startTime' | 'metadata' | 'preferCmcd' | '_hlsConfig' | 'drmToken' | 'drmTypeCb'>>, mediaEl: Pick<HTMLMediaElement, 'canPlayType'>) => Hls | undefined;
export declare const setupHls: (props: Partial<Pick<MuxMediaPropsInternal, "debug" | "streamType" | "type" | "startTime" | "metadata" | "preferCmcd" | "_hlsConfig" | "drmToken" | "drmTypeCb">>, mediaEl: Pick<HTMLMediaElement, "canPlayType">) => Hls | undefined;
export declare const getStreamTypeConfig: (streamType?: ValueOf<StreamTypes>) => {};
export declare const getDRMConfig: (props: Partial<Pick<MuxMediaPropsInternal, 'src' | 'playbackId' | 'drmToken' | 'customDomain' | 'drmTypeCb'>>) => Partial<HlsConfig>;
export declare const getDRMConfig: (props: Partial<Pick<MuxMediaPropsInternal, "src" | "playbackId" | "drmToken" | "customDomain" | "drmTypeCb">>) => Partial<HlsConfig>;
export declare const getAppCertificate: (appCertificateUrl: string) => Promise<ArrayBuffer>;
export declare const getLicenseKey: (message: ArrayBuffer, licenseServerUrl: string) => Promise<Uint8Array>;
export declare const setupNativeFairplayDRM: (props: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'drmToken' | 'customDomain' | 'drmTypeCb'>>, mediaEl: HTMLMediaElement) => void;
export declare const toLicenseKeyURL: ({ playbackId, drmToken: token, customDomain, }: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'drmToken' | 'customDomain'>>, scheme: 'widevine' | 'playready' | 'fairplay') => string;
export declare const toAppCertURL: ({ playbackId, drmToken: token, customDomain, }: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'drmToken' | 'customDomain'>>, scheme: 'widevine' | 'playready' | 'fairplay') => string;
export declare const isMuxVideoSrc: ({ playbackId, src, customDomain, }: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'src' | 'customDomain'>>) => boolean;
export declare const setupMux: (props: Partial<Pick<MuxMediaPropsInternal, 'envKey' | 'playerInitTime' | 'beaconCollectionDomain' | 'errorTranslator' | 'metadata' | 'debug' | 'playerSoftwareName' | 'playerSoftwareVersion' | 'playbackId' | 'src' | 'customDomain' | 'disableCookies' | 'disableTracking'>>, mediaEl: HTMLMediaElement, hlsjs?: HlsInterface) => void;
export declare const loadMedia: (props: Partial<Pick<MuxMediaProps, 'preferPlayback' | 'src' | 'type' | 'startTime' | 'streamType' | 'autoplay' | 'playbackId' | 'drmToken' | 'customDomain'>>, mediaEl: HTMLMediaElement, hls?: Pick<Hls, 'config' | 'on' | 'once' | 'off' | 'trigger' | 'startLoad' | 'stopLoad' | 'recoverMediaError' | 'destroy' | 'loadSource' | 'attachMedia' | 'liveSyncPosition' | 'subtitleTracks' | 'subtitleTrack' | 'userConfig' | 'audioTrack' | 'audioTracks' | 'autoLevelEnabled' | 'nextLevel' | 'levels' | 'currentLevel'>) => void;
export declare const setupNativeFairplayDRM: (props: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "drmToken" | "customDomain" | "drmTypeCb">>, mediaEl: HTMLMediaElement) => void;
export declare const toLicenseKeyURL: ({ playbackId, drmToken: token, customDomain, }: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "drmToken" | "customDomain">>, scheme: "widevine" | "playready" | "fairplay") => string;
export declare const toAppCertURL: ({ playbackId, drmToken: token, customDomain, }: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "drmToken" | "customDomain">>, scheme: "widevine" | "playready" | "fairplay") => string;
export declare const isMuxVideoSrc: ({ playbackId, src, customDomain, }: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "src" | "customDomain">>) => boolean;
export declare const setupMux: (props: Partial<Pick<MuxMediaPropsInternal, "envKey" | "playerInitTime" | "beaconCollectionDomain" | "errorTranslator" | "metadata" | "debug" | "playerSoftwareName" | "playerSoftwareVersion" | "playbackId" | "src" | "customDomain" | "disableCookies" | "disableTracking">>, mediaEl: HTMLMediaElement, hlsjs?: HlsInterface) => void;
export declare const loadMedia: (props: Partial<Pick<MuxMediaProps, "preferPlayback" | "src" | "type" | "startTime" | "streamType" | "autoplay" | "playbackId" | "drmToken" | "customDomain">>, mediaEl: HTMLMediaElement, hls?: Pick<Hls, "config" | "on" | "once" | "off" | "trigger" | "startLoad" | "stopLoad" | "recoverMediaError" | "destroy" | "loadSource" | "attachMedia" | "liveSyncPosition" | "subtitleTracks" | "subtitleTrack" | "userConfig" | "audioTrack" | "audioTracks" | "autoLevelEnabled" | "nextLevel" | "levels" | "currentLevel">) => void;
import { PlaybackEngine } from './types';
export declare const setupPreload: ({ preload, src }: Partial<HTMLMediaElement>, mediaEl: HTMLMediaElement, hls?: PlaybackEngine) => (val?: HTMLMediaElement['preload']) => void;
export declare const setupPreload: ({ preload, src }: Partial<HTMLMediaElement>, mediaEl: HTMLMediaElement, hls?: PlaybackEngine) => (val?: HTMLMediaElement["preload"]) => void;

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

/// <reference types="mux-embed/dist/types/mux-embed" />
/// <reference path="../../../../node_modules/mux-embed/dist/types/mux-embed.d.ts" preserve="true" />
import type { Options } from 'mux-embed';

@@ -3,0 +3,0 @@ import type { MediaError } from './errors';

@@ -6,3 +6,3 @@ import type { HlsPlaylistTypes, MuxMediaProps } from './types';

export declare const toPlaybackIdParts: (playbackIdWithOptionalParams: string) => [string, string?];
export declare const getType: (props: Partial<Pick<MuxMediaProps, 'type' | 'src'>>) => "" | import("./types").MediaTypes;
export declare const getType: (props: Partial<Pick<MuxMediaProps, "type" | "src">>) => "" | import("./types").MediaTypes;
export declare const toStreamTypeFromPlaylistType: (playlistType: HlsPlaylistTypes) => "on-demand" | "live";

@@ -9,0 +9,0 @@ export declare const toTargetLiveWindowFromPlaylistType: (playlistType: HlsPlaylistTypes) => number;

{
"name": "@mux/playback-core",
"version": "0.25.2-canary.0-f6f99b3",
"version": "0.25.2-canary.0-ff78173",
"description": "Core library for media playback in the browser shared by mux elements",

@@ -41,3 +41,3 @@ "main": "./dist/index.cjs.js",

"clean": "shx rm -rf dist/",
"lint": "eslint src/ --ext .js,.jsx,.ts,.tsx",
"lint": "ESLINT_USE_FLAT_CONFIG=false eslint src/ --ext .js,.jsx,.ts,.tsx",
"test": "web-test-runner **/*.test.js --port 8004 --coverage --config test/web-test-runner.config.mjs --root-dir ../..",

@@ -68,3 +68,4 @@ "posttest": "replace 'SF:src/' 'SF:packages/playback-core/src/' coverage/lcov.info --silent",

"@open-wc/testing": "^4.0.0",
"@typescript-eslint/parser": "^5.48.0",
"@typescript-eslint/eslint-plugin": "^8.3.0",
"@typescript-eslint/parser": "^8.3.0",
"@web/dev-server-esbuild": "^1.0.2",

@@ -75,7 +76,7 @@ "@web/dev-server-import-maps": "^0.2.1",

"esbuild": "^0.19.8",
"eslint": "^8.24.0",
"eslint": "^9.9.1",
"npm-run-all": "^4.1.5",
"shx": "^0.3.4",
"typescript": "^4.9.4"
"typescript": "^5.5.4"
}
}

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