react-native-mcp-kit 3.0.1 → 4.1.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.
Files changed (195) hide show
  1. package/README.md +25 -13
  2. package/dist/babel/testIdPlugin.d.ts.map +1 -1
  3. package/dist/babel/testIdPlugin.js +22 -13
  4. package/dist/babel/testIdPlugin.js.map +1 -1
  5. package/dist/bin/ios-hid +0 -0
  6. package/dist/client/contexts/McpContext/McpProvider.d.ts.map +1 -1
  7. package/dist/client/contexts/McpContext/McpProvider.js +5 -5
  8. package/dist/client/contexts/McpContext/McpProvider.js.map +1 -1
  9. package/dist/client/core/McpClient.d.ts.map +1 -1
  10. package/dist/client/core/McpClient.js +42 -34
  11. package/dist/client/core/McpClient.js.map +1 -1
  12. package/dist/modules/alert/alert.d.ts.map +1 -1
  13. package/dist/modules/alert/alert.js +2 -5
  14. package/dist/modules/alert/alert.js.map +1 -1
  15. package/dist/modules/console/console.d.ts.map +1 -1
  16. package/dist/modules/console/console.js +32 -107
  17. package/dist/modules/console/console.js.map +1 -1
  18. package/dist/modules/console/types.d.ts +1 -0
  19. package/dist/modules/console/types.d.ts.map +1 -1
  20. package/dist/modules/device/device.d.ts.map +1 -1
  21. package/dist/modules/device/device.js +224 -133
  22. package/dist/modules/device/device.js.map +1 -1
  23. package/dist/modules/errors/errors.d.ts.map +1 -1
  24. package/dist/modules/errors/errors.js +19 -36
  25. package/dist/modules/errors/errors.js.map +1 -1
  26. package/dist/modules/fiberTree/children.d.ts +49 -0
  27. package/dist/modules/fiberTree/children.d.ts.map +1 -0
  28. package/dist/modules/fiberTree/children.js +182 -0
  29. package/dist/modules/fiberTree/children.js.map +1 -0
  30. package/dist/modules/fiberTree/constants.d.ts +13 -0
  31. package/dist/modules/fiberTree/constants.d.ts.map +1 -0
  32. package/dist/modules/fiberTree/constants.js +24 -0
  33. package/dist/modules/fiberTree/constants.js.map +1 -0
  34. package/dist/modules/fiberTree/fiberTree.d.ts +3 -6
  35. package/dist/modules/fiberTree/fiberTree.d.ts.map +1 -1
  36. package/dist/modules/fiberTree/fiberTree.js +219 -1080
  37. package/dist/modules/fiberTree/fiberTree.js.map +1 -1
  38. package/dist/modules/fiberTree/finder.d.ts +60 -0
  39. package/dist/modules/fiberTree/finder.d.ts.map +1 -0
  40. package/dist/modules/fiberTree/finder.js +107 -0
  41. package/dist/modules/fiberTree/finder.js.map +1 -0
  42. package/dist/modules/fiberTree/hooks.d.ts +103 -0
  43. package/dist/modules/fiberTree/hooks.d.ts.map +1 -0
  44. package/dist/modules/fiberTree/hooks.js +532 -0
  45. package/dist/modules/fiberTree/hooks.js.map +1 -0
  46. package/dist/modules/fiberTree/projection.d.ts +49 -0
  47. package/dist/modules/fiberTree/projection.d.ts.map +1 -0
  48. package/dist/modules/fiberTree/projection.js +82 -0
  49. package/dist/modules/fiberTree/projection.js.map +1 -0
  50. package/dist/modules/fiberTree/query.d.ts +56 -0
  51. package/dist/modules/fiberTree/query.d.ts.map +1 -0
  52. package/dist/modules/fiberTree/query.js +151 -0
  53. package/dist/modules/fiberTree/query.js.map +1 -0
  54. package/dist/modules/fiberTree/redact.d.ts +24 -0
  55. package/dist/modules/fiberTree/redact.d.ts.map +1 -0
  56. package/dist/modules/fiberTree/redact.js +51 -0
  57. package/dist/modules/fiberTree/redact.js.map +1 -0
  58. package/dist/modules/fiberTree/types.d.ts +7 -0
  59. package/dist/modules/fiberTree/types.d.ts.map +1 -1
  60. package/dist/modules/fiberTree/utils.d.ts +8 -2
  61. package/dist/modules/fiberTree/utils.d.ts.map +1 -1
  62. package/dist/modules/fiberTree/utils.js +79 -78
  63. package/dist/modules/fiberTree/utils.js.map +1 -1
  64. package/dist/modules/fiberTree/viewport.d.ts +28 -0
  65. package/dist/modules/fiberTree/viewport.d.ts.map +1 -0
  66. package/dist/modules/fiberTree/viewport.js +50 -0
  67. package/dist/modules/fiberTree/viewport.js.map +1 -0
  68. package/dist/modules/fiberTree/waitFor.d.ts +52 -0
  69. package/dist/modules/fiberTree/waitFor.d.ts.map +1 -0
  70. package/dist/modules/fiberTree/waitFor.js +98 -0
  71. package/dist/modules/fiberTree/waitFor.js.map +1 -0
  72. package/dist/modules/logBox/logBox.d.ts.map +1 -1
  73. package/dist/modules/logBox/logBox.js +59 -66
  74. package/dist/modules/logBox/logBox.js.map +1 -1
  75. package/dist/modules/navigation/navigation.d.ts.map +1 -1
  76. package/dist/modules/navigation/navigation.js +115 -114
  77. package/dist/modules/navigation/navigation.js.map +1 -1
  78. package/dist/modules/network/network.d.ts.map +1 -1
  79. package/dist/modules/network/network.js +78 -197
  80. package/dist/modules/network/network.js.map +1 -1
  81. package/dist/modules/network/types.d.ts +23 -27
  82. package/dist/modules/network/types.d.ts.map +1 -1
  83. package/dist/modules/reactQuery/reactQuery.d.ts.map +1 -1
  84. package/dist/modules/reactQuery/reactQuery.js +46 -52
  85. package/dist/modules/reactQuery/reactQuery.js.map +1 -1
  86. package/dist/modules/storage/storage.d.ts.map +1 -1
  87. package/dist/modules/storage/storage.js +20 -3
  88. package/dist/modules/storage/storage.js.map +1 -1
  89. package/dist/server/bridge.d.ts +1 -0
  90. package/dist/server/bridge.d.ts.map +1 -1
  91. package/dist/server/bridge.js +1 -0
  92. package/dist/server/bridge.js.map +1 -1
  93. package/dist/server/host/coredevice/dtx.d.ts +79 -0
  94. package/dist/server/host/coredevice/dtx.d.ts.map +1 -0
  95. package/dist/server/host/coredevice/dtx.js +453 -0
  96. package/dist/server/host/coredevice/dtx.js.map +1 -0
  97. package/dist/server/host/coredevice/nska.d.ts +6 -0
  98. package/dist/server/host/coredevice/nska.d.ts.map +1 -0
  99. package/dist/server/host/coredevice/nska.js +277 -0
  100. package/dist/server/host/coredevice/nska.js.map +1 -0
  101. package/dist/server/host/coredevice/rsd.d.ts +20 -0
  102. package/dist/server/host/coredevice/rsd.d.ts.map +1 -0
  103. package/dist/server/host/coredevice/rsd.js +244 -0
  104. package/dist/server/host/coredevice/rsd.js.map +1 -0
  105. package/dist/server/host/coredevice/screenshot.d.ts +11 -0
  106. package/dist/server/host/coredevice/screenshot.d.ts.map +1 -0
  107. package/dist/server/host/coredevice/screenshot.js +84 -0
  108. package/dist/server/host/coredevice/screenshot.js.map +1 -0
  109. package/dist/server/host/coredevice/tunnel.d.ts +29 -0
  110. package/dist/server/host/coredevice/tunnel.d.ts.map +1 -0
  111. package/dist/server/host/coredevice/tunnel.js +222 -0
  112. package/dist/server/host/coredevice/tunnel.js.map +1 -0
  113. package/dist/server/host/coredevice/xpc.d.ts +21 -0
  114. package/dist/server/host/coredevice/xpc.d.ts.map +1 -0
  115. package/dist/server/host/coredevice/xpc.js +318 -0
  116. package/dist/server/host/coredevice/xpc.js.map +1 -0
  117. package/dist/server/host/deviceResolver.d.ts +8 -0
  118. package/dist/server/host/deviceResolver.d.ts.map +1 -1
  119. package/dist/server/host/deviceResolver.js +128 -62
  120. package/dist/server/host/deviceResolver.js.map +1 -1
  121. package/dist/server/host/tools/capture.d.ts.map +1 -1
  122. package/dist/server/host/tools/capture.js +26 -0
  123. package/dist/server/host/tools/capture.js.map +1 -1
  124. package/dist/server/host/tools/input.js +2 -2
  125. package/dist/server/host/tools/input.js.map +1 -1
  126. package/dist/server/mcpServer.d.ts.map +1 -1
  127. package/dist/server/mcpServer.js +44 -3
  128. package/dist/server/mcpServer.js.map +1 -1
  129. package/dist/server/metro/eventCapture.d.ts +0 -2
  130. package/dist/server/metro/eventCapture.d.ts.map +1 -1
  131. package/dist/server/metro/eventCapture.js +1 -2
  132. package/dist/server/metro/eventCapture.js.map +1 -1
  133. package/dist/server/metro/tools/events.d.ts.map +1 -1
  134. package/dist/server/metro/tools/events.js +11 -11
  135. package/dist/server/metro/tools/events.js.map +1 -1
  136. package/dist/shared/projection/projectValue.d.ts +90 -0
  137. package/dist/shared/projection/projectValue.d.ts.map +1 -0
  138. package/dist/shared/projection/projectValue.js +322 -0
  139. package/dist/shared/projection/projectValue.js.map +1 -0
  140. package/dist/shared/projection/redact.d.ts +31 -0
  141. package/dist/shared/projection/redact.d.ts.map +1 -0
  142. package/dist/shared/projection/redact.js +78 -0
  143. package/dist/shared/projection/redact.js.map +1 -0
  144. package/dist/shared/projection/resolvePath.d.ts +45 -0
  145. package/dist/shared/projection/resolvePath.d.ts.map +1 -0
  146. package/dist/shared/projection/resolvePath.js +211 -0
  147. package/dist/shared/projection/resolvePath.js.map +1 -0
  148. package/dist/shared/protocol.d.ts +2 -1
  149. package/dist/shared/protocol.d.ts.map +1 -1
  150. package/dist/shared/protocol.js +1 -1
  151. package/dist/shared/rn/core.d.ts +48 -0
  152. package/dist/shared/rn/core.d.ts.map +1 -0
  153. package/dist/shared/rn/core.js +100 -0
  154. package/dist/shared/rn/core.js.map +1 -0
  155. package/dist/shared/rn/deviceInfo.d.ts +40 -0
  156. package/dist/shared/rn/deviceInfo.d.ts.map +1 -0
  157. package/dist/shared/rn/deviceInfo.js +78 -0
  158. package/dist/shared/rn/deviceInfo.js.map +1 -0
  159. package/package.json +4 -2
  160. package/dist/client/hooks/useMcpState.d.ts +0 -3
  161. package/dist/client/hooks/useMcpState.d.ts.map +0 -1
  162. package/dist/client/hooks/useMcpState.js +0 -20
  163. package/dist/client/hooks/useMcpState.js.map +0 -1
  164. package/dist/server/canonicalize.d.ts +0 -8
  165. package/dist/server/canonicalize.d.ts.map +0 -1
  166. package/dist/server/canonicalize.js +0 -23
  167. package/dist/server/canonicalize.js.map +0 -1
  168. package/dist/server/host/modules/screenshot.d.ts +0 -4
  169. package/dist/server/host/modules/screenshot.d.ts.map +0 -1
  170. package/dist/server/host/modules/screenshot.js +0 -615
  171. package/dist/server/host/modules/screenshot.js.map +0 -1
  172. package/dist/server/host/tools/connectionStatus.d.ts +0 -9
  173. package/dist/server/host/tools/connectionStatus.d.ts.map +0 -1
  174. package/dist/server/host/tools/connectionStatus.js +0 -39
  175. package/dist/server/host/tools/connectionStatus.js.map +0 -1
  176. package/dist/server/host/tools/symbolicate.d.ts +0 -3
  177. package/dist/server/host/tools/symbolicate.d.ts.map +0 -1
  178. package/dist/server/host/tools/symbolicate.js +0 -209
  179. package/dist/server/host/tools/symbolicate.js.map +0 -1
  180. package/dist/server/host/wda.d.ts +0 -15
  181. package/dist/server/host/wda.d.ts.map +0 -1
  182. package/dist/server/host/wda.js +0 -100
  183. package/dist/server/host/wda.js.map +0 -1
  184. package/dist/server/inputSchemaToZod.d.ts +0 -19
  185. package/dist/server/inputSchemaToZod.d.ts.map +0 -1
  186. package/dist/server/inputSchemaToZod.js +0 -89
  187. package/dist/server/inputSchemaToZod.js.map +0 -1
  188. package/dist/server/metro/tools/openUrl.d.ts +0 -3
  189. package/dist/server/metro/tools/openUrl.d.ts.map +0 -1
  190. package/dist/server/metro/tools/openUrl.js +0 -71
  191. package/dist/server/metro/tools/openUrl.js.map +0 -1
  192. package/dist/shared/slice.d.ts +0 -16
  193. package/dist/shared/slice.d.ts.map +0 -1
  194. package/dist/shared/slice.js +0 -29
  195. package/dist/shared/slice.js.map +0 -1
@@ -0,0 +1,453 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DtxConnection = exports.buildDtxAux = exports.dtxInt32 = void 0;
4
+ const node_net_1 = require("node:net");
5
+ const nska_1 = require("./nska");
6
+ // DTX is Apple's binary RPC over TCP, used by the Instruments stack on the
7
+ // device. We speak it on top of a connection opened to the
8
+ // `com.apple.instruments.dtservicehub` port returned by RSD.
9
+ //
10
+ // Wire format is documented in PROTOCOL.md. In short: each message is one
11
+ // or more fragments. A fragment is a 32-byte header followed by an
12
+ // optional body. The first fragment of a multi-fragment message carries
13
+ // the TOTAL assembled body size in its `bodySize` header field and no
14
+ // body bytes; subsequent fragments carry their own chunk of the body.
15
+ // The first body chunk begins with a 16-byte per-message header whose
16
+ // `aux_size` and `total_size` describe the NSKeyedArchiver-encoded
17
+ // argument and payload sections.
18
+ const DTX_FRAGMENT_MAGIC = 0x1f3d5b79;
19
+ const DTX_FRAGMENT_HEADER_SIZE = 32;
20
+ const DTX_MESSAGE_HEADER_SIZE = 16;
21
+ const DTX_MAX_FRAGMENT_BODY = 64 * 1024;
22
+ const DTX_FLAG_EXPECTS_REPLY = 1 << 0;
23
+ var DtxMessageType;
24
+ (function (DtxMessageType) {
25
+ DtxMessageType[DtxMessageType["Ok"] = 0] = "Ok";
26
+ DtxMessageType[DtxMessageType["Data"] = 1] = "Data";
27
+ DtxMessageType[DtxMessageType["Dispatch"] = 2] = "Dispatch";
28
+ DtxMessageType[DtxMessageType["Object"] = 3] = "Object";
29
+ DtxMessageType[DtxMessageType["Error"] = 4] = "Error";
30
+ })(DtxMessageType || (DtxMessageType = {}));
31
+ const DTX_MESSAGE_TYPE_MAX = DtxMessageType.Error;
32
+ const writeFragmentHeader = (h) => {
33
+ const buf = Buffer.alloc(DTX_FRAGMENT_HEADER_SIZE);
34
+ buf.writeUInt32LE(DTX_FRAGMENT_MAGIC, 0);
35
+ buf.writeUInt32LE(DTX_FRAGMENT_HEADER_SIZE, 4);
36
+ buf.writeUInt16LE(h.fragmentIndex, 8);
37
+ buf.writeUInt16LE(h.fragmentCount, 10);
38
+ buf.writeUInt32LE(h.bodySize, 12);
39
+ buf.writeUInt32LE(h.identifier, 16);
40
+ buf.writeUInt32LE(h.conversationIndex, 20);
41
+ buf.writeInt32LE(h.channelCode, 24);
42
+ buf.writeUInt32LE(h.flags, 28);
43
+ return buf;
44
+ };
45
+ const parseFragmentHeader = (buf, offset = 0) => {
46
+ const magic = buf.readUInt32LE(offset);
47
+ if (magic !== DTX_FRAGMENT_MAGIC) {
48
+ throw new Error(`Bad DTX fragment magic 0x${magic.toString(16)} at offset ${offset}`);
49
+ }
50
+ const headerSize = buf.readUInt32LE(offset + 4);
51
+ if (headerSize !== DTX_FRAGMENT_HEADER_SIZE) {
52
+ throw new Error(`Unexpected DTX fragment header size ${headerSize}`);
53
+ }
54
+ return {
55
+ bodySize: buf.readUInt32LE(offset + 12),
56
+ channelCode: buf.readInt32LE(offset + 24),
57
+ conversationIndex: buf.readUInt32LE(offset + 20),
58
+ flags: buf.readUInt32LE(offset + 28),
59
+ fragmentCount: buf.readUInt16LE(offset + 10),
60
+ fragmentIndex: buf.readUInt16LE(offset + 8),
61
+ identifier: buf.readUInt32LE(offset + 16),
62
+ };
63
+ };
64
+ const writeMessageHeader = (h) => {
65
+ const buf = Buffer.alloc(DTX_MESSAGE_HEADER_SIZE);
66
+ buf.writeUInt8(h.msgType, 0);
67
+ // bytes 1..3 reserved
68
+ buf.writeUInt32LE(h.auxSize, 4);
69
+ buf.writeUInt32LE(h.totalSize, 8);
70
+ buf.writeUInt32LE(h.flags, 12);
71
+ return buf;
72
+ };
73
+ const parseMessageHeader = (buf) => {
74
+ const rawMsgType = buf.readUInt8(0);
75
+ if (rawMsgType > DTX_MESSAGE_TYPE_MAX) {
76
+ throw new Error(`Unknown DTX msgType ${rawMsgType}`);
77
+ }
78
+ return {
79
+ auxSize: buf.readUInt32LE(4),
80
+ flags: buf.readUInt32LE(12),
81
+ msgType: rawMsgType,
82
+ totalSize: buf.readUInt32LE(8),
83
+ };
84
+ };
85
+ const buildDtxMessage = (msg) => {
86
+ const messageHeader = writeMessageHeader({
87
+ auxSize: msg.aux.length,
88
+ flags: 0,
89
+ msgType: msg.msgType,
90
+ totalSize: msg.aux.length + msg.payload.length,
91
+ });
92
+ const body = Buffer.concat([messageHeader, msg.aux, msg.payload]);
93
+ if (body.length <= DTX_MAX_FRAGMENT_BODY) {
94
+ return Buffer.concat([
95
+ writeFragmentHeader({
96
+ bodySize: body.length,
97
+ channelCode: msg.channelCode,
98
+ conversationIndex: msg.conversationIndex,
99
+ flags: msg.flags,
100
+ fragmentCount: 1,
101
+ fragmentIndex: 0,
102
+ identifier: msg.identifier,
103
+ }),
104
+ body,
105
+ ]);
106
+ }
107
+ const bodyChunks = [];
108
+ for (let off = 0; off < body.length; off += DTX_MAX_FRAGMENT_BODY) {
109
+ bodyChunks.push(body.subarray(off, Math.min(off + DTX_MAX_FRAGMENT_BODY, body.length)));
110
+ }
111
+ const fragmentCount = bodyChunks.length + 1;
112
+ const fragments = [
113
+ // Announce fragment: bodySize = TOTAL message size, no body bytes on the wire.
114
+ writeFragmentHeader({
115
+ bodySize: body.length,
116
+ channelCode: msg.channelCode,
117
+ conversationIndex: msg.conversationIndex,
118
+ flags: msg.flags,
119
+ fragmentCount,
120
+ fragmentIndex: 0,
121
+ identifier: msg.identifier,
122
+ }),
123
+ ];
124
+ for (let i = 0; i < bodyChunks.length; i++) {
125
+ fragments.push(writeFragmentHeader({
126
+ bodySize: bodyChunks[i].length,
127
+ channelCode: msg.channelCode,
128
+ conversationIndex: msg.conversationIndex,
129
+ flags: msg.flags,
130
+ fragmentCount,
131
+ fragmentIndex: i + 1,
132
+ identifier: msg.identifier,
133
+ }), bodyChunks[i]);
134
+ }
135
+ return Buffer.concat(fragments);
136
+ };
137
+ // Stream parser: push raw socket bytes in, pull reassembled `DtxMessage`s
138
+ // out. Multi-fragment messages are buffered per-identifier until the
139
+ // last body fragment lands.
140
+ class DtxReader {
141
+ buffer = Buffer.alloc(0);
142
+ pending = new Map();
143
+ push(chunk) {
144
+ this.buffer = this.buffer.length === 0 ? chunk : Buffer.concat([this.buffer, chunk]);
145
+ }
146
+ next() {
147
+ while (this.buffer.length >= DTX_FRAGMENT_HEADER_SIZE) {
148
+ const header = parseFragmentHeader(this.buffer);
149
+ const isAnnounce = header.fragmentCount > 1 && header.fragmentIndex === 0;
150
+ const onWireBodySize = isAnnounce ? 0 : header.bodySize;
151
+ const totalLength = DTX_FRAGMENT_HEADER_SIZE + onWireBodySize;
152
+ if (this.buffer.length < totalLength)
153
+ return null;
154
+ const body = isAnnounce
155
+ ? Buffer.alloc(0)
156
+ : this.buffer.subarray(DTX_FRAGMENT_HEADER_SIZE, totalLength);
157
+ this.buffer = this.buffer.subarray(totalLength);
158
+ if (header.fragmentCount === 1) {
159
+ return this.assemble([body], header);
160
+ }
161
+ if (isAnnounce) {
162
+ this.pending.set(header.identifier, { fragments: [], header });
163
+ continue;
164
+ }
165
+ const slot = this.pending.get(header.identifier);
166
+ if (!slot) {
167
+ // No announce was registered — treat as a one-off so a single
168
+ // decode hiccup doesn't bring the connection down.
169
+ return this.assemble([body], header);
170
+ }
171
+ slot.fragments.push(body);
172
+ if (slot.fragments.length === slot.header.fragmentCount - 1) {
173
+ this.pending.delete(header.identifier);
174
+ return this.assemble(slot.fragments, slot.header);
175
+ }
176
+ }
177
+ return null;
178
+ }
179
+ assemble(bodyChunks, header) {
180
+ const body = bodyChunks.length === 1 ? bodyChunks[0] : Buffer.concat(bodyChunks);
181
+ if (body.length < DTX_MESSAGE_HEADER_SIZE) {
182
+ throw new Error(`DTX message body shorter than header (${body.length} bytes)`);
183
+ }
184
+ const msgHeader = parseMessageHeader(body);
185
+ if (msgHeader.totalSize > body.length - DTX_MESSAGE_HEADER_SIZE) {
186
+ throw new Error(`DTX message totalSize ${msgHeader.totalSize} exceeds body length ${body.length - DTX_MESSAGE_HEADER_SIZE}`);
187
+ }
188
+ const aux = body.subarray(DTX_MESSAGE_HEADER_SIZE, DTX_MESSAGE_HEADER_SIZE + msgHeader.auxSize);
189
+ const payload = body.subarray(DTX_MESSAGE_HEADER_SIZE + msgHeader.auxSize, DTX_MESSAGE_HEADER_SIZE + msgHeader.totalSize);
190
+ return {
191
+ aux,
192
+ channelCode: header.channelCode,
193
+ conversationIndex: header.conversationIndex,
194
+ flags: header.flags,
195
+ identifier: header.identifier,
196
+ msgType: msgHeader.msgType,
197
+ payload,
198
+ };
199
+ }
200
+ }
201
+ // DTX aux dictionary — a typed-primitive list that carries a method's
202
+ // positional arguments. Wire layout:
203
+ //
204
+ // uint32 type_and_flags = 0x1F0
205
+ // uint32 reserved = 0
206
+ // uint64 body_length bytes following this header
207
+ // <body>
208
+ // For each positional arg:
209
+ // <Null primitive> (key — positional convention)
210
+ // <value primitive> (one of the tagged primitives below)
211
+ //
212
+ // Primitive tags (uint32):
213
+ // 0x0A Null (tag only)
214
+ // 0x01 String (uint32 length + utf-8 bytes)
215
+ // 0x02 Buffer (uint32 length + raw bytes; usually an NSKA blob)
216
+ // 0x03 Int32 (uint32 value)
217
+ // 0x06 Int64 (uint64 value)
218
+ // 0x09 Double (float64 LE)
219
+ //
220
+ // A plain JS value handed to `buildDtxAux` defaults to an NSKA-encoded
221
+ // Buffer primitive — that matches Apple's "every object goes through
222
+ // NSKeyedArchiver" convention. Use `dtxInt32` (or future helpers) when
223
+ // the wire type matters; channel codes for instance must be Int32, not
224
+ // NSKA buffers.
225
+ const DTX_AUX_DICT_MAGIC = 0x000001f0;
226
+ const writePrimitive = (chunks, p) => {
227
+ switch (p.kind) {
228
+ case 'null': {
229
+ const h = Buffer.alloc(4);
230
+ h.writeUInt32LE(0x0a, 0);
231
+ chunks.push(h);
232
+ return;
233
+ }
234
+ case 'string': {
235
+ const utf8 = Buffer.from(p.value, 'utf8');
236
+ const h = Buffer.alloc(8);
237
+ h.writeUInt32LE(0x01, 0);
238
+ h.writeUInt32LE(utf8.length, 4);
239
+ chunks.push(h, utf8);
240
+ return;
241
+ }
242
+ case 'buffer': {
243
+ const h = Buffer.alloc(8);
244
+ h.writeUInt32LE(0x02, 0);
245
+ h.writeUInt32LE(p.value.length, 4);
246
+ chunks.push(h, p.value);
247
+ return;
248
+ }
249
+ case 'int32': {
250
+ const buf = Buffer.alloc(8);
251
+ buf.writeUInt32LE(0x03, 0);
252
+ buf.writeInt32LE(p.value, 4);
253
+ chunks.push(buf);
254
+ return;
255
+ }
256
+ case 'int64': {
257
+ const buf = Buffer.alloc(12);
258
+ buf.writeUInt32LE(0x06, 0);
259
+ buf.writeBigInt64LE(p.value, 4);
260
+ chunks.push(buf);
261
+ return;
262
+ }
263
+ case 'double': {
264
+ const buf = Buffer.alloc(12);
265
+ buf.writeUInt32LE(0x09, 0);
266
+ buf.writeDoubleLE(p.value, 4);
267
+ chunks.push(buf);
268
+ return;
269
+ }
270
+ }
271
+ };
272
+ const dtxInt32 = (value) => {
273
+ return { kind: 'int32', value };
274
+ };
275
+ exports.dtxInt32 = dtxInt32;
276
+ const argToPrimitive = (arg) => {
277
+ if (arg &&
278
+ typeof arg === 'object' &&
279
+ !Buffer.isBuffer(arg) &&
280
+ !Array.isArray(arg) &&
281
+ 'kind' in arg &&
282
+ typeof arg.kind === 'string') {
283
+ return arg;
284
+ }
285
+ return { kind: 'buffer', value: (0, nska_1.encodeNska)(arg) };
286
+ };
287
+ const buildDtxAux = (args) => {
288
+ if (args.length === 0)
289
+ return Buffer.alloc(0);
290
+ const bodyChunks = [];
291
+ for (const arg of args) {
292
+ writePrimitive(bodyChunks, { kind: 'null' });
293
+ writePrimitive(bodyChunks, argToPrimitive(arg));
294
+ }
295
+ const body = Buffer.concat(bodyChunks);
296
+ const header = Buffer.alloc(16);
297
+ header.writeUInt32LE(DTX_AUX_DICT_MAGIC, 0);
298
+ header.writeUInt32LE(0, 4);
299
+ header.writeBigUInt64LE(BigInt(body.length), 8);
300
+ return Buffer.concat([header, body]);
301
+ };
302
+ exports.buildDtxAux = buildDtxAux;
303
+ const DEFAULT_INVOKE_TIMEOUT_MS = 15_000;
304
+ class DtxConnectionError extends Error {
305
+ constructor(message) {
306
+ super(message);
307
+ this.name = 'DtxConnectionError';
308
+ }
309
+ }
310
+ class DtxConnection {
311
+ socket;
312
+ reader = new DtxReader();
313
+ pendingReplies = new Map();
314
+ closed = false;
315
+ socketError = null;
316
+ constructor(socket) {
317
+ this.socket = socket;
318
+ this.socket.on('data', (chunk) => {
319
+ this.handleChunk(chunk);
320
+ });
321
+ this.socket.on('error', (err) => {
322
+ this.socketError = err;
323
+ this.failAllPending(err);
324
+ });
325
+ this.socket.on('close', () => {
326
+ this.closed = true;
327
+ if (!this.socketError) {
328
+ this.failAllPending(new DtxConnectionError('DTX socket closed'));
329
+ }
330
+ });
331
+ }
332
+ static async open(deviceAddress, hostAddress, port, options = {}) {
333
+ const timeoutMs = options.timeoutMs ?? 10_000;
334
+ const socket = (0, node_net_1.createConnection)({
335
+ host: deviceAddress,
336
+ localAddress: hostAddress,
337
+ port,
338
+ });
339
+ await new Promise((resolve, reject) => {
340
+ const onConnect = () => {
341
+ cleanup();
342
+ resolve();
343
+ };
344
+ const onError = (err) => {
345
+ cleanup();
346
+ reject(err);
347
+ };
348
+ const timer = setTimeout(() => {
349
+ cleanup();
350
+ socket.destroy();
351
+ reject(new DtxConnectionError(`DTX connect to [${deviceAddress}]:${port} timed out after ${timeoutMs}ms`));
352
+ }, timeoutMs);
353
+ const cleanup = () => {
354
+ clearTimeout(timer);
355
+ socket.off('connect', onConnect);
356
+ socket.off('error', onError);
357
+ };
358
+ socket.once('connect', onConnect);
359
+ socket.once('error', onError);
360
+ });
361
+ return new DtxConnection(socket);
362
+ }
363
+ invoke(channelCode, payload, aux, options) {
364
+ if (this.closed) {
365
+ return Promise.reject(new DtxConnectionError('DTX connection is closed'));
366
+ }
367
+ const wantsReply = options.wantsReply ?? true;
368
+ const flags = wantsReply ? DTX_FLAG_EXPECTS_REPLY : 0;
369
+ let replyPromise = null;
370
+ if (wantsReply) {
371
+ if (this.pendingReplies.has(options.identifier)) {
372
+ return Promise.reject(new DtxConnectionError(`Duplicate DTX identifier ${options.identifier} — caller must keep ids unique on a connection`));
373
+ }
374
+ const id = options.identifier;
375
+ const timeoutMs = options.timeoutMs ?? DEFAULT_INVOKE_TIMEOUT_MS;
376
+ replyPromise = new Promise((resolve, reject) => {
377
+ const timer = setTimeout(() => {
378
+ const slot = this.pendingReplies.get(id);
379
+ if (!slot)
380
+ return;
381
+ this.pendingReplies.delete(id);
382
+ reject(new DtxConnectionError(`DTX reply for id=${id} timed out after ${timeoutMs}ms`));
383
+ }, timeoutMs);
384
+ this.pendingReplies.set(id, { reject, resolve, timer });
385
+ });
386
+ }
387
+ this.socket.write(buildDtxMessage({
388
+ aux,
389
+ channelCode,
390
+ conversationIndex: 0,
391
+ flags,
392
+ identifier: options.identifier,
393
+ msgType: DtxMessageType.Dispatch,
394
+ payload,
395
+ }));
396
+ return wantsReply ? replyPromise : Promise.resolve();
397
+ }
398
+ close() {
399
+ if (this.closed)
400
+ return;
401
+ this.closed = true;
402
+ try {
403
+ this.socket.destroy();
404
+ }
405
+ catch {
406
+ // best-effort
407
+ }
408
+ this.failAllPending(new DtxConnectionError('DTX connection closed by caller'));
409
+ }
410
+ handleChunk(chunk) {
411
+ this.reader.push(chunk);
412
+ for (;;) {
413
+ let msg;
414
+ try {
415
+ msg = this.reader.next();
416
+ }
417
+ catch (err) {
418
+ this.failAllPending(err);
419
+ this.close();
420
+ return;
421
+ }
422
+ if (!msg)
423
+ return;
424
+ this.dispatch(msg);
425
+ }
426
+ }
427
+ dispatch(msg) {
428
+ if (msg.conversationIndex === 0)
429
+ return; // peer-initiated, no waiter
430
+ const slot = this.pendingReplies.get(msg.identifier);
431
+ if (!slot)
432
+ return;
433
+ this.pendingReplies.delete(msg.identifier);
434
+ if (slot.timer)
435
+ clearTimeout(slot.timer);
436
+ if (msg.msgType === DtxMessageType.Error) {
437
+ slot.reject(new DtxConnectionError(`DTX peer returned error message (id=${msg.identifier})`));
438
+ }
439
+ else {
440
+ slot.resolve(msg);
441
+ }
442
+ }
443
+ failAllPending(err) {
444
+ for (const slot of this.pendingReplies.values()) {
445
+ if (slot.timer)
446
+ clearTimeout(slot.timer);
447
+ slot.reject(err);
448
+ }
449
+ this.pendingReplies.clear();
450
+ }
451
+ }
452
+ exports.DtxConnection = DtxConnection;
453
+ //# sourceMappingURL=dtx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dtx.js","sourceRoot":"","sources":["../../../../src/server/host/coredevice/dtx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type NskaValue = null | boolean | bigint | number | string | Buffer | NskaValue[] | {
2
+ [key: string]: NskaValue;
3
+ };
4
+ export declare const encodeNska: (value: NskaValue) => Buffer;
5
+ export declare const decodeNska: (buf: Buffer) => NskaValue;
6
+ //# sourceMappingURL=nska.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nska.d.ts","sourceRoot":"","sources":["../../../../src/server/host/coredevice/nska.ts"],"names":[],"mappings":"AA8BA,MAAM,MAAM,SAAS,GACjB,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,MAAM,GACN,MAAM,GACN,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAqIjC,eAAO,MAAM,UAAU,UAAW,SAAS,KAAG,MAU7C,CAAC;AA8HF,eAAO,MAAM,UAAU,QAAS,MAAM,KAAG,SASxC,CAAC"}