posthog-node
Advanced tools
@@ -142,4 +142,15 @@ import { FeatureFlagCondition, PostHogFeatureFlag, PropertyGroup } from '../../types'; | ||
| declare function matchProperty(property: FeatureFlagCondition['properties'][number], propertyValues: Record<string, any>, warnFunction?: (msg: string) => void): boolean; | ||
| type SemverTuple = [number, number, number]; | ||
| /** | ||
| * Parse a version string into a [major, minor, patch] tuple. | ||
| * - Strips leading/trailing whitespace | ||
| * - Strips 'v' or 'V' prefix | ||
| * - Strips pre-release and build metadata (-alpha, +build) | ||
| * - Defaults missing components to 0 | ||
| * - Ignores extra components beyond the third | ||
| * - Throws InconclusiveMatchError for invalid input | ||
| */ | ||
| declare function parseSemver(value: string): SemverTuple; | ||
| declare function relativeDateParseForFeatureFlagMatching(value: string): Date | null; | ||
| export { FeatureFlagsPoller, matchProperty, relativeDateParseForFeatureFlagMatching, InconclusiveMatchError, RequiresServerEvaluation, ClientError, }; | ||
| export { FeatureFlagsPoller, matchProperty, relativeDateParseForFeatureFlagMatching, parseSemver, InconclusiveMatchError, RequiresServerEvaluation, ClientError, }; | ||
| //# sourceMappingURL=feature-flags.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../src/extensions/feature-flags/feature-flags.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../src/extensions/feature-flags/feature-flags.ts"],"names":[],"mappings":"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"} |
@@ -28,2 +28,3 @@ "use strict"; | ||
| matchProperty: ()=>matchProperty, | ||
| parseSemver: ()=>parseSemver, | ||
| ClientError: ()=>ClientError, | ||
@@ -551,2 +552,50 @@ relativeDateParseForFeatureFlagMatching: ()=>relativeDateParseForFeatureFlagMatching, | ||
| } | ||
| case 'semver_eq': | ||
| { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))); | ||
| return 0 === cmp; | ||
| } | ||
| case 'semver_neq': | ||
| { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))); | ||
| return 0 !== cmp; | ||
| } | ||
| case 'semver_gt': | ||
| { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))); | ||
| return cmp > 0; | ||
| } | ||
| case 'semver_gte': | ||
| { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))); | ||
| return cmp >= 0; | ||
| } | ||
| case 'semver_lt': | ||
| { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))); | ||
| return cmp < 0; | ||
| } | ||
| case 'semver_lte': | ||
| { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))); | ||
| return cmp <= 0; | ||
| } | ||
| case 'semver_tilde': | ||
| { | ||
| const overrideParsed = parseSemver(String(overrideValue)); | ||
| const { lower, upper } = computeTildeBounds(String(value)); | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0; | ||
| } | ||
| case 'semver_caret': | ||
| { | ||
| const overrideParsed = parseSemver(String(overrideValue)); | ||
| const { lower, upper } = computeCaretBounds(String(value)); | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0; | ||
| } | ||
| case 'semver_wildcard': | ||
| { | ||
| const overrideParsed = parseSemver(String(overrideValue)); | ||
| const { lower, upper } = computeWildcardBounds(String(value)); | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0; | ||
| } | ||
| default: | ||
@@ -620,2 +669,111 @@ throw new InconclusiveMatchError(`Unknown operator: ${operator}`); | ||
| } | ||
| function parseSemver(value) { | ||
| const text = String(value).trim().replace(/^[vV]/, ''); | ||
| const baseVersion = text.split('-')[0].split('+')[0]; | ||
| if (!baseVersion || baseVersion.startsWith('.')) throw new InconclusiveMatchError(`Invalid semver: ${value}`); | ||
| const parts = baseVersion.split('.'); | ||
| const parsePart = (part)=>{ | ||
| if (void 0 === part || '' === part) return 0; | ||
| if (!/^\d+$/.test(part)) throw new InconclusiveMatchError(`Invalid semver: ${value}`); | ||
| return parseInt(part, 10); | ||
| }; | ||
| const major = parsePart(parts[0]); | ||
| const minor = parsePart(parts[1]); | ||
| const patch = parsePart(parts[2]); | ||
| return [ | ||
| major, | ||
| minor, | ||
| patch | ||
| ]; | ||
| } | ||
| function compareSemverTuples(a, b) { | ||
| for(let i = 0; i < 3; i++){ | ||
| if (a[i] < b[i]) return -1; | ||
| if (a[i] > b[i]) return 1; | ||
| } | ||
| return 0; | ||
| } | ||
| function computeTildeBounds(value) { | ||
| const parsed = parseSemver(value); | ||
| const lower = [ | ||
| parsed[0], | ||
| parsed[1], | ||
| parsed[2] | ||
| ]; | ||
| const upper = [ | ||
| parsed[0], | ||
| parsed[1] + 1, | ||
| 0 | ||
| ]; | ||
| return { | ||
| lower, | ||
| upper | ||
| }; | ||
| } | ||
| function computeCaretBounds(value) { | ||
| const parsed = parseSemver(value); | ||
| const [major, minor, patch] = parsed; | ||
| const lower = [ | ||
| major, | ||
| minor, | ||
| patch | ||
| ]; | ||
| let upper; | ||
| upper = major > 0 ? [ | ||
| major + 1, | ||
| 0, | ||
| 0 | ||
| ] : minor > 0 ? [ | ||
| 0, | ||
| minor + 1, | ||
| 0 | ||
| ] : [ | ||
| 0, | ||
| 0, | ||
| patch + 1 | ||
| ]; | ||
| return { | ||
| lower, | ||
| upper | ||
| }; | ||
| } | ||
| function computeWildcardBounds(value) { | ||
| const text = String(value).trim().replace(/^[vV]/, ''); | ||
| const cleanedText = text.replace(/\.\*$/, '').replace(/\*$/, ''); | ||
| if (!cleanedText) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`); | ||
| const parts = cleanedText.split('.'); | ||
| const major = parseInt(parts[0], 10); | ||
| if (isNaN(major)) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`); | ||
| let lower; | ||
| let upper; | ||
| if (1 === parts.length) { | ||
| lower = [ | ||
| major, | ||
| 0, | ||
| 0 | ||
| ]; | ||
| upper = [ | ||
| major + 1, | ||
| 0, | ||
| 0 | ||
| ]; | ||
| } else { | ||
| const minor = parseInt(parts[1], 10); | ||
| if (isNaN(minor)) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`); | ||
| lower = [ | ||
| major, | ||
| minor, | ||
| 0 | ||
| ]; | ||
| upper = [ | ||
| major, | ||
| minor + 1, | ||
| 0 | ||
| ]; | ||
| } | ||
| return { | ||
| lower, | ||
| upper | ||
| }; | ||
| } | ||
| function convertToDateTime(value) { | ||
@@ -656,2 +814,3 @@ if (value instanceof Date) return value; | ||
| exports.matchProperty = __webpack_exports__.matchProperty; | ||
| exports.parseSemver = __webpack_exports__.parseSemver; | ||
| exports.relativeDateParseForFeatureFlagMatching = __webpack_exports__.relativeDateParseForFeatureFlagMatching; | ||
@@ -664,2 +823,3 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [ | ||
| "matchProperty", | ||
| "parseSemver", | ||
| "relativeDateParseForFeatureFlagMatching" | ||
@@ -666,0 +826,0 @@ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; |
@@ -517,2 +517,50 @@ import { safeSetTimeout } from "@posthog/core"; | ||
| } | ||
| case 'semver_eq': | ||
| { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))); | ||
| return 0 === cmp; | ||
| } | ||
| case 'semver_neq': | ||
| { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))); | ||
| return 0 !== cmp; | ||
| } | ||
| case 'semver_gt': | ||
| { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))); | ||
| return cmp > 0; | ||
| } | ||
| case 'semver_gte': | ||
| { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))); | ||
| return cmp >= 0; | ||
| } | ||
| case 'semver_lt': | ||
| { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))); | ||
| return cmp < 0; | ||
| } | ||
| case 'semver_lte': | ||
| { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))); | ||
| return cmp <= 0; | ||
| } | ||
| case 'semver_tilde': | ||
| { | ||
| const overrideParsed = parseSemver(String(overrideValue)); | ||
| const { lower, upper } = computeTildeBounds(String(value)); | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0; | ||
| } | ||
| case 'semver_caret': | ||
| { | ||
| const overrideParsed = parseSemver(String(overrideValue)); | ||
| const { lower, upper } = computeCaretBounds(String(value)); | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0; | ||
| } | ||
| case 'semver_wildcard': | ||
| { | ||
| const overrideParsed = parseSemver(String(overrideValue)); | ||
| const { lower, upper } = computeWildcardBounds(String(value)); | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0; | ||
| } | ||
| default: | ||
@@ -586,2 +634,111 @@ throw new InconclusiveMatchError(`Unknown operator: ${operator}`); | ||
| } | ||
| function parseSemver(value) { | ||
| const text = String(value).trim().replace(/^[vV]/, ''); | ||
| const baseVersion = text.split('-')[0].split('+')[0]; | ||
| if (!baseVersion || baseVersion.startsWith('.')) throw new InconclusiveMatchError(`Invalid semver: ${value}`); | ||
| const parts = baseVersion.split('.'); | ||
| const parsePart = (part)=>{ | ||
| if (void 0 === part || '' === part) return 0; | ||
| if (!/^\d+$/.test(part)) throw new InconclusiveMatchError(`Invalid semver: ${value}`); | ||
| return parseInt(part, 10); | ||
| }; | ||
| const major = parsePart(parts[0]); | ||
| const minor = parsePart(parts[1]); | ||
| const patch = parsePart(parts[2]); | ||
| return [ | ||
| major, | ||
| minor, | ||
| patch | ||
| ]; | ||
| } | ||
| function compareSemverTuples(a, b) { | ||
| for(let i = 0; i < 3; i++){ | ||
| if (a[i] < b[i]) return -1; | ||
| if (a[i] > b[i]) return 1; | ||
| } | ||
| return 0; | ||
| } | ||
| function computeTildeBounds(value) { | ||
| const parsed = parseSemver(value); | ||
| const lower = [ | ||
| parsed[0], | ||
| parsed[1], | ||
| parsed[2] | ||
| ]; | ||
| const upper = [ | ||
| parsed[0], | ||
| parsed[1] + 1, | ||
| 0 | ||
| ]; | ||
| return { | ||
| lower, | ||
| upper | ||
| }; | ||
| } | ||
| function computeCaretBounds(value) { | ||
| const parsed = parseSemver(value); | ||
| const [major, minor, patch] = parsed; | ||
| const lower = [ | ||
| major, | ||
| minor, | ||
| patch | ||
| ]; | ||
| let upper; | ||
| upper = major > 0 ? [ | ||
| major + 1, | ||
| 0, | ||
| 0 | ||
| ] : minor > 0 ? [ | ||
| 0, | ||
| minor + 1, | ||
| 0 | ||
| ] : [ | ||
| 0, | ||
| 0, | ||
| patch + 1 | ||
| ]; | ||
| return { | ||
| lower, | ||
| upper | ||
| }; | ||
| } | ||
| function computeWildcardBounds(value) { | ||
| const text = String(value).trim().replace(/^[vV]/, ''); | ||
| const cleanedText = text.replace(/\.\*$/, '').replace(/\*$/, ''); | ||
| if (!cleanedText) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`); | ||
| const parts = cleanedText.split('.'); | ||
| const major = parseInt(parts[0], 10); | ||
| if (isNaN(major)) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`); | ||
| let lower; | ||
| let upper; | ||
| if (1 === parts.length) { | ||
| lower = [ | ||
| major, | ||
| 0, | ||
| 0 | ||
| ]; | ||
| upper = [ | ||
| major + 1, | ||
| 0, | ||
| 0 | ||
| ]; | ||
| } else { | ||
| const minor = parseInt(parts[1], 10); | ||
| if (isNaN(minor)) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`); | ||
| lower = [ | ||
| major, | ||
| minor, | ||
| 0 | ||
| ]; | ||
| upper = [ | ||
| major, | ||
| minor + 1, | ||
| 0 | ||
| ]; | ||
| } | ||
| return { | ||
| lower, | ||
| upper | ||
| }; | ||
| } | ||
| function convertToDateTime(value) { | ||
@@ -617,2 +774,2 @@ if (value instanceof Date) return value; | ||
| } | ||
| export { ClientError, FeatureFlagsPoller, InconclusiveMatchError, RequiresServerEvaluation, matchProperty, relativeDateParseForFeatureFlagMatching }; | ||
| export { ClientError, FeatureFlagsPoller, InconclusiveMatchError, RequiresServerEvaluation, matchProperty, parseSemver, relativeDateParseForFeatureFlagMatching }; |
@@ -1,2 +0,2 @@ | ||
| export declare const version = "5.27.0"; | ||
| export declare const version = "5.27.1"; | ||
| //# sourceMappingURL=version.d.ts.map |
+1
-1
@@ -29,3 +29,3 @@ "use strict"; | ||
| }); | ||
| const version = '5.27.0'; | ||
| const version = '5.27.1'; | ||
| exports.version = __webpack_exports__.version; | ||
@@ -32,0 +32,0 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [ |
+1
-1
@@ -1,2 +0,2 @@ | ||
| const version = '5.27.0'; | ||
| const version = '5.27.1'; | ||
| export { version }; |
+1
-1
| { | ||
| "name": "posthog-node", | ||
| "version": "5.27.0", | ||
| "version": "5.27.1", | ||
| "description": "PostHog Node.js integration", | ||
@@ -5,0 +5,0 @@ "repository": { |
@@ -1085,2 +1085,41 @@ import { FeatureFlagCondition, FlagProperty, FlagPropertyValue, PostHogFeatureFlag, PropertyGroup } from '../../types' | ||
| } | ||
| case 'semver_eq': { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))) | ||
| return cmp === 0 | ||
| } | ||
| case 'semver_neq': { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))) | ||
| return cmp !== 0 | ||
| } | ||
| case 'semver_gt': { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))) | ||
| return cmp > 0 | ||
| } | ||
| case 'semver_gte': { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))) | ||
| return cmp >= 0 | ||
| } | ||
| case 'semver_lt': { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))) | ||
| return cmp < 0 | ||
| } | ||
| case 'semver_lte': { | ||
| const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value))) | ||
| return cmp <= 0 | ||
| } | ||
| case 'semver_tilde': { | ||
| const overrideParsed = parseSemver(String(overrideValue)) | ||
| const { lower, upper } = computeTildeBounds(String(value)) | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0 | ||
| } | ||
| case 'semver_caret': { | ||
| const overrideParsed = parseSemver(String(overrideValue)) | ||
| const { lower, upper } = computeCaretBounds(String(value)) | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0 | ||
| } | ||
| case 'semver_wildcard': { | ||
| const overrideParsed = parseSemver(String(overrideValue)) | ||
| const { lower, upper } = computeWildcardBounds(String(value)) | ||
| return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0 | ||
| } | ||
| default: | ||
@@ -1237,2 +1276,128 @@ throw new InconclusiveMatchError(`Unknown operator: ${operator}`) | ||
| type SemverTuple = [number, number, number] | ||
| /** | ||
| * Parse a version string into a [major, minor, patch] tuple. | ||
| * - Strips leading/trailing whitespace | ||
| * - Strips 'v' or 'V' prefix | ||
| * - Strips pre-release and build metadata (-alpha, +build) | ||
| * - Defaults missing components to 0 | ||
| * - Ignores extra components beyond the third | ||
| * - Throws InconclusiveMatchError for invalid input | ||
| */ | ||
| function parseSemver(value: string): SemverTuple { | ||
| const text = String(value).trim().replace(/^[vV]/, '') | ||
| // Strip pre-release and build metadata | ||
| const baseVersion = text.split('-')[0].split('+')[0] | ||
| if (!baseVersion || baseVersion.startsWith('.')) { | ||
| throw new InconclusiveMatchError(`Invalid semver: ${value}`) | ||
| } | ||
| const parts = baseVersion.split('.') | ||
| const parsePart = (part: string | undefined): number => { | ||
| if (part === undefined || part === '') { | ||
| return 0 | ||
| } | ||
| if (!/^\d+$/.test(part)) { | ||
| throw new InconclusiveMatchError(`Invalid semver: ${value}`) | ||
| } | ||
| return parseInt(part, 10) | ||
| } | ||
| const major = parsePart(parts[0]) | ||
| const minor = parsePart(parts[1]) | ||
| const patch = parsePart(parts[2]) | ||
| return [major, minor, patch] | ||
| } | ||
| /** | ||
| * Compare two semver tuples. | ||
| * Returns -1 if a < b, 0 if a == b, 1 if a > b | ||
| */ | ||
| function compareSemverTuples(a: SemverTuple, b: SemverTuple): number { | ||
| for (let i = 0; i < 3; i++) { | ||
| if (a[i] < b[i]) return -1 | ||
| if (a[i] > b[i]) return 1 | ||
| } | ||
| return 0 | ||
| } | ||
| /** | ||
| * Compute bounds for tilde operator: ~X.Y.Z means >=X.Y.Z and <X.(Y+1).0 | ||
| */ | ||
| function computeTildeBounds(value: string): { lower: SemverTuple; upper: SemverTuple } { | ||
| const parsed = parseSemver(value) | ||
| const lower: SemverTuple = [parsed[0], parsed[1], parsed[2]] | ||
| const upper: SemverTuple = [parsed[0], parsed[1] + 1, 0] | ||
| return { lower, upper } | ||
| } | ||
| /** | ||
| * Compute bounds for caret operator: | ||
| * - ^X.Y.Z where X > 0: >=X.Y.Z <(X+1).0.0 | ||
| * - ^0.Y.Z where Y > 0: >=0.Y.Z <0.(Y+1).0 | ||
| * - ^0.0.Z: >=0.0.Z <0.0.(Z+1) | ||
| */ | ||
| function computeCaretBounds(value: string): { lower: SemverTuple; upper: SemverTuple } { | ||
| const parsed = parseSemver(value) | ||
| const [major, minor, patch] = parsed | ||
| const lower: SemverTuple = [major, minor, patch] | ||
| let upper: SemverTuple | ||
| if (major > 0) { | ||
| upper = [major + 1, 0, 0] | ||
| } else if (minor > 0) { | ||
| upper = [0, minor + 1, 0] | ||
| } else { | ||
| upper = [0, 0, patch + 1] | ||
| } | ||
| return { lower, upper } | ||
| } | ||
| /** | ||
| * Compute bounds for wildcard operator: | ||
| * - "X.*" or "X" with wildcard: >=X.0.0 <(X+1).0.0 | ||
| * - "X.Y.*": >=X.Y.0 <X.(Y+1).0 | ||
| */ | ||
| function computeWildcardBounds(value: string): { lower: SemverTuple; upper: SemverTuple } { | ||
| const text = String(value).trim().replace(/^[vV]/, '') | ||
| // Remove trailing .* or * | ||
| const cleanedText = text.replace(/\.\*$/, '').replace(/\*$/, '') | ||
| if (!cleanedText) { | ||
| throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`) | ||
| } | ||
| const parts = cleanedText.split('.') | ||
| const major = parseInt(parts[0], 10) | ||
| if (isNaN(major)) { | ||
| throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`) | ||
| } | ||
| let lower: SemverTuple | ||
| let upper: SemverTuple | ||
| if (parts.length === 1) { | ||
| // X.* pattern | ||
| lower = [major, 0, 0] | ||
| upper = [major + 1, 0, 0] | ||
| } else { | ||
| // X.Y.* pattern | ||
| const minor = parseInt(parts[1], 10) | ||
| if (isNaN(minor)) { | ||
| throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`) | ||
| } | ||
| lower = [major, minor, 0] | ||
| upper = [major, minor + 1, 0] | ||
| } | ||
| return { lower, upper } | ||
| } | ||
| function convertToDateTime(value: FlagPropertyValue | Date): Date { | ||
@@ -1293,2 +1458,3 @@ if (value instanceof Date) { | ||
| relativeDateParseForFeatureFlagMatching, | ||
| parseSemver, | ||
| InconclusiveMatchError, | ||
@@ -1295,0 +1461,0 @@ RequiresServerEvaluation, |
+1
-1
@@ -1,1 +0,1 @@ | ||
| export const version = '5.27.0' | ||
| export const version = '5.27.1' |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
519160
3.1%11581
4.27%38
8.57%