# PipeWire Proxies

## Proxy

Lua objects that bind a WpProxy contain the following methods:

Proxy.get_interface_type(self)

  Binds `wp_proxy_get_interface_type()`

  Parameters:

    self -- the proxy

  Returns:

    the proxy type, the proxy type version

  Return type:

    string, integer

## PipeWire Object

Lua objects that bind a WpPipewireObject contain the following methods:

PipewireObject.iterate_params(self, param_name)

  Binds `wp_pipewire_object_enum_params_sync()`

  Parameters:

    - self -- the proxy

    - param_name (string) -- the PipeWire param name to enumerate, ex "Props", "Route"

  Returns:

    the available parameters

  Return type:

    Iterator; the iteration items are Spa Pod objects

PipewireObject.set_param(self, param_name, pod)

  Binds `wp_pipewire_object_set_param()`

  Parameters:

    - self -- the proxy

    - param_name (string) -- The PipeWire param name to set, ex "Props", "Route"

    - pod (Pod) -- A Spa Pod object containing the new params

## Global Proxy

Lua objects that bind a WpGlobalProxy contain the following methods:

GlobalProxy.request_destroy(self)

  Binds `wp_global_proxy_request_destroy()`

  Parameters:

    self -- the proxy

## PipeWire Node

Lua objects that bind a WpNode contain the following methods:

Node.get_state(self)

  Binds `wp_node_get_state()`

  Parameters:

    self -- the proxy

  Returns:

    the current state of the node and an error message, if any

  Return type:

    string (`WpNodeState`), string (error message)

  Since:

    0.4.2

Node.get_n_input_ports(self)

  Binds `wp_node_get_n_input_ports()`

  Parameters:

    self -- the proxy

  Returns:

    the current and max numbers of input ports on the node

  Return type:

    integer (current), integer (max)

  Since:

    0.4.2

Node.get_n_output_ports(self)

  Binds `wp_node_get_n_output_ports()`

  Parameters:

    self -- the proxy

  Returns:

    the current and max numbers of output ports on the node

  Return type:

    integer (current), integer (max)

  Since:

    0.4.2

Node.get_n_ports(self)

  Binds `wp_node_get_n_ports()`

  Parameters:

    self -- the proxy

  Returns:

    the number of ports on the node

  Since:

    0.4.2

Node.iterate_ports(self, interest)

  Binds `wp_node_iterate_ports()`

  Parameters:

    - self -- the proxy

    - interest (Interest or nil or none) -- an interest to filter objects

  Returns:

    all the ports of this node that that match the interest

  Return type:

    Iterator; the iteration items are of type WpPort

  Since:

    0.4.2

Node.lookup_port(self, interest)

  Binds `wp_node_lookup_port()`

  Parameters:

    - self -- the proxy

    - interest (Interest or nil or none) -- the interest to use for the lookup

  Returns:

    the first port of this node that matches the interest

  Return type:

    WpPort

  Since:

    0.4.2

Node.send_command(self, command)

  Binds `wp_node_send_command()`

  Parameters:

    - self -- the proxy

    - command (string) -- the command to send to the node (ex "Suspend")

## PipeWire Port

Lua objects that bind a WpPort contain the following methods:

Port.get_direction(self)

  Binds `wp_port_get_direction()`

  Parameters:

    self -- the port

  Returns:

    the direction of the Port

  Return type:

    string (`WpDirection`)

  Since:

    0.4.2

## PipeWire Client

Lua objects that bind a WpClient contain the following methods:

Client.update_permissions(self, perms)

  Binds `wp_client_update_permissions()`

  Takes a table where the keys are object identifiers and the values are permission strings.

  Valid object identifiers are:

  - A number, meaning the bound ID of a proxy

  - The string "any" or the string "all", which sets the default permissions for this client

  The permission strings have a chmod-like syntax (ex. "rwx" or "r-xm"), where:

  - "r" means permission to read the object

  - "w" means permission to write data to the object

  - "x" means permission to call methods on the object

  - "m" means permission to set metadata for the object

  - "-" is ignored and can be used to make the string more readable when a permission flag is omitted

  Example:

      client:update_permissions {
        ["all"] = "r-x",
        [35] = "rwxm",
      }

  Parameters:

    - self -- the proxy

    - perms (table) -- the permissions to update for this client

## PipeWire Metadata

Lua objects that bind a WpMetadata contain the following methods:

Metadata.iterate(self, subject)

  Binds `wp_metadata_new_iterator()`

  Parameters:

    - self -- the proxy

    - subject (integer) -- the subject id

  Returns:

    an iterator

Metadata.find(self, subject, key)

  Binds `wp_metadata_find()`

  Parameters:

    - self -- the proxy

    - subject (string) -- the subject id

    - key (string) -- the metadata key to find

  Returns:

    the value for this metadata key, the type of the value

  Return type:

    string, string