{"version":3,"file":"validation.mjs","sourceRoot":"","sources":["../../src/manifest/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SupportedCurve } from '@metamask/key-tree';\nimport { isValidBIP32PathSegment } from '@metamask/key-tree';\nimport type { EmptyObject, InitialPermissions } from '@metamask/snaps-sdk';\nimport type { Describe, Infer, Struct } from '@metamask/superstruct';\nimport {\n  array,\n  boolean,\n  create,\n  enums,\n  integer,\n  is,\n  literal,\n  object,\n  optional,\n  refine,\n  record,\n  size,\n  string,\n  type,\n  union,\n  intersection,\n} from '@metamask/superstruct';\nimport {\n  assertStruct,\n  ChecksumStruct,\n  VersionStruct,\n  isValidSemVerRange,\n  inMilliseconds,\n  Duration,\n  CaipChainIdStruct,\n} from '@metamask/utils';\n\nimport { isDerivationPathEqual } from '../array';\nimport { CronjobSpecificationArrayStruct } from '../cronjob';\nimport { SIP_6_MAGIC_VALUE, STATE_ENCRYPTION_MAGIC_VALUE } from '../entropy';\nimport { KeyringOriginsStruct, RpcOriginsStruct } from '../json-rpc';\nimport { KeyringCapabilitiesStruct } from '../keyring';\nimport { SnapIdStruct } from '../snaps';\nimport { mergeStructs, type InferMatching } from '../structs';\nimport { NameStruct, NpmSnapFileNames, uri } from '../types';\n\n// BIP-43 purposes that cannot be used for entropy derivation. These are in the\n// string form, ending with `'`.\nconst FORBIDDEN_PURPOSES: string[] = [\n  SIP_6_MAGIC_VALUE,\n  STATE_ENCRYPTION_MAGIC_VALUE,\n];\n\nconst FORBIDDEN_PURPOSE_PATHS: string[][] = FORBIDDEN_PURPOSES.map(\n  (purpose) => ['m', `${purpose}`],\n);\n\nexport const FORBIDDEN_COIN_TYPES: number[] = [60];\nconst FORBIDDEN_COIN_TYPE_PATHS: string[][] = FORBIDDEN_COIN_TYPES.map(\n  (coinType) => ['m', \"44'\", `${coinType}'`],\n);\n\nexport const Bip32PathStruct = refine(\n  array(string()),\n  'BIP-32 path',\n  (path: string[]) => {\n    if (path.length === 0) {\n      return 'Path must be a non-empty BIP-32 derivation path array';\n    }\n\n    if (path[0] !== 'm') {\n      return 'Path must start with \"m\".';\n    }\n\n    if (path.length < 3) {\n      return 'Paths must have a length of at least three.';\n    }\n\n    if (path.slice(1).some((part) => !isValidBIP32PathSegment(part))) {\n      return 'Path must be a valid BIP-32 derivation path array.';\n    }\n\n    if (\n      FORBIDDEN_PURPOSE_PATHS.some((forbiddenPath) =>\n        isDerivationPathEqual(\n          path.slice(0, forbiddenPath.length),\n          forbiddenPath,\n        ),\n      )\n    ) {\n      return `The purpose \"${path[1]}\" is not allowed for entropy derivation.`;\n    }\n\n    if (\n      FORBIDDEN_COIN_TYPE_PATHS.some((forbiddenPath) =>\n        isDerivationPathEqual(\n          path.slice(0, forbiddenPath.length),\n          forbiddenPath,\n        ),\n      )\n    ) {\n      return `The path \"${path.join(\n        '/',\n      )}\" is not allowed for entropy derivation.`;\n    }\n\n    return true;\n  },\n);\n\nexport const bip32entropy = <\n  Type extends { path: string[]; curve: string },\n  Schema,\n>(\n  struct: Struct<Type, Schema>,\n) =>\n  refine(struct, 'BIP-32 entropy', (value) => {\n    if (\n      value.curve === 'ed25519' &&\n      value.path.slice(1).some((part) => !part.endsWith(\"'\"))\n    ) {\n      return 'Ed25519 does not support unhardened paths.';\n    }\n\n    return true;\n  });\n\nexport const CurveStruct: Describe<SupportedCurve> = enums([\n  'ed25519',\n  'secp256k1',\n  'ed25519Bip32',\n]);\n\n// Used outside @metamask/snap-utils\nexport const Bip32EntropyStruct = bip32entropy(\n  type({\n    path: Bip32PathStruct,\n    curve: CurveStruct,\n  }),\n);\n\nexport type Bip32Entropy = Infer<typeof Bip32EntropyStruct>;\n\nexport const SnapGetBip32EntropyPermissionsStruct = size(\n  array(Bip32EntropyStruct),\n  1,\n  Infinity,\n);\n\nexport const SemVerRangeStruct = refine(string(), 'SemVer range', (value) => {\n  if (isValidSemVerRange(value)) {\n    return true;\n  }\n  return 'Expected a valid SemVer range.';\n});\n\nexport const SnapIdsStruct = refine(\n  record(SnapIdStruct, object({ version: optional(SemVerRangeStruct) })),\n  'SnapIds',\n  (value) => {\n    if (Object.keys(value).length === 0) {\n      return false;\n    }\n\n    return true;\n  },\n);\n\nexport type SnapIds = Infer<typeof SnapIdsStruct>;\n\nexport const ChainIdsStruct = size(array(CaipChainIdStruct), 1, Infinity);\n\nexport const LookupMatchersStruct = union([\n  object({\n    tlds: size(array(string()), 1, Infinity),\n  }),\n  object({\n    schemes: size(array(string()), 1, Infinity),\n  }),\n  object({\n    tlds: size(array(string()), 1, Infinity),\n    schemes: size(array(string()), 1, Infinity),\n  }),\n]);\n\nexport const MINIMUM_REQUEST_TIMEOUT = inMilliseconds(5, Duration.Second);\nexport const MAXIMUM_REQUEST_TIMEOUT = inMilliseconds(3, Duration.Minute);\n\nexport const MaxRequestTimeStruct = size(\n  integer(),\n  MINIMUM_REQUEST_TIMEOUT,\n  MAXIMUM_REQUEST_TIMEOUT,\n);\n\nexport const ProtocolScopesStruct = record(\n  CaipChainIdStruct,\n  object({ methods: array(string()) }),\n);\n\n// Utility type to union with for all handler structs\nexport const HandlerCaveatsStruct = object({\n  maxRequestTime: optional(MaxRequestTimeStruct),\n});\n\nexport type HandlerCaveats = Infer<typeof HandlerCaveatsStruct>;\n\nexport const EmptyObjectStruct = object<EmptyObject>({}) as unknown as Struct<\n  EmptyObject,\n  null\n>;\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport const PermissionsStruct: Describe<InitialPermissions> = type({\n  'endowment:assets': optional(\n    mergeStructs(HandlerCaveatsStruct, object({ scopes: ChainIdsStruct })),\n  ),\n  'endowment:cronjob': optional(\n    mergeStructs(\n      HandlerCaveatsStruct,\n      object({ jobs: optional(CronjobSpecificationArrayStruct) }),\n    ),\n  ),\n  'endowment:ethereum-provider': optional(EmptyObjectStruct),\n  'endowment:keyring': optional(\n    mergeStructs(\n      HandlerCaveatsStruct,\n      KeyringOriginsStruct,\n      KeyringCapabilitiesStruct,\n    ),\n  ),\n  'endowment:protocol': optional(\n    mergeStructs(\n      HandlerCaveatsStruct,\n      object({ scopes: ProtocolScopesStruct }),\n    ),\n  ),\n  'endowment:lifecycle-hooks': optional(HandlerCaveatsStruct),\n  'endowment:name-lookup': optional(\n    mergeStructs(\n      HandlerCaveatsStruct,\n      object({\n        chains: optional(ChainIdsStruct),\n        matchers: optional(LookupMatchersStruct),\n      }),\n    ),\n  ),\n  'endowment:network-access': optional(EmptyObjectStruct),\n  'endowment:page-home': optional(HandlerCaveatsStruct),\n  'endowment:rpc': optional(\n    mergeStructs(HandlerCaveatsStruct, RpcOriginsStruct),\n  ),\n  'endowment:signature-insight': optional(\n    mergeStructs(\n      HandlerCaveatsStruct,\n      object({\n        allowSignatureOrigin: optional(boolean()),\n      }),\n    ),\n  ),\n  'endowment:transaction-insight': optional(\n    mergeStructs(\n      HandlerCaveatsStruct,\n      object({\n        allowTransactionOrigin: optional(boolean()),\n      }),\n    ),\n  ),\n  'endowment:webassembly': optional(EmptyObjectStruct),\n  snap_dialog: optional(EmptyObjectStruct),\n  snap_manageState: optional(EmptyObjectStruct),\n  snap_manageAccounts: optional(EmptyObjectStruct),\n  snap_notify: optional(EmptyObjectStruct),\n  snap_getBip32Entropy: optional(SnapGetBip32EntropyPermissionsStruct),\n  snap_getBip32PublicKey: optional(SnapGetBip32EntropyPermissionsStruct),\n  snap_getBip44Entropy: optional(\n    size(\n      array(object({ coinType: size(integer(), 0, 2 ** 32 - 1) })),\n      1,\n      Infinity,\n    ),\n  ),\n  snap_getEntropy: optional(EmptyObjectStruct),\n  snap_getLocale: optional(EmptyObjectStruct),\n  wallet_snap: optional(SnapIdsStruct),\n});\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport type SnapPermissions = InferMatching<\n  typeof PermissionsStruct,\n  InitialPermissions\n>;\n\nexport const SnapAuxiliaryFilesStruct = array(string());\n\n/**\n * @deprecated Use SnapAuxiliaryFilesStruct instead. This was a typo that has been fixed.\n */\nexport const SnapAuxilaryFilesStruct = SnapAuxiliaryFilesStruct;\n\nexport const InitialConnectionsStruct = record(\n  intersection([string(), uri()]),\n  object({}),\n);\n\nexport type InitialConnections = Infer<typeof InitialConnectionsStruct>;\n\nexport const SnapManifestStruct = object({\n  extends: optional(size(string(), 1, Infinity)),\n  version: VersionStruct,\n  description: size(string(), 1, 280),\n  proposedName: size(string(), 1, 214),\n  repository: optional(\n    type({\n      type: size(string(), 1, Infinity),\n      url: size(string(), 1, Infinity),\n    }),\n  ),\n  source: object({\n    shasum: ChecksumStruct,\n    location: object({\n      npm: object({\n        filePath: size(string(), 1, Infinity),\n        iconPath: optional(size(string(), 1, Infinity)),\n        packageName: NameStruct,\n        registry: union([\n          literal('https://registry.npmjs.org'),\n          literal('https://registry.npmjs.org/'),\n        ]),\n      }),\n    }),\n    files: optional(SnapAuxiliaryFilesStruct),\n    locales: optional(SnapAuxiliaryFilesStruct),\n  }),\n  initialConnections: optional(InitialConnectionsStruct),\n  initialPermissions: PermissionsStruct,\n  manifestVersion: literal('0.1'),\n  platformVersion: optional(VersionStruct),\n  $schema: optional(string()), // enables JSON-Schema linting in VSC and other IDEs\n});\n\nexport type SnapManifest = Infer<typeof SnapManifestStruct>;\n\n/**\n * Check if the given value is a valid {@link SnapManifest} object.\n *\n * @param value - The value to check.\n * @returns Whether the value is a valid {@link SnapManifest} object.\n */\nexport function isSnapManifest(value: unknown): value is SnapManifest {\n  return is(value, SnapManifestStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link SnapManifest} object.\n *\n * @param value - The value to check.\n * @throws If the value is not a valid {@link SnapManifest} object.\n */\nexport function assertIsSnapManifest(\n  value: unknown,\n): asserts value is SnapManifest {\n  assertStruct(\n    value,\n    SnapManifestStruct,\n    `\"${NpmSnapFileNames.Manifest}\" is invalid`,\n  );\n}\n\n/**\n * Creates a {@link SnapManifest} object from JSON.\n *\n * @param value - The value to check.\n * @throws If the value cannot be coerced to a {@link SnapManifest} object.\n * @returns The created {@link SnapManifest} object.\n */\nexport function createSnapManifest(value: unknown): SnapManifest {\n  // TODO: Add a utility to prefix these errors similar to assertStruct\n  return create(value, SnapManifestStruct);\n}\n"]}