Socket
Socket
Sign inDemoInstall

@metamask/snaps-utils

Package Overview
Dependencies
Maintainers
8
Versions
71
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@metamask/snaps-utils - npm Package Compare versions

Comparing version 0.24.1 to 0.25.0

6

dist/caveats.d.ts

@@ -21,3 +21,7 @@ export declare enum SnapCaveatType {

*/
TransactionOrigin = "transactionOrigin"
TransactionOrigin = "transactionOrigin",
/**
* The origins that a Snap can receive JSON-RPC messages from.
*/
RpcOrigin = "rpcOrigin"
}

@@ -26,3 +26,7 @@ "use strict";

SnapCaveatType["TransactionOrigin"] = "transactionOrigin";
/**
* The origins that a Snap can receive JSON-RPC messages from.
*/
SnapCaveatType["RpcOrigin"] = "rpcOrigin";
})(SnapCaveatType = exports.SnapCaveatType || (exports.SnapCaveatType = {}));
//# sourceMappingURL=caveats.js.map

2

dist/eval.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.evalBundle = void 0;
const child_process_1 = require("child_process");
const path_1 = require("path");
const child_process_1 = require("child_process");
const fs_1 = require("./fs");

@@ -7,0 +7,0 @@ const WORKER_PATH = (0, path_1.join)(__dirname, 'eval-worker.js');

@@ -1,3 +0,21 @@

import { Json, JsonRpcSuccess } from '@metamask/utils';
import { Json, JsonRpcSuccess, AssertionErrorConstructor } from '@metamask/utils';
import { Infer } from 'superstruct';
export declare const RpcOriginsStruct: import("superstruct").Struct<{
dapps?: boolean | undefined;
snaps?: boolean | undefined;
}, {
dapps: import("superstruct").Struct<boolean | undefined, null>;
snaps: import("superstruct").Struct<boolean | undefined, null>;
}>;
export declare type RpcOrigins = Infer<typeof RpcOriginsStruct>;
/**
* Asserts that the given value is a valid {@link RpcOrigins} object.
*
* @param value - The value to assert.
* @param ErrorWrapper - An optional error wrapper to use. Defaults to
* {@link AssertionError}.
* @throws If the value is not a valid {@link RpcOrigins} object.
*/
export declare function assertIsRpcOrigins(value: unknown, ErrorWrapper?: AssertionErrorConstructor): asserts value is RpcOrigins;
/**
* Assert that the given value is a successful JSON-RPC response. If the value

@@ -4,0 +22,0 @@ * is not a success response, an error is thrown. If the value is an JSON-RPC

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.assertIsJsonRpcSuccess = void 0;
exports.assertIsJsonRpcSuccess = exports.assertIsRpcOrigins = exports.RpcOriginsStruct = void 0;
const utils_1 = require("@metamask/utils");
const superstruct_1 = require("superstruct");
exports.RpcOriginsStruct = (0, superstruct_1.refine)((0, superstruct_1.object)({
dapps: (0, superstruct_1.optional)((0, superstruct_1.boolean)()),
snaps: (0, superstruct_1.optional)((0, superstruct_1.boolean)()),
}), 'RPC origins', (value) => {
if (!Object.values(value).some(Boolean)) {
throw new Error('Must specify at least one JSON-RPC origin');
}
return true;
});
/**
* Asserts that the given value is a valid {@link RpcOrigins} object.
*
* @param value - The value to assert.
* @param ErrorWrapper - An optional error wrapper to use. Defaults to
* {@link AssertionError}.
* @throws If the value is not a valid {@link RpcOrigins} object.
*/
function assertIsRpcOrigins(value,
// eslint-disable-next-line @typescript-eslint/naming-convention
ErrorWrapper) {
(0, utils_1.assertStruct)(value, exports.RpcOriginsStruct, 'Invalid JSON-RPC origins', ErrorWrapper);
}
exports.assertIsRpcOrigins = assertIsRpcOrigins;
/**
* Assert that the given value is a successful JSON-RPC response. If the value

@@ -7,0 +31,0 @@ * is not a success response, an error is thrown. If the value is an JSON-RPC

@@ -18,5 +18,6 @@ "use strict";

exports.validateNpmSnapManifest = exports.getWritableManifest = exports.getSnapSourceCode = exports.fixManifest = exports.checkManifest = void 0;
const utils_1 = require("@metamask/utils");
const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
const fs_1 = require("fs");
const path_1 = __importDefault(require("path"));
const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
const deep_clone_1 = require("../deep-clone");

@@ -156,6 +157,4 @@ const fs_2 = require("../fs");

/* istanbul ignore next */
default: {
const failureReason = error.reason;
throw new Error(`Unrecognized validation failure reason: '${failureReason}'`);
}
default:
(0, utils_1.assertExhaustive)(error.reason);
}

@@ -199,5 +198,6 @@ return manifestCopy;

const keys = Object.keys(repository ? Object.assign(Object.assign({}, remaining), { repository }) : remaining);
return keys
const writableManifest = keys
.sort((a, b) => MANIFEST_SORT_ORDER[a] - MANIFEST_SORT_ORDER[b])
.reduce((result, key) => (Object.assign(Object.assign({}, result), { [key]: manifest[key] })), {});
return writableManifest;
}

@@ -204,0 +204,0 @@ exports.getWritableManifest = getWritableManifest;

@@ -72,2 +72,6 @@ import { Infer, Struct } from 'superstruct';

} | undefined;
'endowment:rpc'?: {
dapps?: boolean | undefined;
snaps?: boolean | undefined;
} | undefined;
snap_confirm?: {} | undefined;

@@ -148,2 +152,9 @@ snap_manageState?: {} | undefined;

}>;
'endowment:rpc': Struct<{
dapps?: boolean | undefined;
snaps?: boolean | undefined;
} | undefined, {
dapps: Struct<boolean | undefined, null>;
snaps: Struct<boolean | undefined, null>;
}>;
snap_confirm: Struct<{} | undefined, {}>;

@@ -208,3 +219,3 @@ snap_manageState: Struct<{} | undefined, {}>;

export declare const SnapManifestStruct: Struct<{
version: string;
version: import("../versions").SemVerVersion;
description: string;

@@ -240,2 +251,6 @@ proposedName: string;

} | undefined;
'endowment:rpc'?: {
dapps?: boolean | undefined;
snaps?: boolean | undefined;
} | undefined;
snap_confirm?: {} | undefined;

@@ -273,3 +288,3 @@ snap_manageState?: {} | undefined;

}, {
version: Struct<string, null>;
version: Struct<import("../versions").SemVerVersion, null>;
description: Struct<string, null>;

@@ -334,2 +349,6 @@ proposedName: Struct<string, null>;

} | undefined;
'endowment:rpc'?: {
dapps?: boolean | undefined;
snaps?: boolean | undefined;
} | undefined;
snap_confirm?: {} | undefined;

@@ -410,2 +429,9 @@ snap_manageState?: {} | undefined;

}>;
'endowment:rpc': Struct<{
dapps?: boolean | undefined;
snaps?: boolean | undefined;
} | undefined, {
dapps: Struct<boolean | undefined, null>;
snaps: Struct<boolean | undefined, null>;
}>;
snap_confirm: Struct<{} | undefined, {}>;

@@ -412,0 +438,0 @@ snap_manageState: Struct<{} | undefined, {}>;

@@ -7,4 +7,6 @@ "use strict";

const cronjob_1 = require("../cronjob");
const json_rpc_1 = require("../json-rpc");
const namespace_1 = require("../namespace");
const types_1 = require("../types");
const versions_1 = require("../versions");
// 0xd36e6170 - 0x80000000

@@ -55,3 +57,3 @@ exports.SIP_6_MAGIC_VALUE = `1399742832'`;

}
if (path.slice(1).some((e) => !BIP32_INDEX_REGEX.test(e))) {
if (path.slice(1).some((part) => !BIP32_INDEX_REGEX.test(part))) {
return 'Path must be a valid BIP-32 derivation path array.';

@@ -66,3 +68,3 @@ }

if (value.curve === 'ed25519' &&
value.path.slice(1).some((e) => !e.endsWith("'"))) {
value.path.slice(1).some((part) => !part.endsWith("'"))) {
return 'Ed25519 does not support unhardened paths.';

@@ -79,2 +81,3 @@ }

exports.SnapGetBip32EntropyPermissionsStruct = (0, superstruct_1.size)((0, superstruct_1.array)(exports.Bip32EntropyStruct), 1, Infinity);
/* eslint-disable @typescript-eslint/naming-convention */
exports.PermissionsStruct = (0, superstruct_1.type)({

@@ -87,2 +90,3 @@ 'endowment:long-running': (0, superstruct_1.optional)((0, superstruct_1.object)({})),

'endowment:cronjob': (0, superstruct_1.optional)((0, superstruct_1.object)({ jobs: cronjob_1.CronjobSpecificationArrayStruct })),
'endowment:rpc': (0, superstruct_1.optional)(json_rpc_1.RpcOriginsStruct),
snap_confirm: (0, superstruct_1.optional)((0, superstruct_1.object)({})),

@@ -100,3 +104,3 @@ snap_manageState: (0, superstruct_1.optional)((0, superstruct_1.object)({})),

exports.SnapManifestStruct = (0, superstruct_1.object)({
version: types_1.VersionStruct,
version: versions_1.VersionStruct,
description: (0, superstruct_1.size)((0, superstruct_1.string)(), 1, 280),

@@ -103,0 +107,0 @@ proposedName: (0, superstruct_1.size)((0, superstruct_1.pattern)((0, superstruct_1.string)(), /^(?:[A-Za-z0-9-_]+( [A-Za-z0-9-_]+)*)|(?:(?:@[A-Za-z0-9-*~][A-Za-z0-9-*._~]*\/)?[A-Za-z0-9-~][A-Za-z0-9-._~]*)$/u), 1, 214),

@@ -7,4 +7,4 @@ "use strict";

exports.generateMockEndowments = exports.isConstructor = exports.ALL_APIS = void 0;
const crypto_1 = __importDefault(require("crypto"));
const events_1 = __importDefault(require("events"));
const crypto_1 = __importDefault(require("crypto"));
const default_endowments_1 = require("./default-endowments");

@@ -19,2 +19,3 @@ const NETWORK_APIS = ['fetch', 'WebSocket'];

function getMockSnapGlobal() {
// eslint-disable-next-line @typescript-eslint/require-await
return { request: async () => true };

@@ -29,2 +30,3 @@ }

const mockProvider = new events_1.default();
// eslint-disable-next-line @typescript-eslint/require-await
mockProvider.request = async () => true;

@@ -50,2 +52,3 @@ return mockProvider;

const handler = {
// eslint-disable-next-line @typescript-eslint/naming-convention
construct(Target, args) {

@@ -52,0 +55,0 @@ return new Proxy(new Target(...args), handler);

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

import { AssertionErrorConstructor } from '@metamask/utils';
import { Infer } from 'superstruct';
import { AssertionErrorConstructor } from '@metamask/utils';
export declare const CHAIN_ID_REGEX: RegExp;

@@ -4,0 +4,0 @@ export declare const ACCOUNT_ID_REGEX: RegExp;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.assertIsNamespacesObject = exports.isNamespacesObject = exports.isNamespace = exports.assertIsMultiChainRequest = exports.isMultiChainRequest = exports.assertIsConnectArguments = exports.isConnectArguments = exports.isAccountIdArray = exports.isAccountId = exports.isChainId = exports.isNamespaceId = exports.MultiChainRequestStruct = exports.RequestArgumentsStruct = exports.ConnectArgumentsStruct = exports.assertIsSession = exports.SessionStruct = exports.NamespacesStruct = exports.NamespaceIdStruct = exports.SessionNamespaceStruct = exports.RequestNamespaceStruct = exports.NamespaceStruct = exports.ChainStruct = exports.AccountIdArrayStruct = exports.AccountIdStruct = exports.ChainIdStruct = exports.LimitedString = exports.parseAccountId = exports.parseChainId = exports.ACCOUNT_ID_REGEX = exports.CHAIN_ID_REGEX = void 0;
const utils_1 = require("@metamask/utils");
const superstruct_1 = require("superstruct");
const utils_1 = require("@metamask/utils");
exports.CHAIN_ID_REGEX = /^(?<namespace>[-a-z0-9]{3,8}):(?<reference>[-a-zA-Z0-9]{1,32})$/u;

@@ -219,3 +219,5 @@ exports.ACCOUNT_ID_REGEX = /^(?<chainId>(?<namespace>[-a-z0-9]{3,8}):(?<reference>[-a-zA-Z0-9]{1,32})):(?<accountAddress>[a-zA-Z0-9]{1,64})$/u;

*/
function assertIsNamespacesObject(value, ErrorWrapper) {
function assertIsNamespacesObject(value,
// eslint-disable-next-line @typescript-eslint/naming-convention
ErrorWrapper) {
(0, utils_1.assertStruct)(value, exports.NamespacesStruct, 'Invalid namespaces object', ErrorWrapper);

@@ -222,0 +224,0 @@ }

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.assertIsMetaMaskNotification = exports.isMetaMaskNotification = exports.MetaMaskNotificationStruct = exports.assertIsEvent = exports.isEvent = exports.EventStruct = void 0;
const utils_1 = require("@metamask/utils");
const superstruct_1 = require("superstruct");
const utils_1 = require("@metamask/utils");
const namespace_1 = require("./namespace");

@@ -7,0 +7,0 @@ exports.EventStruct = (0, superstruct_1.object)({

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.postProcessBundle = exports.PostProcessWarning = void 0;
// eslint-disable-next-line @typescript-eslint/no-shadow
const core_1 = require("@babel/core");
const types_1 = require("@babel/types");
const core_1 = require("@babel/core");
var PostProcessWarning;

@@ -249,3 +250,3 @@ (function (PostProcessWarning) {

}, [[], []]);
path.replaceWith((0, types_1.templateLiteral)(replacementQuasis, replacementExpressions.filter((e) => e !== undefined)));
path.replaceWith((0, types_1.templateLiteral)(replacementQuasis, replacementExpressions.filter((expression) => expression !== undefined)));
path.setData('visited', true);

@@ -252,0 +253,0 @@ },

@@ -5,2 +5,3 @@ import { Json } from '@metamask/utils';

import { SnapId, SnapIdPrefixes, SnapValidationFailureReason } from './types';
import { SemVerVersion } from './versions';
export declare const LOCALHOST_HOSTNAMES: Set<string>;

@@ -97,3 +98,3 @@ export declare const SNAP_PREFIX = "wallet_snap_";

*/
version: string;
version: SemVerVersion;
/**

@@ -100,0 +101,0 @@ * The version history of the Snap.

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

function getSnapPrefix(snapId) {
const prefix = Object.values(types_1.SnapIdPrefixes).find((p) => snapId.startsWith(p));
const prefix = Object.values(types_1.SnapIdPrefixes).find((possiblePrefix) => snapId.startsWith(possiblePrefix));
if (prefix !== undefined) {

@@ -103,3 +103,3 @@ return prefix;

if (!snapId || typeof snapId !== 'string') {
throw new Error(`Invalid snap id. Not a string. Received "${snapId}"`);
throw new Error(`Invalid snap id. Not a string.`);
}

@@ -106,0 +106,0 @@ for (const prefix of Object.values(types_1.SnapIdPrefixes)) {

@@ -9,10 +9,6 @@ import { SnapFunctionExports, SnapKeyring as Keyring } from '@metamask/snaps-types';

}
/**
* A struct for validating a version string.
*/
export declare const VersionStruct: import("superstruct").Struct<string, null>;
export declare const NameStruct: import("superstruct").Struct<string, null>;
export declare const NpmSnapPackageJsonStruct: import("superstruct").Struct<{
name: string;
version: string;
version: import("./versions").SemVerVersion;
repository?: {

@@ -24,3 +20,3 @@ type: string;

}, {
version: import("superstruct").Struct<string, null>;
version: import("superstruct").Struct<import("./versions").SemVerVersion, null>;
name: import("superstruct").Struct<string, null>;

@@ -109,2 +105,6 @@ main: import("superstruct").Struct<string | undefined, null>;

export declare type SnapExportsParameters = ObjectParameters<SnapFunctionExports> | KeyringParameters;
declare const brand: unique symbol;
export declare type Opaque<Base, Brand extends symbol> = Base & {
[brand]: Brand;
};
export {};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SNAP_EXPORT_NAMES = exports.HandlerType = exports.SNAP_STREAM_NAMES = exports.SnapValidationFailureReason = exports.SnapIdPrefixes = exports.assertIsNpmSnapPackageJson = exports.isNpmSnapPackageJson = exports.NpmSnapPackageJsonStruct = exports.NameStruct = exports.VersionStruct = exports.NpmSnapFileNames = void 0;
exports.SNAP_EXPORT_NAMES = exports.HandlerType = exports.SNAP_STREAM_NAMES = exports.SnapValidationFailureReason = exports.SnapIdPrefixes = exports.assertIsNpmSnapPackageJson = exports.isNpmSnapPackageJson = exports.NpmSnapPackageJsonStruct = exports.NameStruct = exports.NpmSnapFileNames = void 0;
const utils_1 = require("@metamask/utils");
const semver_1 = require("semver");
const superstruct_1 = require("superstruct");
const versions_1 = require("./versions");
var NpmSnapFileNames;

@@ -12,8 +12,2 @@ (function (NpmSnapFileNames) {

})(NpmSnapFileNames = exports.NpmSnapFileNames || (exports.NpmSnapFileNames = {}));
/**
* A struct for validating a version string.
*/
exports.VersionStruct = (0, superstruct_1.refine)((0, superstruct_1.string)(), 'Version', (value) => {
return (0, semver_1.valid)(value) !== null;
});
exports.NameStruct = (0, superstruct_1.size)((0, superstruct_1.pattern)((0, superstruct_1.string)(), /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/u), 1, 214);

@@ -23,3 +17,3 @@ // Note we use `type` instead of `object` here, because the latter does not

exports.NpmSnapPackageJsonStruct = (0, superstruct_1.type)({
version: exports.VersionStruct,
version: versions_1.VersionStruct,
name: exports.NameStruct,

@@ -55,2 +49,3 @@ main: (0, superstruct_1.optional)((0, superstruct_1.size)((0, superstruct_1.string)(), 1, Infinity)),

*/
/* eslint-disable @typescript-eslint/naming-convention */
var SnapIdPrefixes;

@@ -72,2 +67,3 @@ (function (SnapIdPrefixes) {

})(SnapValidationFailureReason = exports.SnapValidationFailureReason || (exports.SnapValidationFailureReason = {}));
/* eslint-disable @typescript-eslint/naming-convention */
var SNAP_STREAM_NAMES;

@@ -78,2 +74,3 @@ (function (SNAP_STREAM_NAMES) {

})(SNAP_STREAM_NAMES = exports.SNAP_STREAM_NAMES || (exports.SNAP_STREAM_NAMES = {}));
/* eslint-enable @typescript-eslint/naming-convention */
var HandlerType;

@@ -80,0 +77,0 @@ (function (HandlerType) {

import { Json } from '@metamask/utils';
export declare const DEFAULT_REQUESTED_SNAP_VERSION = "*";
import { Struct } from 'superstruct';
import { Opaque } from './types';
export declare const DEFAULT_REQUESTED_SNAP_VERSION: SemVerRange;
/**
* {@link https://codemix.com/opaque-types-in-javascript/ Opaque} type for SemVer ranges.
*
* @example Use {@link assertIsSemVerRange} and {@link isValidSemVerRange} to cast to proper type.
* ```typescript
* const unsafeRange: string = dataFromUser();
* assertIsSemVerRange(unsafeRange);
* unsafeRange
* // ^? SemVerRange
* ```
* @example If you know what you're doing and want to side-step type safety, casting from a string works correctly.
* ```typescript
* const unsafeRange: string = dataFromUser();
* unsafeRange as SemVerRange;
* // ^? SemVerRange
* ```
* @see {@link assertIsSemVerRange}
* @see {@link isValidSemVerRange}
*/
export declare type SemVerRange = Opaque<string, typeof semVerRange>;
declare const semVerRange: unique symbol;
/**
* {@link https://codemix.com/opaque-types-in-javascript/ Opaque} type for singular SemVer version.
*
* @example Use {@link assertIsSemVerVersion} and {@link isValidSemVerVersion} to cast to proper type.
* ```typescript
* const unsafeVersion: string = dataFromUser();
* assertIsSemVerVersion(unsafeRange);
* unsafeVersion
* // ^? SemVerVersion
* ```
* @example If you know what you're doing and want to side-step type safety, casting from a string works correctly.
* ```typescript
* const unsafeVersion: string = dataFromUser();
* unsafeRange as SemVerVersion;
* // ^? SemVerVersion
* ```
* @see {@link assertIsSemVerVersion}
* @see {@link isValidSemVerVersion}
*/
export declare type SemVerVersion = Opaque<string, typeof semVerVersion>;
declare const semVerVersion: unique symbol;
/**
* A struct for validating a version string.
*/
export declare const VersionStruct: Struct<SemVerVersion, null>;
export declare const VersionRangeStruct: Struct<SemVerRange, null>;
/**
* Checks whether a SemVer version is valid.
*
* @param version - A potential version.
* @returns `true` if the version is valid, and `false` otherwise.
*/
export declare function isValidSemVerVersion(version: unknown): version is SemVerVersion;
/**
* Checks whether a SemVer version range is valid.
*
* @param versionRange - A potential version range.
* @returns `true` if the version range is valid, and `false` otherwise.
*/
export declare function isValidSemVerRange(versionRange: unknown): versionRange is SemVerRange;
/**
* Asserts that a value is a valid concrete SemVer version.
*
* @param version - A potential SemVer concrete version.
*/
export declare function assertIsSemVerVersion(version: unknown): asserts version is SemVerVersion;
/**
* Asserts that a value is a valid SemVer range.
*
* @param range - A potential SemVer range.
*/
export declare function assertIsSemVerRange(range: unknown): asserts range is SemVerRange;
/**
* Checks whether a SemVer version is greater than another.

@@ -10,3 +85,3 @@ *

*/
export declare function gtVersion(version1: string, version2: string): boolean;
export declare function gtVersion(version1: SemVerVersion, version2: SemVerVersion): boolean;
/**

@@ -19,3 +94,3 @@ * Returns whether a SemVer version satisfies a SemVer range.

*/
export declare function satisfiesVersionRange(version: string, versionRange: string): boolean;
export declare function satisfiesVersionRange(version: SemVerVersion, versionRange: SemVerRange): boolean;
/**

@@ -31,3 +106,3 @@ * Return the highest version in the list that satisfies the range, or `null` if

*/
export declare function getTargetVersion(versions: string[], versionRange: string): string | null;
export declare function getTargetVersion(versions: SemVerVersion[], versionRange: SemVerRange): SemVerVersion | null;
/**

@@ -40,9 +115,3 @@ * Parse a version received by some subject attempting to access a snap.

*/
export declare function resolveVersion(version?: Json): Json;
/**
* Checks whether a SemVer version range is valid.
*
* @param versionRange - A potential version range.
* @returns `true` if the version range is valid, and `false` otherwise.
*/
export declare function isValidSnapVersionRange(versionRange: unknown): versionRange is string;
export declare function resolveVersionRange(version?: Json): [error: undefined, range: SemVerRange] | [error: Error, range: undefined];
export {};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.isValidSnapVersionRange = exports.resolveVersion = exports.getTargetVersion = exports.satisfiesVersionRange = exports.gtVersion = exports.DEFAULT_REQUESTED_SNAP_VERSION = void 0;
exports.resolveVersionRange = exports.getTargetVersion = exports.satisfiesVersionRange = exports.gtVersion = exports.assertIsSemVerRange = exports.assertIsSemVerVersion = exports.isValidSemVerRange = exports.isValidSemVerVersion = exports.VersionRangeStruct = exports.VersionStruct = exports.DEFAULT_REQUESTED_SNAP_VERSION = void 0;
const utils_1 = require("@metamask/utils");
const semver_1 = require("semver");
const superstruct_1 = require("superstruct");
exports.DEFAULT_REQUESTED_SNAP_VERSION = '*';
/**
* A struct for validating a version string.
*/
exports.VersionStruct = (0, superstruct_1.refine)((0, superstruct_1.string)(), 'Version', (value) => {
if ((0, semver_1.valid)(value) === null) {
return `Expected SemVer version, got "${value}"`;
}
return true;
});
exports.VersionRangeStruct = (0, superstruct_1.refine)((0, superstruct_1.string)(), 'Version range', (value) => {
if ((0, semver_1.validRange)(value) === null) {
return `Expected SemVer range, got "${value}"`;
}
return true;
});
/**
* Checks whether a SemVer version is valid.
*
* @param version - A potential version.
* @returns `true` if the version is valid, and `false` otherwise.
*/
function isValidSemVerVersion(version) {
return (0, superstruct_1.is)(version, exports.VersionStruct);
}
exports.isValidSemVerVersion = isValidSemVerVersion;
/**
* Checks whether a SemVer version range is valid.
*
* @param versionRange - A potential version range.
* @returns `true` if the version range is valid, and `false` otherwise.
*/
function isValidSemVerRange(versionRange) {
return (0, superstruct_1.is)(versionRange, exports.VersionRangeStruct);
}
exports.isValidSemVerRange = isValidSemVerRange;
/**
* Asserts that a value is a valid concrete SemVer version.
*
* @param version - A potential SemVer concrete version.
*/
function assertIsSemVerVersion(version) {
(0, utils_1.assertStruct)(version, exports.VersionStruct);
}
exports.assertIsSemVerVersion = assertIsSemVerVersion;
/**
* Asserts that a value is a valid SemVer range.
*
* @param range - A potential SemVer range.
*/
function assertIsSemVerRange(range) {
(0, utils_1.assertStruct)(range, exports.VersionRangeStruct);
}
exports.assertIsSemVerRange = assertIsSemVerRange;
/**
* Checks whether a SemVer version is greater than another.

@@ -14,3 +69,3 @@ *

function gtVersion(version1, version2) {
return (0, semver_1.gt)(version1, version2, { includePrerelease: true });
return (0, semver_1.gt)(version1, version2);
}

@@ -60,20 +115,9 @@ exports.gtVersion = gtVersion;

*/
function resolveVersion(version) {
function resolveVersionRange(version) {
if (version === undefined || version === 'latest') {
return exports.DEFAULT_REQUESTED_SNAP_VERSION;
return [undefined, exports.DEFAULT_REQUESTED_SNAP_VERSION];
}
return version;
return (0, superstruct_1.validate)(version, exports.VersionRangeStruct);
}
exports.resolveVersion = resolveVersion;
/**
* Checks whether a SemVer version range is valid.
*
* @param versionRange - A potential version range.
* @returns `true` if the version range is valid, and `false` otherwise.
*/
function isValidSnapVersionRange(versionRange) {
return Boolean(typeof versionRange === 'string' &&
(0, semver_1.validRange)(versionRange, { includePrerelease: true }) !== null);
}
exports.isValidSnapVersionRange = isValidSnapVersionRange;
exports.resolveVersionRange = resolveVersionRange;
//# sourceMappingURL=versions.js.map
{
"name": "@metamask/snaps-utils",
"version": "0.24.1",
"version": "0.25.0",
"repository": {

@@ -55,3 +55,3 @@ "type": "git",

"@babel/types": "^7.18.7",
"@metamask/snaps-types": "^0.24.1",
"@metamask/snaps-types": "^0.25.0",
"@metamask/utils": "^3.3.1",

@@ -70,25 +70,27 @@ "@noble/hashes": "^1.1.3",

"@lavamoat/allow-scripts": "^2.0.3",
"@metamask/auto-changelog": "^2.6.0",
"@metamask/eslint-config": "^9.0.0",
"@metamask/eslint-config-jest": "^9.0.0",
"@metamask/eslint-config-nodejs": "^9.0.0",
"@metamask/eslint-config-typescript": "^9.0.1",
"@metamask/auto-changelog": "^3.1.0",
"@metamask/eslint-config": "^11.0.0",
"@metamask/eslint-config-jest": "^11.0.0",
"@metamask/eslint-config-nodejs": "^11.0.1",
"@metamask/eslint-config-typescript": "^11.0.0",
"@types/jest": "^27.5.1",
"@types/semver": "^7.3.10",
"@typescript-eslint/eslint-plugin": "^5.42.1",
"@typescript-eslint/parser": "^5.42.1",
"deepmerge": "^4.2.2",
"eslint": "^7.30.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.23.4",
"eslint-plugin-jest": "^24.4.0",
"eslint-plugin-jsdoc": "^36.1.0",
"eslint": "^8.27.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-jest": "^27.1.5",
"eslint-plugin-jsdoc": "^39.6.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-prettier": "^4.2.1",
"jest": "^29.0.2",
"jest-it-up": "^2.0.0",
"memfs": "^3.4.7",
"prettier": "^2.3.2",
"prettier": "^2.7.1",
"prettier-plugin-packagejson": "^2.2.11",
"rimraf": "^3.0.2",
"ts-jest": "^29.0.0",
"typescript": "^4.4.0"
"typescript": "~4.8.4"
},

@@ -95,0 +97,0 @@ "engines": {

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

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