{"version":3,"file":"wallet-request-execution-permissions.cjs","sourceRoot":"","sources":["../../src/methods/wallet-request-execution-permissions.ts"],"names":[],"mappings":";;;AACA,qDAAiD;AAEjD,uDAU+B;AAC/B,2CAA4E;AAG5E,wDAAqD;AAGrD,MAAM,gBAAgB,GAAG,IAAA,oBAAM,EAAC;IAC9B,IAAI,EAAE,IAAA,oBAAM,GAAE;IACd,mBAAmB,EAAE,IAAA,qBAAO,GAAE;IAC9B,IAAI,EAAE,IAAA,oBAAM,EAAC,IAAA,oBAAM,GAAE,EAAE,IAAA,qBAAO,GAAE,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,IAAA,oBAAM,EAAC;IACxB,IAAI,EAAE,IAAA,oBAAM,GAAE;IACd,IAAI,EAAE,IAAA,oBAAM,EAAC,IAAA,oBAAM,GAAE,EAAE,IAAA,qBAAO,GAAE,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,IAAA,oBAAM,EAAC;IACrC,OAAO,EAAE,uBAAe;IACxB,IAAI,EAAE,IAAA,sBAAQ,EAAC,gCAAwB,CAAC;IACxC,EAAE,EAAE,gCAAwB;IAC5B,UAAU,EAAE,gBAAgB;IAC5B,KAAK,EAAE,IAAA,sBAAQ,EAAC,IAAA,mBAAK,EAAC,CAAC,IAAA,mBAAK,EAAC,UAAU,CAAC,EAAE,IAAA,qBAAO,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CAC3D,CAAC,CAAC;AAEU,QAAA,iCAAiC,GAAG,IAAA,mBAAK,EAAC,uBAAuB,CAAC,CAAC;AAyBhF;;;;;;;;GAQG;AACH,SAAgB,8CAA8C,CAAC,EAC7D,kCAAkC,GAGnC;IACC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,IAAI,CAAC,kCAAkC,EAAE,CAAC;YACxC,MAAM,sBAAS,CAAC,kBAAkB,CAChC,+DAA+D,CAChE,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAE3B,IAAA,2BAAc,EAAC,MAAM,EAAE,yCAAiC,CAAC,CAAC;QAE1D,OAAO,MAAM,kCAAkC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC,CAAC;AACJ,CAAC;AAlBD,wGAkBC","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"]}