pipewire 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,20 +21,6 @@ npm run build
21
21
 
22
22
  ## Usage
23
23
 
24
- ```ts
25
- import * as pw from "pipewire";
26
-
27
- pw.pipewire.pw_init(0, null);
28
-
29
- const loop = pw.main_loop.pw_main_loop_new(null);
30
- const context = pw.context.pw_context_new(pw.main_loop.pw_main_loop_get_loop(loop), null, 0);
31
- const core = pw.core.pw_context_connect(context, null, 0);
32
- const registry = pw.core.pw_core_get_registry(core, 3, 0);
33
-
34
- // ...add listeners, then run the main loop
35
- await new Promise((resolve) => pw.main_loop.pw_main_loop_run.async(loop, resolve));
36
- ```
37
-
38
24
  See [`examples/event-registry.ts`](examples/event-registry.ts) for a complete example:
39
25
 
40
26
  ```bash
package/dist/core.d.ts CHANGED
@@ -18,7 +18,8 @@ export declare const pw_core_get_registry: {
18
18
  result: import("koffi").TypeObject;
19
19
  };
20
20
  };
21
- export declare const pw_registry_events_globals: import("koffi").TypeObject;
21
+ export declare const pw_registry_events_global: import("koffi").TypeObject;
22
+ export declare const pw_registry_events_global_remove: import("koffi").TypeObject;
22
23
  export declare const pw_registry_events: import("koffi").TypeObject;
23
24
  export declare const pw_core_disconnect: {
24
25
  (...args: any[]): any;
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,4BAA0B,CAAC;AAC/C,eAAO,MAAM,WAAW,4BAA8B,CAAC;AAEvD,eAAO,MAAM,kBAAkB;;;;;;;;CAI7B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;CAI/B,CAAC;AAEH,eAAO,MAAM,0BAA0B,4BAOrC,CAAC;AAEH,eAAO,MAAM,kBAAkB,4BAI7B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;CAAuE,CAAC"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,4BAA0B,CAAC;AAC/C,eAAO,MAAM,WAAW,4BAA8B,CAAC;AAEvD,eAAO,MAAM,kBAAkB;;;;;;;;CAI7B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;CAI/B,CAAC;AAEH,eAAO,MAAM,yBAAyB,4BAOpC,CAAC;AAEH,eAAO,MAAM,gCAAgC,4BAG3C,CAAC;AAEH,eAAO,MAAM,kBAAkB,4BAI7B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;CAAuE,CAAC"}
package/dist/core.js CHANGED
@@ -14,7 +14,7 @@ export const pw_core_get_registry = pipewire.func("pw_core_get_registry", koffi.
14
14
  "uint32_t",
15
15
  "size_t"
16
16
  ]);
17
- export const pw_registry_events_globals = koffi.proto("void", [
17
+ export const pw_registry_events_global = koffi.proto("void", [
18
18
  "void*", // data
19
19
  "uint32_t", // id
20
20
  "uint32_t", // permissions
@@ -22,10 +22,14 @@ export const pw_registry_events_globals = koffi.proto("void", [
22
22
  "uint32_t", // version
23
23
  "void*" // props
24
24
  ]);
25
+ export const pw_registry_events_global_remove = koffi.proto("void", [
26
+ "void*", // data
27
+ "uint32_t" // id
28
+ ]);
25
29
  export const pw_registry_events = koffi.struct("pw_registry_events", {
26
- vesion: "uint32_t",
27
- global: "void*", // TODO
28
- global_remove: "void*" // TODO
30
+ version: "uint32_t",
31
+ global: koffi.pointer(pw_registry_events_global),
32
+ global_remove: koffi.pointer(pw_registry_events_global_remove)
29
33
  });
30
34
  export const pw_core_disconnect = pipewire.func("pw_core_disconnect", "int", [koffi.pointer(pw_core)]);
31
35
  //# sourceMappingURL=core.js.map
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAEvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IAC1F,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;IACzB,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;IAC5B,QAAQ;CACX,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;IAClG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IACtB,UAAU;IACV,QAAQ;CACX,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;IAC1D,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,cAAc;IAC1B,aAAa,EAAE,OAAO;IACtB,UAAU,EAAE,UAAU;IACtB,OAAO,CAAC,QAAQ;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE;IACjE,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,OAAO,EAAE,OAAO;IACxB,aAAa,EAAE,OAAO,CAAC,OAAO;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAEvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IAC1F,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;IACzB,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;IAC5B,QAAQ;CACX,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;IAClG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IACtB,UAAU;IACV,QAAQ;CACX,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;IACzD,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,cAAc;IAC1B,aAAa,EAAE,OAAO;IACtB,UAAU,EAAE,UAAU;IACtB,OAAO,CAAC,QAAQ;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;IAChE,OAAO,EAAE,OAAO;IAChB,UAAU,CAAC,KAAK;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE;IACjE,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAC;IAChD,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,gCAAgC,CAAC;CACjE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import * as context from "./context.js";
2
2
  import * as core from "./core.js";
3
+ import * as dict from "./dict.js";
3
4
  import * as hook from "./hook.js";
4
5
  import * as main_loop from "./main-loop.js";
6
+ import * as node from "./node.js";
5
7
  import * as pipewire from "./pipewire.js";
6
8
  import * as proxy from "./proxy.js";
7
9
  import * as registry from "./registry.js";
8
- export { context, core, hook, main_loop, pipewire, proxy, registry };
10
+ export { context, core, dict, hook, main_loop, node, pipewire, proxy, registry };
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,11 @@
1
1
  import * as context from "./context.js";
2
2
  import * as core from "./core.js";
3
+ import * as dict from "./dict.js";
3
4
  import * as hook from "./hook.js";
4
5
  import * as main_loop from "./main-loop.js";
6
+ import * as node from "./node.js";
5
7
  import * as pipewire from "./pipewire.js";
6
8
  import * as proxy from "./proxy.js";
7
9
  import * as registry from "./registry.js";
8
- export { context, core, hook, main_loop, pipewire, proxy, registry };
10
+ export { context, core, dict, hook, main_loop, node, pipewire, proxy, registry };
9
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC"}
package/dist/node.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ export declare const pw_node: import("koffi").TypeObject;
2
+ export declare const pw_node_state: import("koffi").TypeObject;
3
+ export declare const pw_node_info: import("koffi").TypeObject;
4
+ export declare const pw_node_events_info: import("koffi").TypeObject;
5
+ export declare const pw_node_events_param: import("koffi").TypeObject;
6
+ export declare const pw_node_events: import("koffi").TypeObject;
7
+ export declare const pw_node_add_listener: {
8
+ (...args: any[]): any;
9
+ async: (...args: any[]) => any;
10
+ info: {
11
+ name: string;
12
+ arguments: import("koffi").TypeObject[];
13
+ result: import("koffi").TypeObject;
14
+ };
15
+ };
16
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,OAAO,4BAA0B,CAAC;AAE/C,eAAO,MAAM,aAAa,4BAMxB,CAAC;AAEH,eAAO,MAAM,YAAY,4BAYvB,CAAC;AAEH,eAAO,MAAM,mBAAmB,4BAG9B,CAAC;AAEH,eAAO,MAAM,oBAAoB,4BAO/B,CAAC;AAEH,eAAO,MAAM,cAAc,4BAIzB,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;CAK/B,CAAC"}
package/dist/node.js ADDED
@@ -0,0 +1,51 @@
1
+ import koffi from "koffi";
2
+ import { spa_hook } from "./hook.js";
3
+ import { spa_pod } from "./pod.js";
4
+ import { spa_dict } from "./dict.js";
5
+ import { spa_param_info } from "./param.js";
6
+ const pipewire = koffi.load("libpipewire-0.3.so.0");
7
+ export const pw_node = koffi.opaque("pw_node");
8
+ export const pw_node_state = koffi.enumeration("pw_node_state", {
9
+ PW_NODE_STATE_ERROR: -1,
10
+ PW_NODE_STATE_CREATING: 0,
11
+ PW_NODE_STATE_SUSPENDED: 1,
12
+ PW_NODE_STATE_IDLE: 2,
13
+ PW_NODE_STATE_RUNNING: 3
14
+ });
15
+ export const pw_node_info = koffi.struct("pw_node_info", {
16
+ id: "uint32_t",
17
+ max_input_ports: "uint32_t",
18
+ max_output_ports: "uint32_t",
19
+ change_mask: "uint64_t",
20
+ n_input_ports: "uint32_t",
21
+ n_output_ports: "uint32_t",
22
+ state: pw_node_state,
23
+ error: "const char*",
24
+ props: koffi.pointer(spa_dict),
25
+ params: koffi.pointer(spa_param_info),
26
+ n_params: "uint32_t"
27
+ });
28
+ export const pw_node_events_info = koffi.proto("void", [
29
+ "void*", // data
30
+ koffi.pointer(pw_node_info) // info
31
+ ]);
32
+ export const pw_node_events_param = koffi.proto("void", [
33
+ "void*", // data
34
+ "int", // seq
35
+ "uint32_t", // id
36
+ "uint32_t", // index
37
+ "uint32_t", // next
38
+ koffi.pointer(spa_pod) // param
39
+ ]);
40
+ export const pw_node_events = koffi.struct("pw_node_events", {
41
+ version: "uint32_t",
42
+ info: koffi.pointer(pw_node_events_info),
43
+ param: koffi.pointer(pw_node_events_param)
44
+ });
45
+ export const pw_node_add_listener = pipewire.func("pw_node_add_listener", "int", [
46
+ koffi.pointer(pw_node), // object
47
+ koffi.pointer(spa_hook), // listener
48
+ koffi.pointer(pw_node_events), // events
49
+ "void*" // data
50
+ ]);
51
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE;IAC5D,mBAAmB,EAAE,CAAC,CAAC;IACvB,sBAAsB,EAAE,CAAC;IACzB,uBAAuB,EAAE,CAAC;IAC1B,kBAAkB,EAAE,CAAC;IACrB,qBAAqB,EAAE,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE;IACrD,EAAE,EAAE,UAAU;IACd,eAAe,EAAE,UAAU;IAC3B,gBAAgB,EAAE,UAAU;IAC5B,WAAW,EAAE,UAAU;IACvB,aAAa,EAAE,UAAU;IACzB,cAAc,EAAE,UAAU;IAC1B,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,aAAa;IACpB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9B,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;IACrC,QAAQ,EAAE,UAAU;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;IACnD,OAAO,EAAE,OAAO;IAChB,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO;CACtC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;IACpD,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,MAAM;IACb,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,QAAQ;IACpB,UAAU,EAAE,OAAO;IACnB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE;IACzD,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC;IACxC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE;IAC7E,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS;IACjC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW;IACpC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,SAAS;IACxC,OAAO,CAAC,OAAO;CAClB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const spa_param_info: import("koffi").TypeObject;
2
+ //# sourceMappingURL=param.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param.d.ts","sourceRoot":"","sources":["../src/param.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,4BAMzB,CAAC"}
package/dist/param.js ADDED
@@ -0,0 +1,9 @@
1
+ import koffi from "koffi";
2
+ export const spa_param_info = koffi.struct("spa_param_info", {
3
+ id: "uint32_t",
4
+ flags: "uint32_t",
5
+ user: "uint32_t",
6
+ seq: "int32_t",
7
+ padding: koffi.array("uint32_t", 4)
8
+ });
9
+ //# sourceMappingURL=param.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param.js","sourceRoot":"","sources":["../src/param.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE;IACzD,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,SAAS;IACd,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;CACtC,CAAC,CAAC"}
package/dist/pod.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare const spa_pod: import("koffi").TypeObject;
2
+ //# sourceMappingURL=pod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pod.d.ts","sourceRoot":"","sources":["../src/pod.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,4BAGlB,CAAC"}
package/dist/pod.js ADDED
@@ -0,0 +1,6 @@
1
+ import koffi from "koffi";
2
+ export const spa_pod = koffi.struct("spa_pod", {
3
+ size: "uint32_t",
4
+ type: "uint32_t"
5
+ });
6
+ //# sourceMappingURL=pod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pod.js","sourceRoot":"","sources":["../src/pod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE;IAC3C,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;CACnB,CAAC,CAAC"}
@@ -7,4 +7,13 @@ export declare const pw_registry_add_listener: {
7
7
  result: import("koffi").TypeObject;
8
8
  };
9
9
  };
10
+ export declare const pw_registry_bind: {
11
+ (...args: any[]): any;
12
+ async: (...args: any[]) => any;
13
+ info: {
14
+ name: string;
15
+ arguments: import("koffi").TypeObject[];
16
+ result: import("koffi").TypeObject;
17
+ };
18
+ };
10
19
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,wBAAwB;;;;;;;;CAKnC,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,wBAAwB;;;;;;;;CAKnC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;CAM3B,CAAC"}
package/dist/registry.js CHANGED
@@ -3,9 +3,16 @@ import { pw_registry, pw_registry_events } from "./core.js";
3
3
  import { spa_hook } from "./hook.js";
4
4
  const pipewire = koffi.load("libpipewire-0.3.so.0");
5
5
  export const pw_registry_add_listener = pipewire.func("pw_registry_add_listener", "int", [
6
- koffi.pointer(pw_registry),
7
- koffi.pointer(spa_hook),
8
- koffi.pointer(pw_registry_events),
9
- "void*"
6
+ koffi.pointer(pw_registry), // registry
7
+ koffi.pointer(spa_hook), // listener
8
+ koffi.pointer(pw_registry_events), // events
9
+ "void*" // data
10
+ ]);
11
+ export const pw_registry_bind = pipewire.func("pw_registry_bind", koffi.pointer("void"), [
12
+ koffi.pointer(pw_registry), // registry
13
+ "uint32_t", // id
14
+ "const char*", // type
15
+ "uint32_t", // version
16
+ "size_t" // user_data_size
10
17
  ]);
11
18
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,EAAE;IACrF,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;IAC1B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;IACvB,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC;IACjC,OAAO;CACV,CAAC,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,EAAE;IACrF,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,WAAW;IACvC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW;IACpC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,SAAS;IAC5C,OAAO,CAAC,OAAO;CAClB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;IACrF,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,WAAW;IACvC,UAAU,EAAE,KAAK;IACjB,aAAa,EAAE,OAAO;IACtB,UAAU,EAAE,UAAU;IACtB,QAAQ,CAAC,iBAAiB;CAC7B,CAAC,CAAC"}
@@ -11,29 +11,32 @@ import * as pw from "../src/index.js";
11
11
  const registry_listener = Buffer.alloc(koffi.sizeof(pw.hook.spa_hook));
12
12
 
13
13
  const registry_event_global = (
14
- data: Buffer,
14
+ data: unknown,
15
15
  id: number,
16
16
  permissions: number,
17
17
  type: string,
18
18
  version: number,
19
- props: Buffer
19
+ props: unknown
20
20
  ) => {
21
- console.log(`object: id:${id} type:${type}/${version}`);
21
+ console.log(`New object: id: ${id} type: ${type} version: ${version}`);
22
+ };
23
+
24
+ const registry_event_global_remove = (data: unknown, id: number) => {
25
+ console.log(`Removed object: id: ${id}`);
22
26
  };
23
27
 
24
28
  const registry_events = {
25
29
  version: 0,
26
- global: koffi.register(registry_event_global, koffi.pointer(pw.core.pw_registry_events_globals)),
27
- global_remove: null
30
+ global: koffi.register(registry_event_global, koffi.pointer(pw.core.pw_registry_events_global)),
31
+ global_remove: koffi.register(
32
+ registry_event_global_remove,
33
+ koffi.pointer(pw.core.pw_registry_events_global_remove)
34
+ )
28
35
  };
29
-
30
36
  pw.registry.pw_registry_add_listener(registry, registry_listener, registry_events, null);
31
37
 
32
- process.on("SIGINT", () => {
33
- pw.main_loop.pw_main_loop_quit(loop);
34
- });
35
-
36
38
  console.log("Starting PipeWire main loop...");
39
+ process.on("SIGINT", () => pw.main_loop.pw_main_loop_quit(loop));
37
40
  await new Promise((resolve) => pw.main_loop.pw_main_loop_run.async(loop, resolve));
38
41
 
39
42
  pw.proxy.pw_proxy_destroy(registry);
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "pipewire",
3
- "version": "1.1.2",
3
+ "version": "1.2.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
7
- "build": "tsc"
7
+ "build": "tsc -p tsconfig.build.json",
8
+ "publish": "npm run build && npm publish"
8
9
  },
9
10
  "keywords": [],
10
11
  "homepage": "https://github.com/Raraph84/node-pipewire",
@@ -17,6 +18,7 @@
17
18
  "devDependencies": {
18
19
  "@types/node": "^26.6.3",
19
20
  "prettier": "^3.9.9",
21
+ "tsx": "^4.23.15",
20
22
  "typescript": "^7.0.2"
21
23
  },
22
24
  "prettier": {
@@ -28,6 +30,7 @@
28
30
  "files": [
29
31
  "package.json",
30
32
  "package-lock.json",
33
+ "tsconfig.build.json",
31
34
  "tsconfig.json"
32
35
  ],
33
36
  "options": {
package/src/core.ts CHANGED
@@ -19,7 +19,7 @@ export const pw_core_get_registry = pipewire.func("pw_core_get_registry", koffi.
19
19
  "size_t"
20
20
  ]);
21
21
 
22
- export const pw_registry_events_globals = koffi.proto("void", [
22
+ export const pw_registry_events_global = koffi.proto("void", [
23
23
  "void*", // data
24
24
  "uint32_t", // id
25
25
  "uint32_t", // permissions
@@ -28,10 +28,15 @@ export const pw_registry_events_globals = koffi.proto("void", [
28
28
  "void*" // props
29
29
  ]);
30
30
 
31
+ export const pw_registry_events_global_remove = koffi.proto("void", [
32
+ "void*", // data
33
+ "uint32_t" // id
34
+ ]);
35
+
31
36
  export const pw_registry_events = koffi.struct("pw_registry_events", {
32
- vesion: "uint32_t",
33
- global: "void*", // TODO
34
- global_remove: "void*" // TODO
37
+ version: "uint32_t",
38
+ global: koffi.pointer(pw_registry_events_global),
39
+ global_remove: koffi.pointer(pw_registry_events_global_remove)
35
40
  });
36
41
 
37
42
  export const pw_core_disconnect = pipewire.func("pw_core_disconnect", "int", [koffi.pointer(pw_core)]);
package/src/index.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import * as context from "./context.js";
2
2
  import * as core from "./core.js";
3
+ import * as dict from "./dict.js";
3
4
  import * as hook from "./hook.js";
4
5
  import * as main_loop from "./main-loop.js";
6
+ import * as node from "./node.js";
5
7
  import * as pipewire from "./pipewire.js";
6
8
  import * as proxy from "./proxy.js";
7
9
  import * as registry from "./registry.js";
8
10
 
9
- export { context, core, hook, main_loop, pipewire, proxy, registry };
11
+ export { context, core, dict, hook, main_loop, node, pipewire, proxy, registry };
package/src/node.ts ADDED
@@ -0,0 +1,58 @@
1
+ import koffi from "koffi";
2
+ import { spa_hook } from "./hook.js";
3
+ import { spa_pod } from "./pod.js";
4
+ import { spa_dict } from "./dict.js";
5
+ import { spa_param_info } from "./param.js";
6
+
7
+ const pipewire = koffi.load("libpipewire-0.3.so.0");
8
+
9
+ export const pw_node = koffi.opaque("pw_node");
10
+
11
+ export const pw_node_state = koffi.enumeration("pw_node_state", {
12
+ PW_NODE_STATE_ERROR: -1,
13
+ PW_NODE_STATE_CREATING: 0,
14
+ PW_NODE_STATE_SUSPENDED: 1,
15
+ PW_NODE_STATE_IDLE: 2,
16
+ PW_NODE_STATE_RUNNING: 3
17
+ });
18
+
19
+ export const pw_node_info = koffi.struct("pw_node_info", {
20
+ id: "uint32_t",
21
+ max_input_ports: "uint32_t",
22
+ max_output_ports: "uint32_t",
23
+ change_mask: "uint64_t",
24
+ n_input_ports: "uint32_t",
25
+ n_output_ports: "uint32_t",
26
+ state: pw_node_state,
27
+ error: "const char*",
28
+ props: koffi.pointer(spa_dict),
29
+ params: koffi.pointer(spa_param_info),
30
+ n_params: "uint32_t"
31
+ });
32
+
33
+ export const pw_node_events_info = koffi.proto("void", [
34
+ "void*", // data
35
+ koffi.pointer(pw_node_info) // info
36
+ ]);
37
+
38
+ export const pw_node_events_param = koffi.proto("void", [
39
+ "void*", // data
40
+ "int", // seq
41
+ "uint32_t", // id
42
+ "uint32_t", // index
43
+ "uint32_t", // next
44
+ koffi.pointer(spa_pod) // param
45
+ ]);
46
+
47
+ export const pw_node_events = koffi.struct("pw_node_events", {
48
+ version: "uint32_t",
49
+ info: koffi.pointer(pw_node_events_info),
50
+ param: koffi.pointer(pw_node_events_param)
51
+ });
52
+
53
+ export const pw_node_add_listener = pipewire.func("pw_node_add_listener", "int", [
54
+ koffi.pointer(pw_node), // object
55
+ koffi.pointer(spa_hook), // listener
56
+ koffi.pointer(pw_node_events), // events
57
+ "void*" // data
58
+ ]);
package/src/param.ts ADDED
@@ -0,0 +1,9 @@
1
+ import koffi from "koffi";
2
+
3
+ export const spa_param_info = koffi.struct("spa_param_info", {
4
+ id: "uint32_t",
5
+ flags: "uint32_t",
6
+ user: "uint32_t",
7
+ seq: "int32_t",
8
+ padding: koffi.array("uint32_t", 4)
9
+ });
package/src/pod.ts ADDED
@@ -0,0 +1,6 @@
1
+ import koffi from "koffi";
2
+
3
+ export const spa_pod = koffi.struct("spa_pod", {
4
+ size: "uint32_t",
5
+ type: "uint32_t"
6
+ });
package/src/registry.ts CHANGED
@@ -5,8 +5,16 @@ import { spa_hook } from "./hook.js";
5
5
  const pipewire = koffi.load("libpipewire-0.3.so.0");
6
6
 
7
7
  export const pw_registry_add_listener = pipewire.func("pw_registry_add_listener", "int", [
8
- koffi.pointer(pw_registry),
9
- koffi.pointer(spa_hook),
10
- koffi.pointer(pw_registry_events),
11
- "void*"
8
+ koffi.pointer(pw_registry), // registry
9
+ koffi.pointer(spa_hook), // listener
10
+ koffi.pointer(pw_registry_events), // events
11
+ "void*" // data
12
+ ]);
13
+
14
+ export const pw_registry_bind = pipewire.func("pw_registry_bind", koffi.pointer("void"), [
15
+ koffi.pointer(pw_registry), // registry
16
+ "uint32_t", // id
17
+ "const char*", // type
18
+ "uint32_t", // version
19
+ "size_t" // user_data_size
12
20
  ]);
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "rootDir": "./src"
5
+ },
6
+ "include": ["src"]
7
+ }
package/tsconfig.json CHANGED
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "rootDir": "./src",
4
3
  "outDir": "./dist",
5
4
  "module": "nodenext",
6
5
  "target": "esnext",