lib/cdpotion/domain/dom_storage.ex

defmodule CDPotion.Domain.DOMStorage do
  use CDPotion.Utils
  @typedoc "DOM Storage item."
  @type item :: list(String.t())

  @typedoc "description not provided :("
  @type serialized_storage_key :: String.t()

  @typedoc "DOM Storage identifier."
  @type storage_id :: %{
          isLocalStorage: boolean(),
          securityOrigin: String.t() | nil,
          storageKey: CDPotion.Domain.DOMStorage.serialized_storage_key() | nil
        }

  @doc """
  ## Parameters:
    - `storageId:StorageId`: description not provided :(
  """
  def clear(storage_id) do
    params = as_query([{"storageId", storage_id}])
    {"DOMStorage.clear", params}
  end

  @doc """
  Disables storage tracking, prevents storage events from being sent to the client.
  """
  def disable() do
    {"DOMStorage.disable", %{}}
  end

  @doc """
  Enables storage tracking, storage events will now be delivered to the client.
  """
  def enable() do
    {"DOMStorage.enable", %{}}
  end

  @doc """
  ## Parameters:
    - `storageId:StorageId`: description not provided :(
  """
  def get_dom_storage_items(storage_id) do
    params = as_query([{"storageId", storage_id}])
    {"DOMStorage.getDOMStorageItems", params}
  end

  @doc """
  ## Parameters:
    - `storageId:StorageId`: description not provided :(
    - `key:string`: description not provided :(
  """
  def remove_dom_storage_item(storage_id, key) do
    params = as_query([{"storageId", storage_id}, {"key", key}])
    {"DOMStorage.removeDOMStorageItem", params}
  end

  @doc """
  ## Parameters:
    - `storageId:StorageId`: description not provided :(
    - `key:string`: description not provided :(
    - `value:string`: description not provided :(
  """
  def set_dom_storage_item(storage_id, key, value) do
    params = as_query([{"storageId", storage_id}, {"key", key}, {"value", value}])
    {"DOMStorage.setDOMStorageItem", params}
  end
end