@bytezhang/hardware-transport-core 0.0.1

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.
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Generic cross-process proxy client base class.
3
+ *
4
+ * Provides:
5
+ * - Event handler management (on/off/removeAllListeners)
6
+ * - Unified event dispatching (by event group and type)
7
+ * - Generic `call()` that delegates to the subclass transport channel
8
+ *
9
+ * Subclasses only implement `sendCall()` to define the communication
10
+ * channel (Electron IPC, Chrome extension messaging, etc.).
11
+ *
12
+ * Works for any vendor (Trezor, Ledger, etc.) — vendor-specific
13
+ * method stubs are added in intermediate classes.
14
+ */
15
+ declare abstract class AbstractProxyClient {
16
+ private _handlers;
17
+ protected abstract sendCall(method: string, params?: unknown): Promise<unknown>;
18
+ on(event: string, handler: (...args: unknown[]) => void): void;
19
+ off(event: string, handler: (...args: unknown[]) => void): void;
20
+ removeAllListeners(): void;
21
+ /**
22
+ * Dispatch an event to registered handlers.
23
+ * Routes by both event group (e.g. 'DEVICE_EVENT') and
24
+ * specific type (e.g. 'device-connect') for full compatibility.
25
+ */
26
+ protected dispatchEvent(event: {
27
+ event?: string;
28
+ type?: string;
29
+ }): void;
30
+ /** Generic method call — vendor method stubs delegate here. */
31
+ call(method: string, params?: unknown): Promise<unknown>;
32
+ }
33
+
34
+ export { AbstractProxyClient };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Generic cross-process proxy client base class.
3
+ *
4
+ * Provides:
5
+ * - Event handler management (on/off/removeAllListeners)
6
+ * - Unified event dispatching (by event group and type)
7
+ * - Generic `call()` that delegates to the subclass transport channel
8
+ *
9
+ * Subclasses only implement `sendCall()` to define the communication
10
+ * channel (Electron IPC, Chrome extension messaging, etc.).
11
+ *
12
+ * Works for any vendor (Trezor, Ledger, etc.) — vendor-specific
13
+ * method stubs are added in intermediate classes.
14
+ */
15
+ declare abstract class AbstractProxyClient {
16
+ private _handlers;
17
+ protected abstract sendCall(method: string, params?: unknown): Promise<unknown>;
18
+ on(event: string, handler: (...args: unknown[]) => void): void;
19
+ off(event: string, handler: (...args: unknown[]) => void): void;
20
+ removeAllListeners(): void;
21
+ /**
22
+ * Dispatch an event to registered handlers.
23
+ * Routes by both event group (e.g. 'DEVICE_EVENT') and
24
+ * specific type (e.g. 'device-connect') for full compatibility.
25
+ */
26
+ protected dispatchEvent(event: {
27
+ event?: string;
28
+ type?: string;
29
+ }): void;
30
+ /** Generic method call — vendor method stubs delegate here. */
31
+ call(method: string, params?: unknown): Promise<unknown>;
32
+ }
33
+
34
+ export { AbstractProxyClient };
package/dist/index.js ADDED
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ AbstractProxyClient: () => AbstractProxyClient
24
+ });
25
+ module.exports = __toCommonJS(index_exports);
26
+
27
+ // src/AbstractProxyClient.ts
28
+ var AbstractProxyClient = class {
29
+ constructor() {
30
+ this._handlers = /* @__PURE__ */ new Map();
31
+ }
32
+ // ─── Event management ───────────────────────────────────
33
+ on(event, handler) {
34
+ if (!this._handlers.has(event)) this._handlers.set(event, /* @__PURE__ */ new Set());
35
+ this._handlers.get(event).add(handler);
36
+ }
37
+ off(event, handler) {
38
+ this._handlers.get(event)?.delete(handler);
39
+ }
40
+ removeAllListeners() {
41
+ this._handlers.clear();
42
+ }
43
+ /**
44
+ * Dispatch an event to registered handlers.
45
+ * Routes by both event group (e.g. 'DEVICE_EVENT') and
46
+ * specific type (e.g. 'device-connect') for full compatibility.
47
+ */
48
+ dispatchEvent(event) {
49
+ const group = event.event;
50
+ const type = event.type;
51
+ if (group) this._handlers.get(group)?.forEach((h) => h(event));
52
+ if (type && type !== group) this._handlers.get(type)?.forEach((h) => h(event));
53
+ }
54
+ /** Generic method call — vendor method stubs delegate here. */
55
+ call(method, params) {
56
+ return this.sendCall(method, params);
57
+ }
58
+ };
59
+ // Annotate the CommonJS export names for ESM import in node:
60
+ 0 && (module.exports = {
61
+ AbstractProxyClient
62
+ });
63
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/AbstractProxyClient.ts"],"sourcesContent":["export { AbstractProxyClient } from './AbstractProxyClient';\n","/**\n * Generic cross-process proxy client base class.\n *\n * Provides:\n * - Event handler management (on/off/removeAllListeners)\n * - Unified event dispatching (by event group and type)\n * - Generic `call()` that delegates to the subclass transport channel\n *\n * Subclasses only implement `sendCall()` to define the communication\n * channel (Electron IPC, Chrome extension messaging, etc.).\n *\n * Works for any vendor (Trezor, Ledger, etc.) — vendor-specific\n * method stubs are added in intermediate classes.\n */\nexport abstract class AbstractProxyClient {\n private _handlers = new Map<string, Set<(...args: unknown[]) => void>>();\n\n // ─── Subclass implements the transport channel ───────────\n protected abstract sendCall(method: string, params?: unknown): Promise<unknown>;\n\n // ─── Event management ───────────────────────────────────\n on(event: string, handler: (...args: unknown[]) => void): void {\n if (!this._handlers.has(event)) this._handlers.set(event, new Set());\n this._handlers.get(event)!.add(handler);\n }\n\n off(event: string, handler: (...args: unknown[]) => void): void {\n this._handlers.get(event)?.delete(handler);\n }\n\n removeAllListeners(): void {\n this._handlers.clear();\n }\n\n /**\n * Dispatch an event to registered handlers.\n * Routes by both event group (e.g. 'DEVICE_EVENT') and\n * specific type (e.g. 'device-connect') for full compatibility.\n */\n protected dispatchEvent(event: { event?: string; type?: string }): void {\n const group = event.event;\n const type = event.type;\n if (group) this._handlers.get(group)?.forEach(h => h(event));\n if (type && type !== group) this._handlers.get(type)?.forEach(h => h(event));\n }\n\n /** Generic method call — vendor method stubs delegate here. */\n call(method: string, params?: unknown): Promise<unknown> {\n return this.sendCall(method, params);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACcO,IAAe,sBAAf,MAAmC;AAAA,EAAnC;AACL,SAAQ,YAAY,oBAAI,IAA+C;AAAA;AAAA;AAAA,EAMvE,GAAG,OAAe,SAA6C;AAC7D,QAAI,CAAC,KAAK,UAAU,IAAI,KAAK,EAAG,MAAK,UAAU,IAAI,OAAO,oBAAI,IAAI,CAAC;AACnE,SAAK,UAAU,IAAI,KAAK,EAAG,IAAI,OAAO;AAAA,EACxC;AAAA,EAEA,IAAI,OAAe,SAA6C;AAC9D,SAAK,UAAU,IAAI,KAAK,GAAG,OAAO,OAAO;AAAA,EAC3C;AAAA,EAEA,qBAA2B;AACzB,SAAK,UAAU,MAAM;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,cAAc,OAAgD;AACtE,UAAM,QAAQ,MAAM;AACpB,UAAM,OAAO,MAAM;AACnB,QAAI,MAAO,MAAK,UAAU,IAAI,KAAK,GAAG,QAAQ,OAAK,EAAE,KAAK,CAAC;AAC3D,QAAI,QAAQ,SAAS,MAAO,MAAK,UAAU,IAAI,IAAI,GAAG,QAAQ,OAAK,EAAE,KAAK,CAAC;AAAA,EAC7E;AAAA;AAAA,EAGA,KAAK,QAAgB,QAAoC;AACvD,WAAO,KAAK,SAAS,QAAQ,MAAM;AAAA,EACrC;AACF;","names":[]}
package/dist/index.mjs ADDED
@@ -0,0 +1,36 @@
1
+ // src/AbstractProxyClient.ts
2
+ var AbstractProxyClient = class {
3
+ constructor() {
4
+ this._handlers = /* @__PURE__ */ new Map();
5
+ }
6
+ // ─── Event management ───────────────────────────────────
7
+ on(event, handler) {
8
+ if (!this._handlers.has(event)) this._handlers.set(event, /* @__PURE__ */ new Set());
9
+ this._handlers.get(event).add(handler);
10
+ }
11
+ off(event, handler) {
12
+ this._handlers.get(event)?.delete(handler);
13
+ }
14
+ removeAllListeners() {
15
+ this._handlers.clear();
16
+ }
17
+ /**
18
+ * Dispatch an event to registered handlers.
19
+ * Routes by both event group (e.g. 'DEVICE_EVENT') and
20
+ * specific type (e.g. 'device-connect') for full compatibility.
21
+ */
22
+ dispatchEvent(event) {
23
+ const group = event.event;
24
+ const type = event.type;
25
+ if (group) this._handlers.get(group)?.forEach((h) => h(event));
26
+ if (type && type !== group) this._handlers.get(type)?.forEach((h) => h(event));
27
+ }
28
+ /** Generic method call — vendor method stubs delegate here. */
29
+ call(method, params) {
30
+ return this.sendCall(method, params);
31
+ }
32
+ };
33
+ export {
34
+ AbstractProxyClient
35
+ };
36
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/AbstractProxyClient.ts"],"sourcesContent":["/**\n * Generic cross-process proxy client base class.\n *\n * Provides:\n * - Event handler management (on/off/removeAllListeners)\n * - Unified event dispatching (by event group and type)\n * - Generic `call()` that delegates to the subclass transport channel\n *\n * Subclasses only implement `sendCall()` to define the communication\n * channel (Electron IPC, Chrome extension messaging, etc.).\n *\n * Works for any vendor (Trezor, Ledger, etc.) — vendor-specific\n * method stubs are added in intermediate classes.\n */\nexport abstract class AbstractProxyClient {\n private _handlers = new Map<string, Set<(...args: unknown[]) => void>>();\n\n // ─── Subclass implements the transport channel ───────────\n protected abstract sendCall(method: string, params?: unknown): Promise<unknown>;\n\n // ─── Event management ───────────────────────────────────\n on(event: string, handler: (...args: unknown[]) => void): void {\n if (!this._handlers.has(event)) this._handlers.set(event, new Set());\n this._handlers.get(event)!.add(handler);\n }\n\n off(event: string, handler: (...args: unknown[]) => void): void {\n this._handlers.get(event)?.delete(handler);\n }\n\n removeAllListeners(): void {\n this._handlers.clear();\n }\n\n /**\n * Dispatch an event to registered handlers.\n * Routes by both event group (e.g. 'DEVICE_EVENT') and\n * specific type (e.g. 'device-connect') for full compatibility.\n */\n protected dispatchEvent(event: { event?: string; type?: string }): void {\n const group = event.event;\n const type = event.type;\n if (group) this._handlers.get(group)?.forEach(h => h(event));\n if (type && type !== group) this._handlers.get(type)?.forEach(h => h(event));\n }\n\n /** Generic method call — vendor method stubs delegate here. */\n call(method: string, params?: unknown): Promise<unknown> {\n return this.sendCall(method, params);\n }\n}\n"],"mappings":";AAcO,IAAe,sBAAf,MAAmC;AAAA,EAAnC;AACL,SAAQ,YAAY,oBAAI,IAA+C;AAAA;AAAA;AAAA,EAMvE,GAAG,OAAe,SAA6C;AAC7D,QAAI,CAAC,KAAK,UAAU,IAAI,KAAK,EAAG,MAAK,UAAU,IAAI,OAAO,oBAAI,IAAI,CAAC;AACnE,SAAK,UAAU,IAAI,KAAK,EAAG,IAAI,OAAO;AAAA,EACxC;AAAA,EAEA,IAAI,OAAe,SAA6C;AAC9D,SAAK,UAAU,IAAI,KAAK,GAAG,OAAO,OAAO;AAAA,EAC3C;AAAA,EAEA,qBAA2B;AACzB,SAAK,UAAU,MAAM;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOU,cAAc,OAAgD;AACtE,UAAM,QAAQ,MAAM;AACpB,UAAM,OAAO,MAAM;AACnB,QAAI,MAAO,MAAK,UAAU,IAAI,KAAK,GAAG,QAAQ,OAAK,EAAE,KAAK,CAAC;AAC3D,QAAI,QAAQ,SAAS,MAAO,MAAK,UAAU,IAAI,IAAI,GAAG,QAAQ,OAAK,EAAE,KAAK,CAAC;AAAA,EAC7E;AAAA;AAAA,EAGA,KAAK,QAAgB,QAAoC;AACvD,WAAO,KAAK,SAAS,QAAQ,MAAM;AAAA,EACrC;AACF;","names":[]}
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@bytezhang/hardware-transport-core",
3
+ "version": "0.0.1",
4
+ "description": "Shared transport utilities for cross-process hardware wallet communication",
5
+ "author": "OneKey",
6
+ "license": "MIT",
7
+ "main": "dist/index.js",
8
+ "module": "dist/index.mjs",
9
+ "types": "dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": { "types": "./dist/index.d.mts", "default": "./dist/index.mjs" },
13
+ "require": { "types": "./dist/index.d.ts", "default": "./dist/index.js" }
14
+ }
15
+ },
16
+ "files": ["dist"],
17
+ "scripts": {
18
+ "build": "tsup",
19
+ "dev": "tsup --watch",
20
+ "clean": "rimraf dist"
21
+ },
22
+ "devDependencies": {
23
+ "rimraf": "^5.0.0"
24
+ }
25
+ }