{"version":3,"file":"wallet-request-execution-permissions.mjs","sourceRoot":"","sources":["../../src/methods/wallet-request-execution-permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,6BAA6B;AAEjD,OAAO,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,EACN,KAAK,EACL,OAAO,EACR,8BAA8B;AAC/B,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,wBAAwB;AAG5E,OAAO,EAAE,cAAc,EAAE,gCAA4B;AAGrD,MAAM,gBAAgB,GAAG,MAAM,CAAC;IAC9B,IAAI,EAAE,MAAM,EAAE;IACd,mBAAmB,EAAE,OAAO,EAAE;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,EAAE;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,MAAM,CAAC;IACrC,OAAO,EAAE,eAAe;IACxB,IAAI,EAAE,QAAQ,CAAC,wBAAwB,CAAC;IACxC,EAAE,EAAE,wBAAwB;IAC5B,UAAU,EAAE,gBAAgB;IAC5B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iCAAiC,GAAG,KAAK,CAAC,uBAAuB,CAAC,CAAC;AAyBhF;;;;;;;;GAQG;AACH,MAAM,UAAU,8CAA8C,CAAC,EAC7D,kCAAkC,GAGnC;IACC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,IAAI,CAAC,kCAAkC,EAAE,CAAC;YACxC,MAAM,SAAS,CAAC,kBAAkB,CAChC,+DAA+D,CAChE,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAE3B,cAAc,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;QAE1D,OAAO,MAAM,kCAAkC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { Infer } from '@metamask/superstruct';\nimport {\n  array,\n  boolean,\n  literal,\n  object,\n  optional,\n  record,\n  string,\n  union,\n  unknown,\n} from '@metamask/superstruct';\nimport { HexChecksumAddressStruct, StrictHexStruct } from '@metamask/utils';\nimport type { Hex, Json, JsonRpcRequest } from '@metamask/utils';\n\nimport { validateParams } from '../utils/validation';\nimport type { WalletMiddlewareContext } from '../wallet';\n\nconst PermissionStruct = object({\n  type: string(),\n  isAdjustmentAllowed: boolean(),\n  data: record(string(), unknown()),\n});\n\nconst RuleStruct = object({\n  type: string(),\n  data: record(string(), unknown()),\n});\n\nconst PermissionRequestStruct = object({\n  chainId: StrictHexStruct,\n  from: optional(HexChecksumAddressStruct),\n  to: HexChecksumAddressStruct,\n  permission: PermissionStruct,\n  rules: optional(union([array(RuleStruct), literal(null)])),\n});\n\nexport const RequestExecutionPermissionsStruct = array(PermissionRequestStruct);\n\n// RequestExecutionPermissions API types\nexport type RequestExecutionPermissionsRequestParams = Infer<\n  typeof RequestExecutionPermissionsStruct\n>;\n\nexport type PermissionDependency = {\n  factory: Hex;\n  factoryData: Hex;\n};\n\nexport type RequestExecutionPermissionsResult = Json &\n  (Infer<typeof PermissionRequestStruct> & {\n    context: Hex;\n    dependencies: PermissionDependency[];\n    delegationManager: Hex;\n  })[];\n\nexport type ProcessRequestExecutionPermissionsHook = (\n  request: RequestExecutionPermissionsRequestParams,\n  req: JsonRpcRequest,\n  context: WalletMiddlewareContext,\n) => Promise<RequestExecutionPermissionsResult>;\n\n/**\n * Creates a handler for the `wallet_requestExecutionPermissions` JSON-RPC method.\n *\n * @param options - The options for the handler.\n * @param options.processRequestExecutionPermissions - The function to process the\n * request execution permissions request.\n * @returns A JSON-RPC middleware function that handles the\n * `wallet_requestExecutionPermissions` JSON-RPC method.\n */\nexport function createWalletRequestExecutionPermissionsHandler({\n  processRequestExecutionPermissions,\n}: {\n  processRequestExecutionPermissions?: ProcessRequestExecutionPermissionsHook;\n}): JsonRpcMiddleware<JsonRpcRequest, Json, WalletMiddlewareContext> {\n  return async ({ request, context }) => {\n    if (!processRequestExecutionPermissions) {\n      throw rpcErrors.methodNotSupported(\n        'wallet_requestExecutionPermissions - no middleware configured',\n      );\n    }\n\n    const { params } = request;\n\n    validateParams(params, RequestExecutionPermissionsStruct);\n\n    return await processRequestExecutionPermissions(params, request, context);\n  };\n}\n"]}