dualsense-ts 6.4.0 → 6.5.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
@@ -110,6 +110,14 @@ controller.dpad.on("press", (dpad, input) =>
110
110
  // Your Dualsense may provide over 250 `input` events per second, so use this sparingly
111
111
  // These events are not available for nested inputs, like the example above
112
112
  controller.left.analog.x.on("input", console.log)
113
+
114
+ // Remove a specific listener
115
+ const handler = ({ active }) => console.log(active);
116
+ controller.cross.on("press", handler);
117
+ controller.cross.off("press", handler);
118
+
119
+ // Remove all listeners for an event
120
+ controller.cross.removeAllListeners("press");
113
121
  ```
114
122
 
115
123
  - _Promises_: Wait for one-off inputs using `await`:
package/SECURITY.md ADDED
@@ -0,0 +1,24 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+
5
+ Only the latest published version of `dualsense-ts` receives security updates.
6
+
7
+ ## Reporting a Vulnerability
8
+
9
+ If you discover a security vulnerability, please report it privately via [GitHub Security Advisories](https://github.com/nsfm/dualsense-ts/security/advisories/new).
10
+
11
+ Do not open a public issue for security vulnerabilities.
12
+
13
+ ## Dependencies
14
+
15
+ `dualsense-ts` is committed to remaining a zero-dependency package, minimizing risk surface area. The peer dependency on `node-hid` is the only exception - please review their security standards before implementing `dualsense-ts` in node.js.
16
+
17
+ ## Scope
18
+
19
+ `dualsense-ts` communicates with HID devices via WebHID (browser) and `node-hid` (Node.js). It does not make network requests, store credentials, or process untrusted input beyond raw HID reports from physically connected controllers.
20
+
21
+ Security concerns most likely to be relevant:
22
+
23
+ - Malformed HID report parsing leading to unexpected behavior
24
+ - Dependency vulnerabilities in `node-hid` or dev tooling
package/dist/input.d.ts CHANGED
@@ -56,6 +56,12 @@ export declare abstract class Input<Type> implements AsyncIterator<Input<Type>>
56
56
  abstract get active(): boolean;
57
57
  /** Register a callback to recieve state updates from this Input */
58
58
  on(event: InputEventType, listener: InputCallback<this>): this;
59
+ /** Remove a specific callback registered with `on` */
60
+ off(event: InputEventType, listener: InputCallback<this>): this;
61
+ /** Alias for `off` */
62
+ removeListener(event: InputEventType, listener: InputCallback<this>): this;
63
+ /** Remove all listeners for a given event, or all events if none specified */
64
+ removeAllListeners(event?: InputEventType): this;
59
65
  /** Register a callback to recieve the next specified update */
60
66
  once(event: InputChangeType, listener: InputCallback<this>): this;
61
67
  /** Notify listeners and parents of a state change */
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAO/B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,8CAA8C;AAC9C,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qDAAqD;AACrD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAC7D,8CAA8C;AAC9C,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,OAAO,CAAC;AAEvD,sDAAsD;AACtD,MAAM,MAAM,aAAa,CAAC,QAAQ,IAAI,CACpC,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAC/B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,kEAAkE;AAClE,eAAO,MAAM,kBAAkB,eAA+B,CAAC;AAC/D,yDAAyD;AACzD,eAAO,MAAM,QAAQ,eAAqB,CAAC;AAC3C,gDAAgD;AAChD,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,iDAAiD;AACjD,eAAO,MAAM,SAAS,eAAsB,CAAC;AAE7C,iEAAiE;AACjE,QAAA,MAAM,QAAQ,eAAqB,CAAC;AACpC,uEAAuE;AACvE,QAAA,MAAM,UAAU,eAAuB,CAAC;AACxC,yDAAyD;AACzD,QAAA,MAAM,UAAU,eAAuB,CAAC;AACxC,oDAAoD;AACpD,QAAA,MAAM,YAAY,eAAyB,CAAC;AAC5C,oEAAoE;AACpE,QAAA,MAAM,eAAe,eAA4B,CAAC;AAElD;;;GAGG;AACH,8BAAsB,KAAK,CAAC,IAAI,CAAE,YAAW,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrE,SAAgB,EAAE,EAAE,OAAO,CAAmB;IAE9C,2EAA2E;IACpE,SAAS,EAAE,MAAM,CAAK;IAE7B,mEAAmE;IAC5D,QAAQ,EAAE,MAAM,CAAK;IAE5B,sCAAsC;IACtC,SAAgB,KAAK,EAAE,IAAI,CAAC;IAE5B,6BAA6B;IAC7B,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAoD;IAEtE,mDAAmD;IACnD,OAAO,CAAC,CAAC,UAAU,CAAC,CAAqD;gBAE7D,MAAM,GAAE,WAAgB;IAiBpC,2EAA2E;IAC3E,aAAoB,MAAM,IAAI,OAAO,CAAC;IAEtC,mEAAmE;IAC5D,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI;IAUrE,sDAAsD;IAC/C,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI;IAStE,sBAAsB;IACf,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI;IAIjF,8EAA8E;IACvE,kBAAkB,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI;IASvD,+DAA+D;IACxD,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI;IAUxE,qDAAqD;IACrD,OAAO,CAAC,IAAI;IAcZ,kDAAkD;IAClD,OAAO,CAAC,QAAQ;IAWhB,mEAAmE;IAC5D,gBAAgB,CACrB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,EAC7B,EAAE,IAAI,EAAE,GAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAoB,GAC5C,IAAI;IAUP,wDAAwD;IACjD,IAAI,CAAC,IAAI,GAAE,eAA0B,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAQ5E,wDAAwD;IACjD,OAAO,CACZ,IAAI,GAAE,OAAO,GAAG,SAAS,GAAG,QAAmB,GAC9C,OAAO,CAAC,IAAI,CAAC;IAMhB,gCAAgC;IACzB,QAAQ,IAAI,MAAM;IAIzB,2DAA2D;IAC3D,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,KAAK,OAAO,CAAmB;IAE9E,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC;IAI7C,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM;IAM5E,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IAED,6BAA6B;IAC7B,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,CAAmB;IAE/C,kCAAkC;IAClC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,CAAS;IAErC,yCAAyC;IACzC,OAAO,CAAC,CAAC,YAAY,CAAC,CAA6B;IAEnD,uCAAuC;IACvC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI;IAI1C,mDAAmD;IACnD,CAAC,kBAAkB,CAAC,IAAI,IAAI;IAc5B,mEAAmE;IACnE,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;CAS9B"}
package/dist/input.js CHANGED
@@ -73,6 +73,30 @@ class Input {
73
73
  listeners.push(listener);
74
74
  return this;
75
75
  }
76
+ /** Remove a specific callback registered with `on` */
77
+ off(event, listener) {
78
+ const listeners = this[InputOns].get(event);
79
+ if (listeners) {
80
+ const idx = listeners.indexOf(listener);
81
+ if (idx !== -1)
82
+ listeners.splice(idx, 1);
83
+ }
84
+ return this;
85
+ }
86
+ /** Alias for `off` */
87
+ removeListener(event, listener) {
88
+ return this.off(event, listener);
89
+ }
90
+ /** Remove all listeners for a given event, or all events if none specified */
91
+ removeAllListeners(event) {
92
+ if (event) {
93
+ this[InputOns].set(event, []);
94
+ }
95
+ else {
96
+ this[InputOns] = new Map();
97
+ }
98
+ return this;
99
+ }
76
100
  /** Register a callback to recieve the next specified update */
77
101
  once(event, listener) {
78
102
  const listeners = this[InputOnces].get(event);
package/dist/input.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
@@ -20,24 +20,14 @@ function main() {
20
20
  }`,
21
21
  );
22
22
  if (state) {
23
- setTimeout(() => {
24
- const fw = controller.firmwareInfo;
25
- if (fw) {
26
- console.log(
27
- `Firmware: v${formatFirmwareVersion(fw.mainFirmwareVersion)} | HW: ${fw.hardwareInfo} | DSP: ${fw.dspFirmwareVersion} | Built: ${fw.buildDate} ${fw.buildTime}`,
28
- );
29
- } else {
30
- console.log("Failed to query device firmware info");
31
- }
32
- const fi = controller.factoryInfo;
33
- if (fi) {
34
- console.log(
35
- `Factory: ${fi.colorName ?? fi.colorCode} | ${fi.boardRevision ?? "unknown board"} | Serial: ${fi.serialNumber}`,
36
- );
37
- } else {
38
- console.log("Failed to query device factory info");
39
- }
40
- }, 2000);
23
+ const fw = controller.firmwareInfo;
24
+ console.log(
25
+ `Firmware: v${formatFirmwareVersion(fw.mainFirmwareVersion)} | HW: ${fw.hardwareInfo} | DSP: ${fw.dspFirmwareVersion} | Built: ${fw.buildDate} ${fw.buildTime}`,
26
+ );
27
+ const fi = controller.factoryInfo;
28
+ console.log(
29
+ `Factory: ${fi.colorName} | ${fi.boardRevision} | Serial: ${fi.serialNumber}`,
30
+ );
41
31
  }
42
32
  });
43
33
 
@@ -208,17 +198,33 @@ function main() {
208
198
  console.log(`Headphone: ${state ? "connected" : "disconnected"}`);
209
199
  });
210
200
 
211
- // Log stick positions
212
- controller.left.analog.on("change", (analog) => {
201
+ // Demonstrate listener removal: PS button toggles stick logging
202
+ const leftStickHandler = (analog: typeof controller.left.analog) => {
213
203
  console.log(
214
204
  `Left — x: ${analog.x.state.toFixed(2)}, y: ${analog.y.state.toFixed(2)}`,
215
205
  );
216
- });
217
-
218
- controller.right.analog.on("change", (analog) => {
206
+ };
207
+ const rightStickHandler = (analog: typeof controller.right.analog) => {
219
208
  console.log(
220
209
  `Right — x: ${analog.x.state.toFixed(2)}, y: ${analog.y.state.toFixed(2)}`,
221
210
  );
211
+ };
212
+
213
+ let stickLogging = true;
214
+ controller.left.analog.on("change", leftStickHandler);
215
+ controller.right.analog.on("change", rightStickHandler);
216
+
217
+ controller.ps.on("press", () => {
218
+ stickLogging = !stickLogging;
219
+ if (stickLogging) {
220
+ controller.left.analog.on("change", leftStickHandler);
221
+ controller.right.analog.on("change", rightStickHandler);
222
+ console.log("Stick logging: on");
223
+ } else {
224
+ controller.left.analog.off("change", leftStickHandler);
225
+ controller.right.analog.off("change", rightStickHandler);
226
+ console.log("Stick logging: off");
227
+ }
222
228
  });
223
229
  }
224
230
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dualsense-ts",
3
- "version": "6.4.0",
3
+ "version": "6.5.0",
4
4
  "description": "A natural interface for your DualSense controller, with Typescript",
5
5
  "keywords": [
6
6
  "dualsense",
package/src/input.ts CHANGED
@@ -103,6 +103,31 @@ export abstract class Input<Type> implements AsyncIterator<Input<Type>> {
103
103
  return this;
104
104
  }
105
105
 
106
+ /** Remove a specific callback registered with `on` */
107
+ public off(event: InputEventType, listener: InputCallback<this>): this {
108
+ const listeners = this[InputOns].get(event);
109
+ if (listeners) {
110
+ const idx = listeners.indexOf(listener);
111
+ if (idx !== -1) listeners.splice(idx, 1);
112
+ }
113
+ return this;
114
+ }
115
+
116
+ /** Alias for `off` */
117
+ public removeListener(event: InputEventType, listener: InputCallback<this>): this {
118
+ return this.off(event, listener);
119
+ }
120
+
121
+ /** Remove all listeners for a given event, or all events if none specified */
122
+ public removeAllListeners(event?: InputEventType): this {
123
+ if (event) {
124
+ this[InputOns].set(event, []);
125
+ } else {
126
+ this[InputOns] = new Map();
127
+ }
128
+ return this;
129
+ }
130
+
106
131
  /** Register a callback to recieve the next specified update */
107
132
  public once(event: InputChangeType, listener: InputCallback<this>): this {
108
133
  const listeners = this[InputOnces].get(event);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "/dualsense-ts/static/css/main.9393bbb9.css",
4
- "main.js": "/dualsense-ts/static/js/main.1c1a2c23.js",
4
+ "main.js": "/dualsense-ts/static/js/main.2ba4cfae.js",
5
5
  "blueprint-icons-all-paths-loader.js": "/dualsense-ts/static/js/blueprint-icons-all-paths-loader.53883a20.chunk.js",
6
6
  "blueprint-icons-split-paths-by-size-loader.js": "/dualsense-ts/static/js/blueprint-icons-split-paths-by-size-loader.6d8a31ce.chunk.js",
7
7
  "static/js/787.b12b0301.chunk.js": "/dualsense-ts/static/js/787.b12b0301.chunk.js",
@@ -18,7 +18,7 @@
18
18
  "static/media/blueprint-icons-16.woff2?": "/dualsense-ts/static/media/blueprint-icons-16.582f87288ff1d1f0dfae.woff2",
19
19
  "index.html": "/dualsense-ts/index.html",
20
20
  "main.9393bbb9.css.map": "/dualsense-ts/static/css/main.9393bbb9.css.map",
21
- "main.1c1a2c23.js.map": "/dualsense-ts/static/js/main.1c1a2c23.js.map",
21
+ "main.2ba4cfae.js.map": "/dualsense-ts/static/js/main.2ba4cfae.js.map",
22
22
  "blueprint-icons-all-paths-loader.53883a20.chunk.js.map": "/dualsense-ts/static/js/blueprint-icons-all-paths-loader.53883a20.chunk.js.map",
23
23
  "blueprint-icons-split-paths-by-size-loader.6d8a31ce.chunk.js.map": "/dualsense-ts/static/js/blueprint-icons-split-paths-by-size-loader.6d8a31ce.chunk.js.map",
24
24
  "787.b12b0301.chunk.js.map": "/dualsense-ts/static/js/787.b12b0301.chunk.js.map",
@@ -28,6 +28,6 @@
28
28
  },
29
29
  "entrypoints": [
30
30
  "static/css/main.9393bbb9.css",
31
- "static/js/main.1c1a2c23.js"
31
+ "static/js/main.2ba4cfae.js"
32
32
  ]
33
33
  }
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/dualsense-ts/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#1a1a2e"/><title>dualsense-ts — PS5 DualSense Controller for TypeScript</title><meta name="description" content="Interactive WebHID demo for dualsense-ts. Connect a PS5 DualSense controller to your browser and control rumble, trigger effects, lightbar, player LEDs, and more."/><meta name="keywords" content="dualsense, ps5, controller, webhid, typescript, gamepad, haptics, trigger effects, lightbar, rumble"/><meta name="author" content="nsfm"/><meta name="robots" content="index, follow"/><meta property="og:type" content="website"/><meta property="og:title" content="dualsense-ts — PS5 DualSense Controller for TypeScript"/><meta property="og:description" content="Connect a PS5 DualSense controller to your browser. Control rumble, adaptive triggers, lightbar, player LEDs, and read every input in real time."/><meta property="og:url" content="https://nsfm.github.io/dualsense-ts/"/><meta property="og:site_name" content="dualsense-ts"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="dualsense-ts — PS5 DualSense Controller for TypeScript"/><meta name="twitter:description" content="Interactive WebHID demo. Connect a DualSense controller to your browser and control every feature in real time."/><link rel="canonical" href="https://nsfm.github.io/dualsense-ts/"/><link rel="manifest" href="/dualsense-ts/manifest.json"/><script type="text/javascript">!function(n){if("/"===n.search[1]){var a=n.search.slice(1).split("&").map((function(n){return n.replace(/~and~/g,"&")})).join("?");window.history.replaceState(null,null,n.pathname.slice(0,-1)+a+n.hash)}}(window.location)</script><script defer="defer" src="/dualsense-ts/static/js/main.1c1a2c23.js"></script><link href="/dualsense-ts/static/css/main.9393bbb9.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/dualsense-ts/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#1a1a2e"/><title>dualsense-ts — PS5 DualSense Controller for TypeScript</title><meta name="description" content="Interactive WebHID demo for dualsense-ts. Connect a PS5 DualSense controller to your browser and control rumble, trigger effects, lightbar, player LEDs, and more."/><meta name="keywords" content="dualsense, ps5, controller, webhid, typescript, gamepad, haptics, trigger effects, lightbar, rumble"/><meta name="author" content="nsfm"/><meta name="robots" content="index, follow"/><meta property="og:type" content="website"/><meta property="og:title" content="dualsense-ts — PS5 DualSense Controller for TypeScript"/><meta property="og:description" content="Connect a PS5 DualSense controller to your browser. Control rumble, adaptive triggers, lightbar, player LEDs, and read every input in real time."/><meta property="og:url" content="https://nsfm.github.io/dualsense-ts/"/><meta property="og:site_name" content="dualsense-ts"/><meta name="twitter:card" content="summary"/><meta name="twitter:title" content="dualsense-ts — PS5 DualSense Controller for TypeScript"/><meta name="twitter:description" content="Interactive WebHID demo. Connect a DualSense controller to your browser and control every feature in real time."/><link rel="canonical" href="https://nsfm.github.io/dualsense-ts/"/><link rel="manifest" href="/dualsense-ts/manifest.json"/><script type="text/javascript">!function(n){if("/"===n.search[1]){var a=n.search.slice(1).split("&").map((function(n){return n.replace(/~and~/g,"&")})).join("?");window.history.replaceState(null,null,n.pathname.slice(0,-1)+a+n.hash)}}(window.location)</script><script defer="defer" src="/dualsense-ts/static/js/main.2ba4cfae.js"></script><link href="/dualsense-ts/static/css/main.9393bbb9.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>