/**
 * Generated by orval v7.6.0 🍺
 * Do not edit manually.
 * Coinbase Developer Platform APIs
 * The Coinbase Developer Platform APIs - leading the world's transition onchain.
 * OpenAPI spec version: 2.0.0
 */
import { faker } from "@faker-js/faker";

import { HttpResponse, delay, http } from "msw";

import { EvmUserOperationNetwork } from "../coinbaseDeveloperPlatformAPIs.schemas.js";
import type {
  EvmSmartAccount,
  EvmUserOperation,
  ListEvmSmartAccounts200,
  ListSpendPermissions200,
} from "../coinbaseDeveloperPlatformAPIs.schemas.js";

export const getListEvmSmartAccountsResponseMock = (): ListEvmSmartAccounts200 => ({
  ...{
    accounts: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(
      () => ({
        address: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
        owners: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(
          () => faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
        ),
        name: faker.helpers.arrayElement([
          faker.helpers.fromRegExp("^[A-Za-z0-9][A-Za-z0-9-]{0,34}[A-Za-z0-9]$"),
          undefined,
        ]),
        policies: faker.helpers.arrayElement([
          Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() =>
            faker.helpers.fromRegExp(
              "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
            ),
          ),
          undefined,
        ]),
        createdAt: faker.helpers.arrayElement([
          `${faker.date.past().toISOString().split(".")[0]}Z`,
          undefined,
        ]),
        updatedAt: faker.helpers.arrayElement([
          `${faker.date.past().toISOString().split(".")[0]}Z`,
          undefined,
        ]),
      }),
    ),
  },
  ...{ nextPageToken: faker.helpers.arrayElement([faker.string.alpha(20), undefined]) },
});

export const getCreateEvmSmartAccountResponseMock = (
  overrideResponse: Partial<EvmSmartAccount> = {},
): EvmSmartAccount => ({
  address: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
  owners: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() =>
    faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
  ),
  name: faker.helpers.arrayElement([
    faker.helpers.fromRegExp("^[A-Za-z0-9][A-Za-z0-9-]{0,34}[A-Za-z0-9]$"),
    undefined,
  ]),
  policies: faker.helpers.arrayElement([
    Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() =>
      faker.helpers.fromRegExp(
        "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      ),
    ),
    undefined,
  ]),
  createdAt: faker.helpers.arrayElement([
    `${faker.date.past().toISOString().split(".")[0]}Z`,
    undefined,
  ]),
  updatedAt: faker.helpers.arrayElement([
    `${faker.date.past().toISOString().split(".")[0]}Z`,
    undefined,
  ]),
  ...overrideResponse,
});

export const getGetEvmSmartAccountByNameResponseMock = (
  overrideResponse: Partial<EvmSmartAccount> = {},
): EvmSmartAccount => ({
  address: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
  owners: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() =>
    faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
  ),
  name: faker.helpers.arrayElement([
    faker.helpers.fromRegExp("^[A-Za-z0-9][A-Za-z0-9-]{0,34}[A-Za-z0-9]$"),
    undefined,
  ]),
  policies: faker.helpers.arrayElement([
    Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() =>
      faker.helpers.fromRegExp(
        "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      ),
    ),
    undefined,
  ]),
  createdAt: faker.helpers.arrayElement([
    `${faker.date.past().toISOString().split(".")[0]}Z`,
    undefined,
  ]),
  updatedAt: faker.helpers.arrayElement([
    `${faker.date.past().toISOString().split(".")[0]}Z`,
    undefined,
  ]),
  ...overrideResponse,
});

export const getGetEvmSmartAccountResponseMock = (
  overrideResponse: Partial<EvmSmartAccount> = {},
): EvmSmartAccount => ({
  address: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
  owners: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() =>
    faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
  ),
  name: faker.helpers.arrayElement([
    faker.helpers.fromRegExp("^[A-Za-z0-9][A-Za-z0-9-]{0,34}[A-Za-z0-9]$"),
    undefined,
  ]),
  policies: faker.helpers.arrayElement([
    Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() =>
      faker.helpers.fromRegExp(
        "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      ),
    ),
    undefined,
  ]),
  createdAt: faker.helpers.arrayElement([
    `${faker.date.past().toISOString().split(".")[0]}Z`,
    undefined,
  ]),
  updatedAt: faker.helpers.arrayElement([
    `${faker.date.past().toISOString().split(".")[0]}Z`,
    undefined,
  ]),
  ...overrideResponse,
});

export const getUpdateEvmSmartAccountResponseMock = (
  overrideResponse: Partial<EvmSmartAccount> = {},
): EvmSmartAccount => ({
  address: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
  owners: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() =>
    faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
  ),
  name: faker.helpers.arrayElement([
    faker.helpers.fromRegExp("^[A-Za-z0-9][A-Za-z0-9-]{0,34}[A-Za-z0-9]$"),
    undefined,
  ]),
  policies: faker.helpers.arrayElement([
    Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() =>
      faker.helpers.fromRegExp(
        "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
      ),
    ),
    undefined,
  ]),
  createdAt: faker.helpers.arrayElement([
    `${faker.date.past().toISOString().split(".")[0]}Z`,
    undefined,
  ]),
  updatedAt: faker.helpers.arrayElement([
    `${faker.date.past().toISOString().split(".")[0]}Z`,
    undefined,
  ]),
  ...overrideResponse,
});

export const getPrepareUserOperationResponseMock = (
  overrideResponse: Partial<EvmUserOperation> = {},
): EvmUserOperation => ({
  network: faker.helpers.arrayElement(Object.values(EvmUserOperationNetwork)),
  userOpHash: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$"),
  calls: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({
    to: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
    value: faker.string.alpha(20),
    data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"),
  })),
  status: faker.helpers.arrayElement([
    "pending",
    "signed",
    "broadcast",
    "complete",
    "dropped",
    "failed",
  ] as const),
  transactionHash: faker.helpers.arrayElement([
    faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
    undefined,
  ]),
  receipts: faker.helpers.arrayElement([
    Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({
      revert: faker.helpers.arrayElement([
        { data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"), message: faker.string.alpha(20) },
        undefined,
      ]),
      transactionHash: faker.helpers.arrayElement([
        faker.helpers.fromRegExp("^0x[a-fA-F0-9]{64}$"),
        undefined,
      ]),
      blockHash: faker.helpers.arrayElement([
        faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
        undefined,
      ]),
      blockNumber: faker.helpers.arrayElement([
        faker.number.int({ min: undefined, max: undefined }),
        undefined,
      ]),
      gasUsed: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
    })),
    undefined,
  ]),
  ...overrideResponse,
});

export const getGetUserOperationResponseMock = (
  overrideResponse: Partial<EvmUserOperation> = {},
): EvmUserOperation => ({
  network: faker.helpers.arrayElement(Object.values(EvmUserOperationNetwork)),
  userOpHash: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$"),
  calls: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({
    to: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
    value: faker.string.alpha(20),
    data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"),
  })),
  status: faker.helpers.arrayElement([
    "pending",
    "signed",
    "broadcast",
    "complete",
    "dropped",
    "failed",
  ] as const),
  transactionHash: faker.helpers.arrayElement([
    faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
    undefined,
  ]),
  receipts: faker.helpers.arrayElement([
    Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({
      revert: faker.helpers.arrayElement([
        { data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"), message: faker.string.alpha(20) },
        undefined,
      ]),
      transactionHash: faker.helpers.arrayElement([
        faker.helpers.fromRegExp("^0x[a-fA-F0-9]{64}$"),
        undefined,
      ]),
      blockHash: faker.helpers.arrayElement([
        faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
        undefined,
      ]),
      blockNumber: faker.helpers.arrayElement([
        faker.number.int({ min: undefined, max: undefined }),
        undefined,
      ]),
      gasUsed: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
    })),
    undefined,
  ]),
  ...overrideResponse,
});

export const getSendUserOperationResponseMock = (
  overrideResponse: Partial<EvmUserOperation> = {},
): EvmUserOperation => ({
  network: faker.helpers.arrayElement(Object.values(EvmUserOperationNetwork)),
  userOpHash: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$"),
  calls: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({
    to: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
    value: faker.string.alpha(20),
    data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"),
  })),
  status: faker.helpers.arrayElement([
    "pending",
    "signed",
    "broadcast",
    "complete",
    "dropped",
    "failed",
  ] as const),
  transactionHash: faker.helpers.arrayElement([
    faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
    undefined,
  ]),
  receipts: faker.helpers.arrayElement([
    Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({
      revert: faker.helpers.arrayElement([
        { data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"), message: faker.string.alpha(20) },
        undefined,
      ]),
      transactionHash: faker.helpers.arrayElement([
        faker.helpers.fromRegExp("^0x[a-fA-F0-9]{64}$"),
        undefined,
      ]),
      blockHash: faker.helpers.arrayElement([
        faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
        undefined,
      ]),
      blockNumber: faker.helpers.arrayElement([
        faker.number.int({ min: undefined, max: undefined }),
        undefined,
      ]),
      gasUsed: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
    })),
    undefined,
  ]),
  ...overrideResponse,
});

export const getCreateSpendPermissionResponseMock = (
  overrideResponse: Partial<EvmUserOperation> = {},
): EvmUserOperation => ({
  network: faker.helpers.arrayElement(Object.values(EvmUserOperationNetwork)),
  userOpHash: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$"),
  calls: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({
    to: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
    value: faker.string.alpha(20),
    data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"),
  })),
  status: faker.helpers.arrayElement([
    "pending",
    "signed",
    "broadcast",
    "complete",
    "dropped",
    "failed",
  ] as const),
  transactionHash: faker.helpers.arrayElement([
    faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
    undefined,
  ]),
  receipts: faker.helpers.arrayElement([
    Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({
      revert: faker.helpers.arrayElement([
        { data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"), message: faker.string.alpha(20) },
        undefined,
      ]),
      transactionHash: faker.helpers.arrayElement([
        faker.helpers.fromRegExp("^0x[a-fA-F0-9]{64}$"),
        undefined,
      ]),
      blockHash: faker.helpers.arrayElement([
        faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
        undefined,
      ]),
      blockNumber: faker.helpers.arrayElement([
        faker.number.int({ min: undefined, max: undefined }),
        undefined,
      ]),
      gasUsed: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
    })),
    undefined,
  ]),
  ...overrideResponse,
});

export const getListSpendPermissionsResponseMock = (): ListSpendPermissions200 => ({
  ...{
    spendPermissions: Array.from(
      { length: faker.number.int({ min: 1, max: 10 }) },
      (_, i) => i + 1,
    ).map(() => ({
      permission: {
        account: faker.helpers.fromRegExp("^0x[a-fA-F0-9]{40}$"),
        spender: faker.helpers.fromRegExp("^0x[a-fA-F0-9]{40}$"),
        token: faker.helpers.fromRegExp("^0x[a-fA-F0-9]{40}$"),
        allowance: faker.string.alpha(20),
        period: faker.string.alpha(20),
        start: faker.string.alpha(20),
        end: faker.string.alpha(20),
        salt: faker.string.alpha(20),
        extraData: faker.string.alpha(20),
      },
      permissionHash: faker.string.alpha(20),
      revoked: faker.datatype.boolean(),
      revokedAt: faker.helpers.arrayElement([
        `${faker.date.past().toISOString().split(".")[0]}Z`,
        undefined,
      ]),
      createdAt: `${faker.date.past().toISOString().split(".")[0]}Z`,
    })),
  },
  ...{ nextPageToken: faker.helpers.arrayElement([faker.string.alpha(20), undefined]) },
});

export const getRevokeSpendPermissionResponseMock = (
  overrideResponse: Partial<EvmUserOperation> = {},
): EvmUserOperation => ({
  network: faker.helpers.arrayElement(Object.values(EvmUserOperationNetwork)),
  userOpHash: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$"),
  calls: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({
    to: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
    value: faker.string.alpha(20),
    data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"),
  })),
  status: faker.helpers.arrayElement([
    "pending",
    "signed",
    "broadcast",
    "complete",
    "dropped",
    "failed",
  ] as const),
  transactionHash: faker.helpers.arrayElement([
    faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
    undefined,
  ]),
  receipts: faker.helpers.arrayElement([
    Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({
      revert: faker.helpers.arrayElement([
        { data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"), message: faker.string.alpha(20) },
        undefined,
      ]),
      transactionHash: faker.helpers.arrayElement([
        faker.helpers.fromRegExp("^0x[a-fA-F0-9]{64}$"),
        undefined,
      ]),
      blockHash: faker.helpers.arrayElement([
        faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
        undefined,
      ]),
      blockNumber: faker.helpers.arrayElement([
        faker.number.int({ min: undefined, max: undefined }),
        undefined,
      ]),
      gasUsed: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
    })),
    undefined,
  ]),
  ...overrideResponse,
});

export const getListEvmSmartAccountsMockHandler = (
  overrideResponse?:
    | ListEvmSmartAccounts200
    | ((
        info: Parameters<Parameters<typeof http.get>[1]>[0],
      ) => Promise<ListEvmSmartAccounts200> | ListEvmSmartAccounts200),
) => {
  return http.get("*/v2/evm/smart-accounts", async info => {
    await delay(0);

    return new HttpResponse(
      JSON.stringify(
        overrideResponse !== undefined
          ? typeof overrideResponse === "function"
            ? await overrideResponse(info)
            : overrideResponse
          : getListEvmSmartAccountsResponseMock(),
      ),
      { status: 200, headers: { "Content-Type": "application/json" } },
    );
  });
};

export const getCreateEvmSmartAccountMockHandler = (
  overrideResponse?:
    | EvmSmartAccount
    | ((
        info: Parameters<Parameters<typeof http.post>[1]>[0],
      ) => Promise<EvmSmartAccount> | EvmSmartAccount),
) => {
  return http.post("*/v2/evm/smart-accounts", async info => {
    await delay(0);

    return new HttpResponse(
      JSON.stringify(
        overrideResponse !== undefined
          ? typeof overrideResponse === "function"
            ? await overrideResponse(info)
            : overrideResponse
          : getCreateEvmSmartAccountResponseMock(),
      ),
      { status: 201, headers: { "Content-Type": "application/json" } },
    );
  });
};

export const getGetEvmSmartAccountByNameMockHandler = (
  overrideResponse?:
    | EvmSmartAccount
    | ((
        info: Parameters<Parameters<typeof http.get>[1]>[0],
      ) => Promise<EvmSmartAccount> | EvmSmartAccount),
) => {
  return http.get("*/v2/evm/smart-accounts/by-name/:name", async info => {
    await delay(0);

    return new HttpResponse(
      JSON.stringify(
        overrideResponse !== undefined
          ? typeof overrideResponse === "function"
            ? await overrideResponse(info)
            : overrideResponse
          : getGetEvmSmartAccountByNameResponseMock(),
      ),
      { status: 200, headers: { "Content-Type": "application/json" } },
    );
  });
};

export const getGetEvmSmartAccountMockHandler = (
  overrideResponse?:
    | EvmSmartAccount
    | ((
        info: Parameters<Parameters<typeof http.get>[1]>[0],
      ) => Promise<EvmSmartAccount> | EvmSmartAccount),
) => {
  return http.get("*/v2/evm/smart-accounts/:address", async info => {
    await delay(0);

    return new HttpResponse(
      JSON.stringify(
        overrideResponse !== undefined
          ? typeof overrideResponse === "function"
            ? await overrideResponse(info)
            : overrideResponse
          : getGetEvmSmartAccountResponseMock(),
      ),
      { status: 200, headers: { "Content-Type": "application/json" } },
    );
  });
};

export const getUpdateEvmSmartAccountMockHandler = (
  overrideResponse?:
    | EvmSmartAccount
    | ((
        info: Parameters<Parameters<typeof http.put>[1]>[0],
      ) => Promise<EvmSmartAccount> | EvmSmartAccount),
) => {
  return http.put("*/v2/evm/smart-accounts/:address", async info => {
    await delay(0);

    return new HttpResponse(
      JSON.stringify(
        overrideResponse !== undefined
          ? typeof overrideResponse === "function"
            ? await overrideResponse(info)
            : overrideResponse
          : getUpdateEvmSmartAccountResponseMock(),
      ),
      { status: 200, headers: { "Content-Type": "application/json" } },
    );
  });
};

export const getPrepareUserOperationMockHandler = (
  overrideResponse?:
    | EvmUserOperation
    | ((
        info: Parameters<Parameters<typeof http.post>[1]>[0],
      ) => Promise<EvmUserOperation> | EvmUserOperation),
) => {
  return http.post("*/v2/evm/smart-accounts/:address/user-operations", async info => {
    await delay(0);

    return new HttpResponse(
      JSON.stringify(
        overrideResponse !== undefined
          ? typeof overrideResponse === "function"
            ? await overrideResponse(info)
            : overrideResponse
          : getPrepareUserOperationResponseMock(),
      ),
      { status: 201, headers: { "Content-Type": "application/json" } },
    );
  });
};

export const getGetUserOperationMockHandler = (
  overrideResponse?:
    | EvmUserOperation
    | ((
        info: Parameters<Parameters<typeof http.get>[1]>[0],
      ) => Promise<EvmUserOperation> | EvmUserOperation),
) => {
  return http.get("*/v2/evm/smart-accounts/:address/user-operations/:userOpHash", async info => {
    await delay(0);

    return new HttpResponse(
      JSON.stringify(
        overrideResponse !== undefined
          ? typeof overrideResponse === "function"
            ? await overrideResponse(info)
            : overrideResponse
          : getGetUserOperationResponseMock(),
      ),
      { status: 200, headers: { "Content-Type": "application/json" } },
    );
  });
};

export const getSendUserOperationMockHandler = (
  overrideResponse?:
    | EvmUserOperation
    | ((
        info: Parameters<Parameters<typeof http.post>[1]>[0],
      ) => Promise<EvmUserOperation> | EvmUserOperation),
) => {
  return http.post(
    "*/v2/evm/smart-accounts/:address/user-operations/:userOpHash/send",
    async info => {
      await delay(0);

      return new HttpResponse(
        JSON.stringify(
          overrideResponse !== undefined
            ? typeof overrideResponse === "function"
              ? await overrideResponse(info)
              : overrideResponse
            : getSendUserOperationResponseMock(),
        ),
        { status: 200, headers: { "Content-Type": "application/json" } },
      );
    },
  );
};

export const getCreateSpendPermissionMockHandler = (
  overrideResponse?:
    | EvmUserOperation
    | ((
        info: Parameters<Parameters<typeof http.post>[1]>[0],
      ) => Promise<EvmUserOperation> | EvmUserOperation),
) => {
  return http.post("*/v2/evm/smart-accounts/:address/spend-permissions", async info => {
    await delay(0);

    return new HttpResponse(
      JSON.stringify(
        overrideResponse !== undefined
          ? typeof overrideResponse === "function"
            ? await overrideResponse(info)
            : overrideResponse
          : getCreateSpendPermissionResponseMock(),
      ),
      { status: 200, headers: { "Content-Type": "application/json" } },
    );
  });
};

export const getListSpendPermissionsMockHandler = (
  overrideResponse?:
    | ListSpendPermissions200
    | ((
        info: Parameters<Parameters<typeof http.get>[1]>[0],
      ) => Promise<ListSpendPermissions200> | ListSpendPermissions200),
) => {
  return http.get("*/v2/evm/smart-accounts/:address/spend-permissions/list", async info => {
    await delay(0);

    return new HttpResponse(
      JSON.stringify(
        overrideResponse !== undefined
          ? typeof overrideResponse === "function"
            ? await overrideResponse(info)
            : overrideResponse
          : getListSpendPermissionsResponseMock(),
      ),
      { status: 200, headers: { "Content-Type": "application/json" } },
    );
  });
};

export const getRevokeSpendPermissionMockHandler = (
  overrideResponse?:
    | EvmUserOperation
    | ((
        info: Parameters<Parameters<typeof http.post>[1]>[0],
      ) => Promise<EvmUserOperation> | EvmUserOperation),
) => {
  return http.post("*/v2/evm/smart-accounts/:address/spend-permissions/revoke", async info => {
    await delay(0);

    return new HttpResponse(
      JSON.stringify(
        overrideResponse !== undefined
          ? typeof overrideResponse === "function"
            ? await overrideResponse(info)
            : overrideResponse
          : getRevokeSpendPermissionResponseMock(),
      ),
      { status: 200, headers: { "Content-Type": "application/json" } },
    );
  });
};
export const getEvmSmartAccountsMock = () => [
  getListEvmSmartAccountsMockHandler(),
  getCreateEvmSmartAccountMockHandler(),
  getGetEvmSmartAccountByNameMockHandler(),
  getGetEvmSmartAccountMockHandler(),
  getUpdateEvmSmartAccountMockHandler(),
  getPrepareUserOperationMockHandler(),
  getGetUserOperationMockHandler(),
  getSendUserOperationMockHandler(),
  getCreateSpendPermissionMockHandler(),
  getListSpendPermissionsMockHandler(),
  getRevokeSpendPermissionMockHandler(),
];
