exoproc-accessors 0.1.0 → 0.6.2

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,363 @@
1
+ import { Thread, Module } from 'bun-winapi';
2
+ import { Kernel32Impl } from 'bun-xffi';
3
+ import { CallThreadDiedError, NThread } from 'bun-nthread';
4
+ import { NShm } from 'bun-nshm';
5
+ import { attachNJava, findNJava, getNJava, getReflection, findReflection, getJavaClass, } from 'bun-njava';
6
+ import { HostAccessor, RedirectorHostAccessor, } from './middleware-accessor.js';
7
+ import { IndirectNThreadHostAccessor, NThreadRaceAccessor, } from './indirect-nthread-host-accessor.js';
8
+ import { createStealthJavaAccessor, spawnStealthWorkerThread, } from './stealth-java.js';
9
+ export { createStealthJavaAccessor, spawnStealthWorkerThread, attachNJava, findNJava, getNJava, getReflection, findReflection, getJavaClass, };
10
+ /**
11
+ * Default for {@link AccessorOptions.idType} when omitted -- `id` is treated
12
+ * as a pid and every one of its threads races for the hijack (see
13
+ * {@link NThreadRaceAccessor}), so callers don't have to pick a thread
14
+ * themselves.
15
+ */
16
+ const DEFAULT_ID_TYPE = 'processAllThreadIds';
17
+ /** Resolves `id` (a raw thread id) to its owning `{ pid, threadId }` pair. */
18
+ function resolveFromThreadId(id) {
19
+ // pid=0 means "all processes" -- a bare thread id doesn't tell us which
20
+ // process owns it, so the system-wide snapshot has to be searched.
21
+ const entry = Thread.getThreads(0).find((t) => t.tid === id);
22
+ if (!entry) {
23
+ throw new Error(`createAccessor: no thread with id ${id} found`);
24
+ }
25
+ return { pid: entry.ownerPid, threadId: id };
26
+ }
27
+ /** Resolves `id` (a process id) to `{ pid, threadId }` via its first enumerable thread. */
28
+ function resolveFromProcessId(id) {
29
+ const threadId = Thread.getThreads(id)[0]?.tid;
30
+ if (threadId === undefined) {
31
+ throw new Error(`createAccessor: process ${id} has no threads to redirect`);
32
+ }
33
+ return { pid: id, threadId };
34
+ }
35
+ /** The default chain or `options.backend`, before any `sharedMemory` wrapping. */
36
+ function resolveBaseAccessor(id, options) {
37
+ if (options.backend) {
38
+ return options.backend;
39
+ }
40
+ const Host = options.host ?? IndirectNThreadHostAccessor;
41
+ const idType = options.idType ?? DEFAULT_ID_TYPE;
42
+ if (idType === 'processAllThreadIds') {
43
+ if (Host !== IndirectNThreadHostAccessor) {
44
+ throw new Error('createAccessor: idType "processAllThreadIds" is only supported ' +
45
+ "with the default host (IndirectNThreadHostAccessor) -- there's " +
46
+ "no generic way to race across an arbitrary host class's threads.");
47
+ }
48
+ return new IndirectNThreadHostAccessor(new NThreadRaceAccessor(id, options.hostOptions));
49
+ }
50
+ const { pid, threadId } = idType === 'thread' ? resolveFromThreadId(id) : resolveFromProcessId(id);
51
+ return new Host(pid, threadId, options.hostOptions);
52
+ }
53
+ /**
54
+ * Builds the same accessor {@link createAccessor} does, without initializing
55
+ * it -- the result still lazily initializes on its first real operation
56
+ * (every {@link InittableMiddlewareAccessor} op is guarded by
57
+ * `!isInitializing -> await this.init()`), it's just not pre-initialized up
58
+ * front. Defaults to {@link IndirectNThreadHostAccessor} (thread redirection
59
+ * -- no `CreateRemoteThread` and no remote allocation for the call mechanism
60
+ * itself); pass `options.backend` to use a different strategy instead.
61
+ *
62
+ * Always returns a real {@link HostAccessor} -- `init`/`deinit`/etc. are
63
+ * directly callable on the result, `sharedMemory: true` included. Rather
64
+ * than wrapping the resolved base accessor in a new outer `HostAccessor`,
65
+ * `sharedMemory: true` splices the shared-memory middleware ({@link NShm} by
66
+ * default, a plain non-inittable `MiddlewareAccessor`) directly into the
67
+ * base accessor's own `backend` chain (`base.backend` becomes the
68
+ * middleware, whose own `backend` becomes whatever `base.backend` used to
69
+ * be) and returns `base` itself -- so the result is still the concrete
70
+ * class `resolveBaseAccessor` produced (e.g. `IndirectNThreadHostAccessor`,
71
+ * `.nthread` and all), just with allocations transparently intercepted.
72
+ * `HostAccessor.init()`/`.deinit()` skip over non-inittable middleware
73
+ * layers when walking the chain (see `InittableMiddlewareAccessor.initNext()`
74
+ * in bun-xffi), so this still reaches down and initializes/deinitializes
75
+ * the spliced-in middleware's own backend correctly.
76
+ *
77
+ * `options.idType` defaults to `'processAllThreadIds'`, which races every
78
+ * thread of the process via a {@link NThreadRaceAccessor} nested inside the
79
+ * built `IndirectNThreadHostAccessor` -- see {@link AccessorOptions.idType}.
80
+ * Building it still doesn't touch the target process (beyond a local
81
+ * `Thread.getThreads` snapshot to discover candidates) -- the actual hijack
82
+ * attempts, and picking a winner among them, only happen once `init()` runs,
83
+ * whether that's this function's caller doing it lazily on first real use,
84
+ * or {@link createAccessor} doing it eagerly.
85
+ */
86
+ export function createAccessorWithoutInit(id, options = {}) {
87
+ const base = resolveBaseAccessor(id, options);
88
+ base._options = options;
89
+ if (!options.sharedMemory) {
90
+ return base;
91
+ }
92
+ // Splice the shared-memory middleware into `base`'s own backend chain
93
+ // (base.backend -> middleware -> base's original backend) and return
94
+ // `base` itself, rather than allocating a new outer HostAccessor to wrap
95
+ // it -- this keeps `base`'s concrete class/identity intact (e.g. an
96
+ // IndirectNThreadHostAccessor's `.nthread` stays reachable) while every op
97
+ // still gets intercepted by the middleware, since `base`'s own ops already
98
+ // forward to `base.backend`.
99
+ base.backend = new (options.sharedMemoryMiddleware ?? NShm)(base.backend, base, options.sharedMemoryOptions);
100
+ return base;
101
+ }
102
+ /**
103
+ * {@link createAccessorWithoutInit}, followed by `await`ing the result's
104
+ * `init()` so the accessor is already initialized by the time this resolves,
105
+ * instead of initializing lazily on its first real operation. Same
106
+ * always-`HostAccessor` return type as {@link createAccessorWithoutInit}.
107
+ *
108
+ * For `options.idType === 'processAllThreadIds'` (see
109
+ * {@link AccessorOptions.idType}), this `init()` call is what actually runs
110
+ * the race ({@link NThreadRaceAccessor.onInit}, nested inside the resolved
111
+ * {@link IndirectNThreadHostAccessor}'s own chain) -- picking a winner,
112
+ * aborting the rest, and (when `sharedMemory: true`) initializing the
113
+ * shared-memory middleware on top, all as part of this one `await`. The
114
+ * result is always a genuine `IndirectNThreadHostAccessor` for every
115
+ * `idType`, `processAllThreadIds` included -- `NThreadRaceAccessor` never
116
+ * surfaces to callers; see its own doc comment.
117
+ */
118
+ async function remoteGetModuleHandleA(accessor, name) {
119
+ const buf = Buffer.from(`${name}\0`);
120
+ const ptr = await accessor.alloc(buf.length);
121
+ try {
122
+ await accessor.write(ptr, buf);
123
+ return BigInt(await accessor.call(Kernel32Impl.GetModuleHandleA, ptr));
124
+ }
125
+ finally {
126
+ await accessor.free(ptr).catch(() => { });
127
+ }
128
+ }
129
+ function isThreadDiedError(err) {
130
+ if (!(err instanceof Error))
131
+ return false;
132
+ return (err instanceof CallThreadDiedError ||
133
+ err.name === 'CallThreadDiedError' ||
134
+ err.constructor?.name === 'CallThreadDiedError' ||
135
+ /Thread died/i.test(err.message));
136
+ }
137
+ export async function createAccessor(idOrPath, options = {}) {
138
+ if (typeof idOrPath === 'string') {
139
+ return await HostAccessor.load(idOrPath, options);
140
+ }
141
+ const id = idOrPath;
142
+ const initOne = async (targetId, opt) => {
143
+ const accessor = createAccessorWithoutInit(targetId, opt);
144
+ accessor._options = opt;
145
+ try {
146
+ await accessor.init();
147
+ const njavaOpt = opt.njava ?? 'auto';
148
+ if (njavaOpt === true) {
149
+ await attachNJava(accessor);
150
+ }
151
+ else if (njavaOpt === 'auto') {
152
+ try {
153
+ let hJvm = await remoteGetModuleHandleA(accessor, 'jvm.dll');
154
+ if (hJvm === 0n) {
155
+ const modules = Module.getModules(accessor.processId);
156
+ const isJavaLauncher = modules.some((m) => /java(\.exe|w\.exe|\.dll)/i.test(m.name));
157
+ if (isJavaLauncher) {
158
+ const deadline = Date.now() + 10000;
159
+ while (hJvm === 0n && Date.now() < deadline) {
160
+ await Bun.sleep(100);
161
+ hJvm = await remoteGetModuleHandleA(accessor, 'jvm.dll');
162
+ }
163
+ }
164
+ }
165
+ if (hJvm !== 0n) {
166
+ await attachNJava(accessor);
167
+ }
168
+ }
169
+ catch (err) {
170
+ if (isThreadDiedError(err)) {
171
+ accessor.close();
172
+ throw err;
173
+ }
174
+ }
175
+ }
176
+ return accessor;
177
+ }
178
+ catch (err) {
179
+ accessor.close();
180
+ throw err;
181
+ }
182
+ };
183
+ if (options.njava === 'stealth') {
184
+ return await createStealthJavaAccessor(id, options);
185
+ }
186
+ if (options.backend || options.idType === 'thread') {
187
+ return await initOne(id, options);
188
+ }
189
+ // If the target is a Java process and no specific idType was requested,
190
+ // iterate threads sequentially prioritizing HotSpot worker threads first
191
+ // to avoid racing onto a short-lived launcher / helper thread that exits.
192
+ if (!options.idType) {
193
+ try {
194
+ const modules = Module.getModules(id);
195
+ const isJava = modules.some((m) => /java(\.exe|w\.exe|\.dll)/i.test(m.name));
196
+ if (isJava) {
197
+ const threads = Thread.getThreads(id);
198
+ const candidateThreads = threads.length > 1 ? [...threads.slice(1), threads[0]] : threads;
199
+ for (const t of candidateThreads) {
200
+ try {
201
+ return await initOne(t.tid, {
202
+ ...options,
203
+ idType: 'thread',
204
+ });
205
+ }
206
+ catch {
207
+ // Try next candidate thread
208
+ }
209
+ }
210
+ }
211
+ }
212
+ catch {
213
+ // Fall through to standard race
214
+ }
215
+ }
216
+ try {
217
+ return await initOne(id, options);
218
+ }
219
+ catch (err) {
220
+ if (isThreadDiedError(err)) {
221
+ const threads = Thread.getThreads(id);
222
+ for (const t of threads) {
223
+ try {
224
+ return await initOne(t.tid, {
225
+ ...options,
226
+ idType: 'thread',
227
+ });
228
+ }
229
+ catch {
230
+ // Candidate thread didn't work, try next
231
+ }
232
+ }
233
+ }
234
+ throw err;
235
+ }
236
+ }
237
+ const AGGRESSIVENESS_PRESETS = {
238
+ 1: {
239
+ hostOptions: { timeoutMs: 20000, pollIntervalMs: 2 },
240
+ sharedMemory: false,
241
+ },
242
+ 2: {
243
+ hostOptions: { timeoutMs: 5000, pollIntervalMs: 2 },
244
+ sharedMemory: true,
245
+ },
246
+ };
247
+ /**
248
+ * Returns a ready-made {@link AccessorOptions} template tuned for the given
249
+ * {@link AccessorAggressiveness} level -- pass it straight to
250
+ * {@link createAccessor}, or spread/extend it (e.g. to also set `idType`).
251
+ */
252
+ export function createAccessorOptions(aggressiveness = 1) {
253
+ const preset = AGGRESSIVENESS_PRESETS[aggressiveness];
254
+ return {
255
+ hostOptions: { ...preset.hostOptions },
256
+ sharedMemory: preset.sharedMemory,
257
+ };
258
+ }
259
+ /**
260
+ * Restores an active {@link HostAccessor} from a previously saved {@link HostAccessorSession}.
261
+ *
262
+ * If `session.threadId` is recorded and that thread is still alive in the target process,
263
+ * it attempts direct re-attachment (`idType: 'thread'`), resuming access in milliseconds
264
+ * without re-racing thread candidates. If the thread died or is unavailable, it falls back
265
+ * to process-wide attachment (`idType: 'processAllThreadIds'`).
266
+ *
267
+ * @param session Parsed session object.
268
+ * @param overrideOptions Optional options to merge with or override the saved options.
269
+ * @returns Initialized HostAccessor instance.
270
+ */
271
+ export async function restoreAccessorFromSession(session, overrideOptions = {}) {
272
+ const baseOptions = {
273
+ ...session.options,
274
+ ...overrideOptions,
275
+ };
276
+ const nthreadLayer = session.pipeline?.find((p) => p.type === 'NThread');
277
+ if (nthreadLayer?.state && nthreadLayer.state.threadId) {
278
+ try {
279
+ const testThread = Thread.open(nthreadLayer.state.threadId);
280
+ const isAlive = testThread.isValid() && testThread.getExitCode() === 259;
281
+ testThread.close();
282
+ if (isAlive) {
283
+ const redirector = new RedirectorHostAccessor(session.processId);
284
+ const nthread = new NThread(session.processId, nthreadLayer.state.threadId, baseOptions.hostOptions ?? {}, redirector);
285
+ nthread.resumeFromHibernation(nthreadLayer.state);
286
+ const accessor = new IndirectNThreadHostAccessor(nthread);
287
+ redirector.target = accessor;
288
+ const hasNShm = session.pipeline?.some((p) => p.type === 'NShm') ||
289
+ baseOptions.sharedMemory;
290
+ if (hasNShm) {
291
+ accessor.backend = new (baseOptions.sharedMemoryMiddleware ?? NShm)(accessor.backend, accessor, baseOptions.sharedMemoryOptions);
292
+ }
293
+ await accessor.init();
294
+ const hasNJava = session.pipeline?.some((p) => p.type === 'NJavaAccessor') ||
295
+ Boolean(baseOptions.njava);
296
+ if (hasNJava) {
297
+ await attachNJava(accessor);
298
+ }
299
+ accessor._options = baseOptions;
300
+ if (session.metadata) {
301
+ for (const [key, value] of Object.entries(session.metadata)) {
302
+ accessor.setSessionMetadata(key, value);
303
+ }
304
+ }
305
+ return accessor;
306
+ }
307
+ }
308
+ catch {
309
+ // Hibernated resume failed; fall through to normal reconnection
310
+ }
311
+ }
312
+ let targetId = session.processId;
313
+ let useThread = false;
314
+ try {
315
+ const threads = Thread.getThreads(session.processId);
316
+ if (threads.length === 0) {
317
+ throw new Error(`Cannot restore accessor: process ${session.processId} is not running (no threads found).`);
318
+ }
319
+ if (session.threadId !== undefined &&
320
+ threads.some((t) => t.tid === session.threadId)) {
321
+ targetId = session.threadId;
322
+ useThread = true;
323
+ }
324
+ }
325
+ catch (err) {
326
+ if (err.message?.includes('Cannot restore accessor:')) {
327
+ throw err;
328
+ }
329
+ // If thread snapshot query threw, fall back to process-level attach
330
+ }
331
+ const finalOptions = {
332
+ ...baseOptions,
333
+ idType: useThread
334
+ ? 'thread'
335
+ : (baseOptions.idType ?? 'processAllThreadIds'),
336
+ };
337
+ const accessor = await createAccessor(targetId, finalOptions);
338
+ // Restore saved session metadata
339
+ if (session.metadata) {
340
+ for (const [key, value] of Object.entries(session.metadata)) {
341
+ accessor.setSessionMetadata(key, value);
342
+ }
343
+ }
344
+ return accessor;
345
+ }
346
+ /**
347
+ * Convenience helper to restore an accessor directly from a saved JSON session file.
348
+ *
349
+ * @param filePath Path to the saved session JSON file.
350
+ * @param overrideOptions Optional options to merge with or override the saved options.
351
+ * @returns Initialized HostAccessor instance.
352
+ */
353
+ export async function createAccessorFromFile(filePath, overrideOptions) {
354
+ return await HostAccessor.restoreFromFile(filePath, overrideOptions);
355
+ }
356
+ // Register default restorers with HostAccessor
357
+ HostAccessor.registerRestorer('IndirectNThreadHostAccessor', async (session, overrideOptions) => {
358
+ return await restoreAccessorFromSession(session, overrideOptions);
359
+ });
360
+ HostAccessor.registerRestorer('default', async (session, overrideOptions) => {
361
+ return await restoreAccessorFromSession(session, overrideOptions);
362
+ });
363
+ //# sourceMappingURL=accessors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessors.js","sourceRoot":"","sources":["../src/accessors.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  export * from './middleware-accessor.js';
2
+ export * from './indirect-nthread-host-accessor.js';
3
+ export * from './accessors.js';
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,qCAAqC,CAAC;AACpD,cAAc,gBAAgB,CAAC"}