{"version":3,"file":"assets.mjs","sourceRoot":"","sources":["../../src/endowments/assets.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,wCAAwC;AAC9E,OAAO,EAAE,cAAc,EAAE,8BAA8B;AAEvD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB;AAEnD,OAAO,EAAE,gCAAgC,EAAE,4BAAkB;AAC7D,OAAO,EAAE,cAAc,EAAE,mBAAe;AAExC,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC;AAS7C;;;;;GAKG;AACH,MAAM,oBAAoB,GAItB,CAAC,eAAqB,EAAE,EAAE;IAC5B,OAAO;QACL,cAAc,EAAE,cAAc,CAAC,SAAS;QACxC,UAAU,EAAE,cAAc;QAC1B,cAAc,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;QACzC,eAAe,EAAE,CAAC,cAAsC,EAAE,EAAE,CAAC,IAAI;QACjE,YAAY,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;QAChC,SAAS,EAAE,gCAAgC,CAAC;YAC1C,EAAE,IAAI,EAAE,cAAc,CAAC,QAAQ,EAAE;YACjC,EAAE,IAAI,EAAE,cAAc,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;SACxD,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC;IAClD,UAAU,EAAE,cAAc;IAC1B,oBAAoB;CACZ,CAAC,CAAC;AAEZ;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAW;IAEX,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAExC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,cAAc,CAAC,QAAQ;gBAC7B,KAAK,EAAE,KAAK,CAAC,MAAM;aACpB;SACF;KACF,CAAC;AACJ,CAAC","sourcesContent":["import type {\n  PermissionSpecificationBuilder,\n  EndowmentGetterParams,\n  ValidPermissionSpecification,\n  PermissionConstraint,\n} from '@metamask/permission-controller';\nimport { PermissionType, SubjectType } from '@metamask/permission-controller';\nimport { SnapCaveatType } from '@metamask/snaps-utils';\nimport type { Json, NonEmptyArray } from '@metamask/utils';\nimport { assert, isObject } from '@metamask/utils';\n\nimport { createGenericPermissionValidator } from './caveats';\nimport { SnapEndowments } from './enum';\n\nconst permissionName = SnapEndowments.Assets;\n\ntype AssetsEndowmentSpecification = ValidPermissionSpecification<{\n  permissionType: PermissionType.Endowment;\n  targetName: typeof permissionName;\n  endowmentGetter: (_options?: any) => null;\n  allowedCaveats: Readonly<NonEmptyArray<string>> | null;\n}>;\n\n/**\n * `endowment:assets` returns nothing; it is intended to be used as a flag to determine whether the Snap can run asset queries.\n *\n * @param _builderOptions - Optional specification builder options.\n * @returns The specification for the assets endowment.\n */\nconst specificationBuilder: PermissionSpecificationBuilder<\n  PermissionType.Endowment,\n  any,\n  AssetsEndowmentSpecification\n> = (_builderOptions?: any) => {\n  return {\n    permissionType: PermissionType.Endowment,\n    targetName: permissionName,\n    allowedCaveats: [SnapCaveatType.ChainIds],\n    endowmentGetter: (_getterOptions?: EndowmentGetterParams) => null,\n    subjectTypes: [SubjectType.Snap],\n    validator: createGenericPermissionValidator([\n      { type: SnapCaveatType.ChainIds },\n      { type: SnapCaveatType.MaxRequestTime, optional: true },\n    ]),\n  };\n};\n\nexport const assetsEndowmentBuilder = Object.freeze({\n  targetName: permissionName,\n  specificationBuilder,\n} as const);\n\n/**\n * Map a raw value from the `initialPermissions` to a caveat specification.\n * Note that this function does not do any validation, that's handled by the\n * PermissionsController when the permission is requested.\n *\n * @param value - The raw value from the `initialPermissions`.\n * @returns The caveat specification.\n */\nexport function getAssetsCaveatMapper(\n  value: Json,\n): Pick<PermissionConstraint, 'caveats'> {\n  assert(isObject(value) && value.scopes);\n\n  return {\n    caveats: [\n      {\n        type: SnapCaveatType.ChainIds,\n        value: value.scopes,\n      },\n    ],\n  };\n}\n"]}