@efffrida/vitest-pool 0.0.11 → 0.0.13
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/dist/frida/agent.js +37 -37
- package/dist/frida/agent.js.map +1 -1
- package/dist/src/index.d.ts +38 -67
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +81 -91
- package/dist/src/index.js.map +1 -1
- package/package.json +12 -16
- package/src/index.ts +116 -133
package/dist/frida/agent.js
CHANGED
|
@@ -11,26 +11,26 @@ const testFiles = {};
|
|
|
11
11
|
// in the module scope.
|
|
12
12
|
let runPromise;
|
|
13
13
|
let setupContext;
|
|
14
|
-
// How to post messages to the parent process - use flatted to handle circular
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
});
|
|
14
|
+
// How to post messages to the parent process - use flatted to handle circular
|
|
15
|
+
// references
|
|
16
|
+
const postMessage = message => {
|
|
17
|
+
send(flattedStringify(message, (_key, value) => {
|
|
18
|
+
/** @see https://github.com/vitest-dev/vitest/blob/372e86fdef381038a2c4999fc9007dd7292a0628/packages/vitest/src/node/ast-collect.ts#L216-L236 */
|
|
19
|
+
if (value !== null && typeof value === "object" && "name" in value && "message" in value && "stack" in value && typeof value.stack !== "string") {
|
|
20
|
+
return {
|
|
21
|
+
...value,
|
|
22
|
+
stack: value.stack === undefined ? undefined : JSON.stringify(value.stack)
|
|
23
|
+
};
|
|
24
|
+
} else {
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
}));
|
|
28
|
+
};
|
|
30
29
|
// Collections of listeners
|
|
31
30
|
const cleanupListeners = /*#__PURE__*/new Set();
|
|
32
31
|
const cancelListeners = /*#__PURE__*/new Set();
|
|
33
32
|
const messageListeners = /*#__PURE__*/new Set();
|
|
33
|
+
// Bidirectional rpc
|
|
34
34
|
const birpc = /*#__PURE__*/createBirpc({
|
|
35
35
|
async onCancel(reason) {
|
|
36
36
|
await Promise.allSettled([...cancelListeners.values()].map(listener => listener(reason)));
|
|
@@ -40,9 +40,9 @@ const birpc = /*#__PURE__*/createBirpc({
|
|
|
40
40
|
serialize: data => data,
|
|
41
41
|
deserialize: data => data,
|
|
42
42
|
// How to send and receive messages.
|
|
43
|
-
post: postMessage,
|
|
44
|
-
on: rpcListener => messageListeners.add(rpcListener),
|
|
45
43
|
off: rpcListener => messageListeners.delete(rpcListener),
|
|
44
|
+
on: rpcListener => messageListeners.add(rpcListener),
|
|
45
|
+
post: postMessage,
|
|
46
46
|
// Names of remote functions that do not need response.
|
|
47
47
|
// These are fire-and-forget messages to the vitest pool coordinator.
|
|
48
48
|
eventNames: ["onUserConsoleLog", "onCollected", "onCancel"],
|
|
@@ -107,9 +107,10 @@ rpc.exports["onMessage"] = async message => {
|
|
|
107
107
|
rpc: birpc,
|
|
108
108
|
projectName: config.name ?? ""
|
|
109
109
|
};
|
|
110
|
-
return
|
|
111
|
-
type: "started"
|
|
112
|
-
|
|
110
|
+
return {
|
|
111
|
+
type: "started",
|
|
112
|
+
__vitest_worker_response__: true
|
|
113
|
+
};
|
|
113
114
|
}
|
|
114
115
|
case "stop":
|
|
115
116
|
{
|
|
@@ -123,18 +124,20 @@ rpc.exports["onMessage"] = async message => {
|
|
|
123
124
|
await Promise.allSettled([...cleanupListeners.values()].map(listener => listener()));
|
|
124
125
|
cancelListeners.clear();
|
|
125
126
|
cleanupListeners.clear();
|
|
126
|
-
return
|
|
127
|
-
type: "stopped"
|
|
128
|
-
|
|
127
|
+
return {
|
|
128
|
+
type: "stopped",
|
|
129
|
+
__vitest_worker_response__: true
|
|
130
|
+
};
|
|
129
131
|
}
|
|
130
132
|
case "run":
|
|
131
133
|
case "collect":
|
|
132
134
|
{
|
|
133
135
|
if (runPromise !== undefined) {
|
|
134
|
-
return
|
|
136
|
+
return {
|
|
135
137
|
type: "testfileFinished",
|
|
138
|
+
__vitest_worker_response__: true,
|
|
136
139
|
error: serializeError("Worker is already running tests")
|
|
137
|
-
}
|
|
140
|
+
};
|
|
138
141
|
}
|
|
139
142
|
/** @see https://github.com/vitest-dev/vitest/blob/4f58c77147796d48bf70579222a577df977300f8/packages/vitest/src/runtime/worker.ts#L28-L49 */
|
|
140
143
|
provideWorkerState(globalThis, {
|
|
@@ -202,12 +205,7 @@ rpc.exports["onMessage"] = async message => {
|
|
|
202
205
|
globalThis.__node_vm = nodeVm;
|
|
203
206
|
globalThis.__vitest = vitestModule;
|
|
204
207
|
globalThis.__vitest_runner = vitestRunnerModule;
|
|
205
|
-
|
|
206
|
-
const source64 = testFiles[file];
|
|
207
|
-
if (source64 === undefined) {
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
const source = Buffer.from(source64, "base64").toString("utf-8");
|
|
208
|
+
const source = Buffer.from(testFiles[file], "base64").toString("utf-8");
|
|
211
209
|
await Script.load(file, source);
|
|
212
210
|
}
|
|
213
211
|
};
|
|
@@ -216,14 +214,16 @@ rpc.exports["onMessage"] = async message => {
|
|
|
216
214
|
runPromise = entrypoint([file], patchTestRunner(testRunner));
|
|
217
215
|
await runPromise;
|
|
218
216
|
}
|
|
219
|
-
|
|
220
|
-
type: "testfileFinished"
|
|
221
|
-
|
|
217
|
+
return {
|
|
218
|
+
type: "testfileFinished",
|
|
219
|
+
__vitest_worker_response__: true
|
|
220
|
+
};
|
|
222
221
|
} catch (error) {
|
|
223
|
-
|
|
222
|
+
return {
|
|
224
223
|
type: "testfileFinished",
|
|
224
|
+
__vitest_worker_response__: true,
|
|
225
225
|
error: serializeError(error)
|
|
226
|
-
}
|
|
226
|
+
};
|
|
227
227
|
} finally {
|
|
228
228
|
runPromise = undefined;
|
|
229
229
|
}
|
package/dist/frida/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","names":["collectTests","startTests","serializeError","createStackString","parseStacktrace","createBirpc","stringify","flattedStringify","EvaluatedModules","testFiles","runPromise","setupContext","postMessage","message","send","_key","value","stack","undefined","JSON","
|
|
1
|
+
{"version":3,"file":"agent.js","names":["collectTests","startTests","serializeError","createStackString","parseStacktrace","createBirpc","stringify","flattedStringify","EvaluatedModules","testFiles","runPromise","setupContext","postMessage","message","send","_key","value","stack","undefined","JSON","cleanupListeners","Set","cancelListeners","messageListeners","birpc","onCancel","reason","Promise","allSettled","values","map","listener","serialize","data","deserialize","off","rpcListener","delete","on","add","post","eventNames","timeout","provideWorkerState","context","state","NAME_WORKER_STATE","Object","defineProperty","configurable","writable","enumerable","patchTestRunner","testRunner","originalOnTaskUpdate","onTaskUpdate","task","events","call","originalOnCollectStart","onCollectStart","file","onQueued","originalOnCollected","onCollected","files","rpc","exports","isWorkerRequest","u","__vitest_worker_request__","forEach","type","process","env","VITEST_POOL_ID","String","poolId","VITEST_WORKER_ID","workerId","config","environment","pool","projectName","name","__vitest_worker_response__","$rejectPendingCalls","method","reject","clear","error","globalThis","durations","prepare","ctx","providedContext","metaEnv","resolvingModules","moduleExecutionInfo","Map","evaluatedModules","onCleanup","onFilterStackTrace","entrypoint","importFile","nodeAssert","nodeBuffer","nodeCrypto","diagnosticsChannel","nodeEvents","nodeFs","nodeNet","nodeOs","nodePath","nodeProcess","nodeStream","nodeTimers","nodeTty","nodeUrl","nodeUtil","nodeVm","vitestModule","vitestRunnerModule","__node_assert","__node_buffer","__node_crypto","__node_diagnosticsChannel","__node_events","__node_fs","__node_net","__node_os","__node_path","__node_process","__node_stream","__node_timers","__node_tty","__node_url","__node_util","__node_vm","__vitest","__vitest_runner","source","Buffer","from","toString","Script","load"],"sources":["../../frida/agent.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,81 +1,52 @@
|
|
|
1
|
-
import type * as VitestNode from "vitest/node";
|
|
2
1
|
import * as Schema from "effect/Schema";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}>, Schema.Struct<{
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}>;
|
|
37
|
-
}>]>;
|
|
38
|
-
declare class DeviceSchema extends DeviceSchema_base {
|
|
39
|
-
}
|
|
40
|
-
declare const AttachSchema_base: Schema.Union<[Schema.Struct<{
|
|
41
|
-
attach: Schema.brand<typeof Schema.Number, "pid">;
|
|
42
|
-
}>, Schema.Struct<{
|
|
43
|
-
spawn: Schema.NonEmptyArrayEnsure<typeof Schema.String>;
|
|
44
|
-
preSpawn: Schema.optionalWith<typeof Schema.Boolean, {
|
|
45
|
-
nullable: true;
|
|
46
|
-
}>;
|
|
47
|
-
}>, Schema.Struct<{
|
|
48
|
-
attachFrontmost: Schema.Literal<[true]>;
|
|
49
|
-
frontmostScope: Schema.optionalWith<Schema.Literal<["minimal", "metadata", "full"]>, {
|
|
50
|
-
nullable: true;
|
|
51
|
-
}>;
|
|
52
|
-
}>]>;
|
|
53
|
-
declare class AttachSchema extends AttachSchema_base {
|
|
54
|
-
}
|
|
55
|
-
declare const ConfigSchema_base: Schema.extend<Schema.extend<Schema.Struct<{
|
|
56
|
-
runtime: Schema.optionalWith<Schema.Literal<["default", "qjs", "v8"]>, {
|
|
57
|
-
nullable: true;
|
|
58
|
-
}>;
|
|
59
|
-
platform: Schema.optionalWith<Schema.Literal<["gum", "browser", "neutral"]>, {
|
|
60
|
-
nullable: true;
|
|
61
|
-
}>;
|
|
62
|
-
}>, typeof DeviceSchema>, typeof AttachSchema>;
|
|
63
|
-
declare class ConfigSchema extends ConfigSchema_base {
|
|
64
|
-
}
|
|
2
|
+
import type * as VitestNode from "vitest/node";
|
|
3
|
+
declare const ConfigSchema: Schema.Struct<{
|
|
4
|
+
readonly device: Schema.Union<readonly [Schema.Struct<{
|
|
5
|
+
readonly connection: Schema.Literal<"local">;
|
|
6
|
+
}>, Schema.Struct<{
|
|
7
|
+
readonly connection: Schema.Literal<"usb">;
|
|
8
|
+
readonly timeout: Schema.optional<Schema.DurationFromMillis>;
|
|
9
|
+
}>, Schema.Struct<{
|
|
10
|
+
readonly address: Schema.String;
|
|
11
|
+
readonly connection: Schema.Literal<"remote">;
|
|
12
|
+
readonly token: Schema.optional<Schema.String>;
|
|
13
|
+
readonly origin: Schema.optional<Schema.String>;
|
|
14
|
+
readonly keepaliveInterval: Schema.optional<Schema.DurationFromMillis>;
|
|
15
|
+
}>, Schema.Struct<{
|
|
16
|
+
readonly emulatorName: Schema.String;
|
|
17
|
+
readonly hidden: Schema.optional<Schema.Boolean>;
|
|
18
|
+
readonly adbExecutable: Schema.optional<Schema.String>;
|
|
19
|
+
readonly connection: Schema.Literal<"android-emulator">;
|
|
20
|
+
readonly fridaExecutable: Schema.optional<Schema.String>;
|
|
21
|
+
readonly emulatorExecutable: Schema.optional<Schema.String>;
|
|
22
|
+
}>]>;
|
|
23
|
+
readonly attach: Schema.Union<readonly [Schema.Struct<{
|
|
24
|
+
readonly pid: Schema.Number;
|
|
25
|
+
}>, Schema.Struct<{
|
|
26
|
+
readonly spawn: Schema.NonEmptyArray<Schema.String>;
|
|
27
|
+
readonly preSpawn: Schema.optional<Schema.Boolean>;
|
|
28
|
+
}>, Schema.Struct<{
|
|
29
|
+
readonly attachFrontmost: Schema.Literal<true>;
|
|
30
|
+
readonly frontmostScope: Schema.optional<Schema.Literals<readonly ["minimal", "metadata", "full"]>>;
|
|
31
|
+
}>]>;
|
|
32
|
+
readonly runtime: Schema.optional<Schema.Literals<readonly ["default", "qjs", "v8"]>>;
|
|
33
|
+
readonly platform: Schema.optional<Schema.Literals<readonly ["gum", "browser", "neutral"]>>;
|
|
34
|
+
}>;
|
|
65
35
|
/**
|
|
66
36
|
* @since 1.0.0
|
|
67
37
|
* @category Tests
|
|
68
38
|
*/
|
|
69
39
|
export declare class FridaPoolWorker implements VitestNode.PoolWorker {
|
|
70
|
-
readonly name = "frida-pool";
|
|
71
40
|
readonly agentTemplatePath: URL;
|
|
72
|
-
|
|
41
|
+
readonly name = "frida-pool";
|
|
73
42
|
private readonly customOptions;
|
|
74
43
|
private readonly cancelables;
|
|
75
44
|
private modifiedAgentScope;
|
|
76
45
|
private managedRuntime;
|
|
77
46
|
private sends;
|
|
78
|
-
|
|
47
|
+
private compiledAgentUrlPromise;
|
|
48
|
+
private messageCallback;
|
|
49
|
+
constructor(poolOptions: VitestNode.PoolOptions, customOptions: Schema.Schema.Type<typeof ConfigSchema>);
|
|
79
50
|
start(): Promise<void>;
|
|
80
51
|
stop(): Promise<void>;
|
|
81
52
|
send(message: VitestNode.WorkerRequest): Promise<void>;
|
|
@@ -88,6 +59,6 @@ export declare class FridaPoolWorker implements VitestNode.PoolWorker {
|
|
|
88
59
|
* @since 1.0.0
|
|
89
60
|
* @category Tests
|
|
90
61
|
*/
|
|
91
|
-
export declare const createFridaPool: (customOptions: Schema.
|
|
62
|
+
export declare const createFridaPool: (customOptions: Schema.Codec.Encoded<typeof ConfigSchema>) => VitestNode.PoolRunnerInitializer;
|
|
92
63
|
export {};
|
|
93
64
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAMxC,OAAO,KAAK,KAAK,UAAU,MAAM,aAAa,CAAC;AAoD/C,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKhB,CAAC;AAEH;;;GAGG;AACH,qBAAa,eAAgB,YAAW,UAAU,CAAC,UAAU;IACzD,QAAQ,CAAC,iBAAiB,MAAiD;IAC3E,QAAQ,CAAC,IAAI,gBAAgB;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0C;IAExE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0D;IAEtF,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,cAAc,CAA8E;IACpG,OAAO,CAAC,KAAK,CAAmD;IAChE,OAAO,CAAC,uBAAuB,CAAe;IAC9C,OAAO,CAAC,eAAe,CAAmC;gBAE9C,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC;IAYjG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8EtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB5D,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAqDrD,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAWvD,WAAW,CAAC,IAAI,EAAE,OAAO;IAKzB,SAAS,CAAC,IAAI,EAAE,OAAO;CAG1B;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GACxB,eAAe,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,YAAY,CAAC,KACzD,UAAU,CAAC,qBAMb,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,119 +1,97 @@
|
|
|
1
|
-
import * as NodeContext from "@effect/platform-node/NodeContext";
|
|
2
|
-
import * as Command from "@effect/platform/Command";
|
|
3
|
-
import * as CommandExecutor from "@effect/platform/CommandExecutor";
|
|
4
|
-
import * as FileSystem from "@effect/platform/FileSystem";
|
|
5
|
-
import * as Path from "@effect/platform/Path";
|
|
6
|
-
import * as FridaDevice from "@efffrida/frida-tools/FridaDevice";
|
|
7
|
-
import * as FridaScript from "@efffrida/frida-tools/FridaScript";
|
|
8
|
-
import * as FridaSession from "@efffrida/frida-tools/FridaSession";
|
|
9
1
|
import * as Cause from "effect/Cause";
|
|
10
2
|
import * as Deferred from "effect/Deferred";
|
|
11
3
|
import * as Duration from "effect/Duration";
|
|
12
4
|
import * as Effect from "effect/Effect";
|
|
13
5
|
import * as Exit from "effect/Exit";
|
|
6
|
+
import * as FileSystem from "effect/FileSystem";
|
|
14
7
|
import * as Layer from "effect/Layer";
|
|
15
8
|
import * as ManagedRuntime from "effect/ManagedRuntime";
|
|
16
9
|
import * as Match from "effect/Match";
|
|
10
|
+
import * as Path from "effect/Path";
|
|
17
11
|
import * as Schema from "effect/Schema";
|
|
18
12
|
import * as Scope from "effect/Scope";
|
|
19
13
|
import * as Sink from "effect/Sink";
|
|
20
14
|
import * as Stream from "effect/Stream";
|
|
15
|
+
import * as ChildProcess from "effect/unstable/process/ChildProcess";
|
|
16
|
+
import * as NodeServices from "@effect/platform-node/NodeServices";
|
|
17
|
+
import * as FridaDevice from "@efffrida/frida-tools/FridaDevice";
|
|
18
|
+
import * as FridaScript from "@efffrida/frida-tools/FridaScript";
|
|
19
|
+
import * as FridaSession from "@efffrida/frida-tools/FridaSession";
|
|
21
20
|
import * as Esbuild from "esbuild";
|
|
22
21
|
import * as Flatted from "flatted";
|
|
23
22
|
import * as Frida from "frida";
|
|
24
23
|
// First, pick your device
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
const DeviceSchema = /*#__PURE__*/Schema.Union([/*#__PURE__*/Schema.Struct({
|
|
25
|
+
connection: /*#__PURE__*/Schema.Literal("local")
|
|
27
26
|
}), /*#__PURE__*/Schema.Struct({
|
|
28
|
-
|
|
29
|
-
timeout: /*#__PURE__*/Schema.
|
|
30
|
-
nullable: true
|
|
31
|
-
})
|
|
27
|
+
connection: /*#__PURE__*/Schema.Literal("usb"),
|
|
28
|
+
timeout: /*#__PURE__*/Schema.optional(Schema.DurationFromMillis)
|
|
32
29
|
}), /*#__PURE__*/Schema.Struct({
|
|
33
30
|
address: Schema.String,
|
|
34
|
-
|
|
35
|
-
token: /*#__PURE__*/Schema.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
origin: /*#__PURE__*/Schema.optionalWith(Schema.String, {
|
|
39
|
-
nullable: true
|
|
40
|
-
}),
|
|
41
|
-
keepaliveInterval: /*#__PURE__*/Schema.optionalWith(Schema.DurationFromMillis, {
|
|
42
|
-
nullable: true
|
|
43
|
-
})
|
|
31
|
+
connection: /*#__PURE__*/Schema.Literal("remote"),
|
|
32
|
+
token: /*#__PURE__*/Schema.optional(Schema.String),
|
|
33
|
+
origin: /*#__PURE__*/Schema.optional(Schema.String),
|
|
34
|
+
keepaliveInterval: /*#__PURE__*/Schema.optional(Schema.DurationFromMillis)
|
|
44
35
|
}), /*#__PURE__*/Schema.Struct({
|
|
45
36
|
emulatorName: Schema.String,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}),
|
|
53
|
-
fridaExecutable: /*#__PURE__*/Schema.optionalWith(Schema.String, {
|
|
54
|
-
nullable: true
|
|
55
|
-
}),
|
|
56
|
-
emulatorExecutable: /*#__PURE__*/Schema.optionalWith(Schema.String, {
|
|
57
|
-
nullable: true
|
|
58
|
-
})
|
|
59
|
-
})) {}
|
|
37
|
+
hidden: /*#__PURE__*/Schema.optional(Schema.Boolean),
|
|
38
|
+
adbExecutable: /*#__PURE__*/Schema.optional(Schema.String),
|
|
39
|
+
connection: /*#__PURE__*/Schema.Literal("android-emulator"),
|
|
40
|
+
fridaExecutable: /*#__PURE__*/Schema.optional(Schema.String),
|
|
41
|
+
emulatorExecutable: /*#__PURE__*/Schema.optional(Schema.String)
|
|
42
|
+
})]);
|
|
60
43
|
// Second, pick your session
|
|
61
|
-
|
|
62
|
-
|
|
44
|
+
const AttachSchema = /*#__PURE__*/Schema.Union([/*#__PURE__*/Schema.Struct({
|
|
45
|
+
pid: Schema.Number
|
|
63
46
|
}), /*#__PURE__*/Schema.Struct({
|
|
64
|
-
spawn: /*#__PURE__*/Schema.
|
|
65
|
-
preSpawn: /*#__PURE__*/Schema.
|
|
66
|
-
nullable: true
|
|
67
|
-
})
|
|
47
|
+
spawn: /*#__PURE__*/Schema.NonEmptyArray(Schema.String),
|
|
48
|
+
preSpawn: /*#__PURE__*/Schema.optional(Schema.Boolean)
|
|
68
49
|
}), /*#__PURE__*/Schema.Struct({
|
|
69
50
|
attachFrontmost: /*#__PURE__*/Schema.Literal(true),
|
|
70
|
-
frontmostScope: /*#__PURE__*/Schema.
|
|
71
|
-
|
|
72
|
-
})
|
|
73
|
-
})) {}
|
|
51
|
+
frontmostScope: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Literals(["minimal", "metadata", "full"]))
|
|
52
|
+
})]);
|
|
74
53
|
// Third, pick your runtime and platform
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
platform: Schema.
|
|
80
|
-
|
|
81
|
-
})
|
|
82
|
-
}).pipe(/*#__PURE__*/Schema.extend(DeviceSchema), /*#__PURE__*/Schema.extend(AttachSchema)) {}
|
|
54
|
+
const ConfigSchema = /*#__PURE__*/Schema.Struct({
|
|
55
|
+
device: DeviceSchema,
|
|
56
|
+
attach: AttachSchema,
|
|
57
|
+
runtime: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Literals(["default", "qjs", "v8"])),
|
|
58
|
+
platform: /*#__PURE__*/Schema.optional(/*#__PURE__*/Schema.Literals(["gum", "browser", "neutral"]))
|
|
59
|
+
});
|
|
83
60
|
/**
|
|
84
61
|
* @since 1.0.0
|
|
85
62
|
* @category Tests
|
|
86
63
|
*/
|
|
87
64
|
export class FridaPoolWorker {
|
|
88
|
-
name = "frida-pool";
|
|
89
65
|
agentTemplatePath = /*#__PURE__*/new URL("../frida/agent.ts", import.meta.url);
|
|
90
|
-
|
|
66
|
+
name = "frida-pool";
|
|
91
67
|
customOptions;
|
|
92
68
|
cancelables;
|
|
93
69
|
modifiedAgentScope;
|
|
94
70
|
managedRuntime;
|
|
95
71
|
sends = [];
|
|
72
|
+
compiledAgentUrlPromise;
|
|
73
|
+
messageCallback;
|
|
96
74
|
constructor(poolOptions, customOptions) {
|
|
97
|
-
this.poolOptions = poolOptions;
|
|
98
75
|
this.customOptions = customOptions;
|
|
99
76
|
this.cancelables = new Map();
|
|
100
77
|
this.managedRuntime = undefined;
|
|
101
78
|
this.modifiedAgentScope = Effect.runSync(Scope.make());
|
|
79
|
+
this.compiledAgentUrlPromise = compileTestFiles(this.agentTemplatePath, poolOptions).pipe(Scope.provide(this.modifiedAgentScope), Effect.provide(NodeServices.layer), Effect.runPromise);
|
|
102
80
|
}
|
|
103
81
|
async start() {
|
|
104
|
-
const tempAgentUrl = await
|
|
82
|
+
const tempAgentUrl = await this.compiledAgentUrlPromise;
|
|
105
83
|
const FridaRuntime = Match.value(this.customOptions.runtime).pipe(Match.when(undefined, () => undefined), Match.when("v8", () => Frida.ScriptRuntime.V8), Match.when("qjs", () => Frida.ScriptRuntime.QJS), Match.when("default", () => Frida.ScriptRuntime.Default), Match.exhaustive);
|
|
106
84
|
const FridaPlatform = Match.value(this.customOptions.platform).pipe(Match.when(undefined, () => undefined), Match.when("gum", () => Frida.JsPlatform.Gum), Match.when("browser", () => Frida.JsPlatform.Browser), Match.when("neutral", () => Frida.JsPlatform.Neutral), Match.exhaustive);
|
|
107
|
-
const DeviceLive = Match.value(this.customOptions).pipe(Match.when({
|
|
108
|
-
|
|
85
|
+
const DeviceLive = Match.value(this.customOptions.device).pipe(Match.when({
|
|
86
|
+
connection: "local"
|
|
109
87
|
}, () => FridaDevice.layerLocalDevice), Match.when({
|
|
110
|
-
|
|
88
|
+
connection: "usb"
|
|
111
89
|
}, ({
|
|
112
90
|
timeout
|
|
113
91
|
}) => FridaDevice.layerUsbDevice({
|
|
114
92
|
timeout: timeout ? Duration.toMillis(timeout) : undefined
|
|
115
93
|
})), Match.when({
|
|
116
|
-
|
|
94
|
+
connection: "remote"
|
|
117
95
|
}, ({
|
|
118
96
|
address,
|
|
119
97
|
keepaliveInterval,
|
|
@@ -124,7 +102,7 @@ export class FridaPoolWorker {
|
|
|
124
102
|
origin,
|
|
125
103
|
keepaliveInterval: keepaliveInterval ? Duration.toSeconds(keepaliveInterval) : undefined
|
|
126
104
|
})), Match.when({
|
|
127
|
-
|
|
105
|
+
connection: "android-emulator"
|
|
128
106
|
}, ({
|
|
129
107
|
adbExecutable,
|
|
130
108
|
emulatorExecutable,
|
|
@@ -132,16 +110,16 @@ export class FridaPoolWorker {
|
|
|
132
110
|
fridaExecutable,
|
|
133
111
|
hidden
|
|
134
112
|
}) => FridaDevice.layerAndroidEmulatorDevice(emulatorName, {
|
|
135
|
-
hidden,
|
|
136
|
-
adbExecutable,
|
|
137
|
-
fridaExecutable,
|
|
138
|
-
emulatorExecutable
|
|
113
|
+
hidden: hidden ?? undefined,
|
|
114
|
+
adbExecutable: adbExecutable ?? undefined,
|
|
115
|
+
fridaExecutable: fridaExecutable ?? undefined,
|
|
116
|
+
emulatorExecutable: emulatorExecutable ?? undefined
|
|
139
117
|
})), Match.exhaustive);
|
|
140
|
-
const SessionLive = Match.value(this.customOptions).pipe(Match.when({
|
|
141
|
-
|
|
118
|
+
const SessionLive = Match.value(this.customOptions.attach).pipe(Match.when({
|
|
119
|
+
pid: Match.number
|
|
142
120
|
}, ({
|
|
143
|
-
|
|
144
|
-
}) => FridaSession.layer(
|
|
121
|
+
pid
|
|
122
|
+
}) => FridaSession.layer(pid)), Match.when({
|
|
145
123
|
attachFrontmost: true
|
|
146
124
|
}, ({
|
|
147
125
|
frontmostScope
|
|
@@ -151,15 +129,14 @@ export class FridaPoolWorker {
|
|
|
151
129
|
preSpawn: true
|
|
152
130
|
}, ({
|
|
153
131
|
spawn
|
|
154
|
-
}) => Layer.
|
|
155
|
-
const
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
return FridaSession.layer(process.pid);
|
|
132
|
+
}) => Layer.unwrap(Effect.gen(function* () {
|
|
133
|
+
const [command, ...args] = spawn;
|
|
134
|
+
const handle = yield* ChildProcess.make(command, args);
|
|
135
|
+
return FridaSession.layer(handle.pid);
|
|
159
136
|
}))), Match.orElse(({
|
|
160
137
|
spawn
|
|
161
138
|
}) => FridaSession.layer(spawn)));
|
|
162
|
-
const FridaLive = Layer.provide(SessionLive, DeviceLive).pipe(Layer.provide(
|
|
139
|
+
const FridaLive = Layer.provide(SessionLive, DeviceLive).pipe(Layer.provide(NodeServices.layer));
|
|
163
140
|
const ScriptLive = FridaScript.layer(tempAgentUrl, {
|
|
164
141
|
externals: ["jsdom", "happy-dom", "@edge-runtime/vm"],
|
|
165
142
|
...(FridaRuntime !== undefined ? {
|
|
@@ -178,31 +155,39 @@ export class FridaPoolWorker {
|
|
|
178
155
|
async stop() {
|
|
179
156
|
for (const cancelable of this.cancelables.values()) cancelable();
|
|
180
157
|
this.cancelables.clear();
|
|
181
|
-
|
|
158
|
+
await Promise.allSettled(this.sends);
|
|
182
159
|
await this.managedRuntime.dispose();
|
|
183
160
|
await Effect.runPromise(Scope.close(this.modifiedAgentScope, Exit.void));
|
|
184
161
|
}
|
|
185
162
|
async send(message) {
|
|
186
|
-
const sendPromise = this.managedRuntime.runPromiseExit(Effect.flatMap(FridaScript.FridaScript, fridaScript => fridaScript.callExport("onMessage"
|
|
163
|
+
const sendPromise = this.managedRuntime.runPromiseExit(Effect.flatMap(FridaScript.FridaScript, fridaScript => fridaScript.callExport("onMessage")(message)));
|
|
187
164
|
this.sends.push(sendPromise);
|
|
188
165
|
const exit = await sendPromise;
|
|
189
166
|
this.sends = this.sends.filter(p => p !== sendPromise);
|
|
190
|
-
if (Exit.isSuccess(exit))
|
|
167
|
+
if (Exit.isSuccess(exit)) {
|
|
168
|
+
if (exit.value !== null && exit.value !== undefined) {
|
|
169
|
+
this.messageCallback?.(exit.value);
|
|
170
|
+
}
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
191
173
|
const prettyError = Cause.prettyErrors(exit.cause);
|
|
192
174
|
throw prettyError[0];
|
|
193
175
|
}
|
|
194
176
|
on(event, callback) {
|
|
195
177
|
let cancelable;
|
|
196
|
-
const sink = Sink.forEach(input => Effect.sync(() => {
|
|
197
|
-
callback(input.message);
|
|
198
|
-
}));
|
|
199
178
|
switch (event) {
|
|
200
179
|
case "message":
|
|
201
|
-
|
|
202
|
-
|
|
180
|
+
{
|
|
181
|
+
this.messageCallback = callback;
|
|
182
|
+
const sink = Sink.forEach(input => Effect.sync(() => {
|
|
183
|
+
callback(input.message);
|
|
184
|
+
}));
|
|
185
|
+
cancelable = this.managedRuntime.runCallback(Effect.flatMap(FridaScript.FridaScript, fridaScript => Stream.run(fridaScript.stream, sink)));
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
203
188
|
case "error":
|
|
204
189
|
cancelable = this.managedRuntime.runCallback(Effect.flatMap(FridaScript.FridaScript, fridaScript => Deferred.await(fridaScript.scriptError)), {
|
|
205
|
-
onExit: exit => Exit.isSuccess(exit) ? callback(exit.value) : !Cause.
|
|
190
|
+
onExit: exit => Exit.isSuccess(exit) ? callback(exit.value) : !Cause.hasInterruptsOnly(exit.cause) ? callback(exit.cause) : {}
|
|
206
191
|
});
|
|
207
192
|
break;
|
|
208
193
|
case "exit":
|
|
@@ -221,6 +206,9 @@ export class FridaPoolWorker {
|
|
|
221
206
|
this.cancelables.delete(callback);
|
|
222
207
|
cancelable();
|
|
223
208
|
}
|
|
209
|
+
if (this.messageCallback === callback) {
|
|
210
|
+
this.messageCallback = undefined;
|
|
211
|
+
}
|
|
224
212
|
}
|
|
225
213
|
deserialize(data) {
|
|
226
214
|
if (typeof data !== "string") return data;else return Flatted.parse(data);
|
|
@@ -393,10 +381,12 @@ const compileTestFiles = /*#__PURE__*/Effect.fnUntraced(function* (agentTemplate
|
|
|
393
381
|
const path = yield* Path.Path;
|
|
394
382
|
const fs = yield* FileSystem.FileSystem;
|
|
395
383
|
const url = yield* path.fromFileUrl(agentTemplatePath);
|
|
396
|
-
const
|
|
384
|
+
const testFilesList = poolOptions.project.testFilesList ?? [];
|
|
385
|
+
const setupFiles = poolOptions.project.config.setupFiles ?? [];
|
|
386
|
+
const allFiles = [...new Set([...setupFiles, ...testFilesList])];
|
|
397
387
|
const testFilesMap = {};
|
|
398
388
|
const esbuildPlatform = Match.value(customOptions?.platform).pipe(Match.when("browser", () => "browser"), Match.when("neutral", () => "neutral"), Match.whenOr("gum", undefined, () => "node"), Match.orElseAbsurd);
|
|
399
|
-
for (const testFile of
|
|
389
|
+
for (const testFile of allFiles) {
|
|
400
390
|
const result = yield* Effect.promise(() => Esbuild.build({
|
|
401
391
|
bundle: true,
|
|
402
392
|
write: false,
|
|
@@ -407,7 +397,7 @@ const compileTestFiles = /*#__PURE__*/Effect.fnUntraced(function* (agentTemplate
|
|
|
407
397
|
plugins: [vitestGlobalsPlugin]
|
|
408
398
|
}));
|
|
409
399
|
if (!result.outputFiles || result.outputFiles.length === 0) {
|
|
410
|
-
return yield* Effect.
|
|
400
|
+
return yield* Effect.die(new Error(`esbuild produced no output for ${testFile}`));
|
|
411
401
|
} else {
|
|
412
402
|
testFilesMap[testFile] = Buffer.from(result.outputFiles[0].text).toString("base64");
|
|
413
403
|
}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["NodeContext","Command","CommandExecutor","FileSystem","Path","FridaDevice","FridaScript","FridaSession","Cause","Deferred","Duration","Effect","Exit","Layer","ManagedRuntime","Match","Schema","Scope","Sink","Stream","Esbuild","Flatted","Frida","DeviceSchema","Union","Struct","device","Literal","timeout","optionalWith","DurationFromMillis","nullable","address","String","token","origin","keepaliveInterval","emulatorName","hidden","Boolean","adbExecutable","fridaExecutable","emulatorExecutable","AttachSchema","attach","Number","pipe","brand","spawn","NonEmptyArrayEnsure","preSpawn","attachFrontmost","frontmostScope","ConfigSchema","runtime","platform","extend","FridaPoolWorker","name","agentTemplatePath","URL","import","meta","url","poolOptions","customOptions","cancelables","modifiedAgentScope","managedRuntime","sends","constructor","Map","undefined","runSync","make","start","tempAgentUrl","compileTestFiles","provide","layer","runPromise","FridaRuntime","value","when","ScriptRuntime","V8","QJS","Default","exhaustive","FridaPlatform","JsPlatform","Gum","Browser","Neutral","DeviceLive","layerLocalDevice","layerUsbDevice","toMillis","layerRemoteDevice","toSeconds","layerAndroidEmulatorDevice","SessionLive","number","layerFrontmost","scope","unwrapScoped","gen","executor","command","process","pid","orElse","FridaLive","ScriptLive","externals","exit","runPromiseExit","void","isSuccess","prettyError","prettyErrors","cause","stop","cancelable","values","clear","dispose","close","send","message","sendPromise","flatMap","fridaScript","callExport","Void","push","filter","p","on","event","callback","sink","forEach","input","sync","runCallback","run","stream","await","scriptError","onExit","isInterruptedOnly","destroyed","Error","set","off","_event","get","delete","deserialize","data","parse","serialize","createFridaPool","decoded","decodeUnknownSync","createPoolWorker","options","vitestGlobalsPlugin","setup","build","onResolve","args","path","namespace","onLoad","loader","contents","globalName","nodeModuleMap","assert","buffer","crypto","diagnostics_channel","events","fs","net","os","timers","tty","util","vm","replace","fnUntraced","fromFileUrl","testFiles","project","testFilesList","testFilesMap","esbuildPlatform","whenOr","orElseAbsurd","testFile","result","promise","bundle","write","format","target","entryPoints","plugins","outputFiles","length","dieMessage","Buffer","from","text","toString","agentTemplateContents","readFileString","modifiedAgentContents","JSON","stringify","tempAgentPath","makeTempFileScoped","suffix","prefix","directory","dirname","writeFileString","toFileUrl"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["Cause","Deferred","Duration","Effect","Exit","FileSystem","Layer","ManagedRuntime","Match","Path","Schema","Scope","Sink","Stream","ChildProcess","NodeServices","FridaDevice","FridaScript","FridaSession","Esbuild","Flatted","Frida","DeviceSchema","Union","Struct","connection","Literal","timeout","optional","DurationFromMillis","address","String","token","origin","keepaliveInterval","emulatorName","hidden","Boolean","adbExecutable","fridaExecutable","emulatorExecutable","AttachSchema","pid","Number","spawn","NonEmptyArray","preSpawn","attachFrontmost","frontmostScope","Literals","ConfigSchema","device","attach","runtime","platform","FridaPoolWorker","agentTemplatePath","URL","import","meta","url","name","customOptions","cancelables","modifiedAgentScope","managedRuntime","sends","compiledAgentUrlPromise","messageCallback","constructor","poolOptions","Map","undefined","runSync","make","compileTestFiles","pipe","provide","layer","runPromise","start","tempAgentUrl","FridaRuntime","value","when","ScriptRuntime","V8","QJS","Default","exhaustive","FridaPlatform","JsPlatform","Gum","Browser","Neutral","DeviceLive","layerLocalDevice","layerUsbDevice","toMillis","layerRemoteDevice","toSeconds","layerAndroidEmulatorDevice","SessionLive","number","layerFrontmost","scope","unwrap","gen","command","args","handle","orElse","FridaLive","ScriptLive","externals","exit","runPromiseExit","void","isSuccess","prettyError","prettyErrors","cause","stop","cancelable","values","clear","Promise","allSettled","dispose","close","send","message","sendPromise","flatMap","fridaScript","callExport","push","filter","p","on","event","callback","sink","forEach","input","sync","runCallback","run","stream","await","scriptError","onExit","hasInterruptsOnly","destroyed","Error","set","off","_event","get","delete","deserialize","data","parse","serialize","createFridaPool","decoded","decodeUnknownSync","createPoolWorker","options","vitestGlobalsPlugin","setup","build","onResolve","path","namespace","onLoad","loader","contents","globalName","nodeModuleMap","assert","buffer","crypto","diagnostics_channel","events","fs","net","os","process","timers","tty","util","vm","replace","fnUntraced","fromFileUrl","testFilesList","project","setupFiles","config","allFiles","Set","testFilesMap","esbuildPlatform","whenOr","orElseAbsurd","testFile","result","promise","bundle","write","format","target","entryPoints","plugins","outputFiles","length","die","Buffer","from","text","toString","agentTemplateContents","readFileString","modifiedAgentContents","JSON","stringify","tempAgentPath","makeTempFileScoped","suffix","prefix","directory","dirname","writeFileString","toFileUrl"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@efffrida/vitest-pool",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"description": "effect frida vitest-pool",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"effect-ts",
|
|
@@ -31,7 +31,8 @@
|
|
|
31
31
|
"./internal/*": null
|
|
32
32
|
},
|
|
33
33
|
"publishConfig": {
|
|
34
|
-
"access": "public"
|
|
34
|
+
"access": "public",
|
|
35
|
+
"provenance": true
|
|
35
36
|
},
|
|
36
37
|
"dependencies": {
|
|
37
38
|
"@vitest/runner": "4.1.6",
|
|
@@ -39,28 +40,23 @@
|
|
|
39
40
|
"birpc": "4.0.0",
|
|
40
41
|
"esbuild": "0.28.0",
|
|
41
42
|
"flatted": "3.4.2",
|
|
42
|
-
"
|
|
43
|
-
"@efffrida/
|
|
43
|
+
"ioredis": "5.10.1",
|
|
44
|
+
"@efffrida/frida-tools": "0.0.28",
|
|
45
|
+
"@efffrida/polyfills": "0.0.7"
|
|
44
46
|
},
|
|
45
47
|
"devDependencies": {
|
|
46
|
-
"@effect/
|
|
47
|
-
"@effect/experimental": "0.60.0",
|
|
48
|
-
"@effect/platform": "0.96.1",
|
|
49
|
-
"@effect/platform-node": "0.106.0",
|
|
50
|
-
"@effect/rpc": "0.75.1",
|
|
51
|
-
"@effect/sql": "0.51.1",
|
|
52
|
-
"@effect/workflow": "0.18.1",
|
|
48
|
+
"@effect/platform-node": "4.0.0-beta.66",
|
|
53
49
|
"@types/frida-gum": "19.1.0",
|
|
54
|
-
"@types/node": "25.
|
|
55
|
-
"effect": "
|
|
56
|
-
"frida": "17.9.
|
|
50
|
+
"@types/node": "25.9.0",
|
|
51
|
+
"effect": "4.0.0-beta.66",
|
|
52
|
+
"frida": "17.9.10",
|
|
57
53
|
"vitest": "4.1.6"
|
|
58
54
|
},
|
|
59
55
|
"peerDependencies": {
|
|
60
|
-
"@effect/platform": "0.
|
|
56
|
+
"@effect/platform-node": "4.0.0-beta.66",
|
|
61
57
|
"@vitest/runner": "4.1.6",
|
|
62
58
|
"@vitest/utils": "4.1.6",
|
|
63
|
-
"effect": "
|
|
59
|
+
"effect": "4.0.0-beta.66",
|
|
64
60
|
"vitest": "4.1.6"
|
|
65
61
|
},
|
|
66
62
|
"tags": [
|
package/src/index.ts
CHANGED
|
@@ -1,139 +1,112 @@
|
|
|
1
|
-
import type * as PlatformError from "@effect/platform/Error";
|
|
2
|
-
import type * as FridaDeviceAcquisitionError from "@efffrida/frida-tools/FridaDeviceAcquisitionError";
|
|
3
|
-
import type * as FridaSessionError from "@efffrida/frida-tools/FridaSessionError";
|
|
4
1
|
import type * as Option from "effect/Option";
|
|
5
|
-
import type * as ParseResult from "effect/ParseResult";
|
|
6
|
-
import type * as Runtime from "effect/Runtime";
|
|
7
|
-
import type * as VitestNode from "vitest/node";
|
|
8
2
|
|
|
9
|
-
import * as NodeContext from "@effect/platform-node/NodeContext";
|
|
10
|
-
import * as Command from "@effect/platform/Command";
|
|
11
|
-
import * as CommandExecutor from "@effect/platform/CommandExecutor";
|
|
12
|
-
import * as FileSystem from "@effect/platform/FileSystem";
|
|
13
|
-
import * as Path from "@effect/platform/Path";
|
|
14
|
-
import * as FridaDevice from "@efffrida/frida-tools/FridaDevice";
|
|
15
|
-
import * as FridaScript from "@efffrida/frida-tools/FridaScript";
|
|
16
|
-
import * as FridaSession from "@efffrida/frida-tools/FridaSession";
|
|
17
3
|
import * as Cause from "effect/Cause";
|
|
18
4
|
import * as Deferred from "effect/Deferred";
|
|
19
5
|
import * as Duration from "effect/Duration";
|
|
20
6
|
import * as Effect from "effect/Effect";
|
|
21
7
|
import * as Exit from "effect/Exit";
|
|
8
|
+
import * as FileSystem from "effect/FileSystem";
|
|
22
9
|
import * as Layer from "effect/Layer";
|
|
23
10
|
import * as ManagedRuntime from "effect/ManagedRuntime";
|
|
24
11
|
import * as Match from "effect/Match";
|
|
12
|
+
import * as Path from "effect/Path";
|
|
25
13
|
import * as Schema from "effect/Schema";
|
|
26
14
|
import * as Scope from "effect/Scope";
|
|
27
15
|
import * as Sink from "effect/Sink";
|
|
28
16
|
import * as Stream from "effect/Stream";
|
|
17
|
+
import * as ChildProcess from "effect/unstable/process/ChildProcess";
|
|
18
|
+
|
|
19
|
+
import type * as VitestNode from "vitest/node";
|
|
20
|
+
|
|
21
|
+
import * as NodeServices from "@effect/platform-node/NodeServices";
|
|
22
|
+
import * as FridaDevice from "@efffrida/frida-tools/FridaDevice";
|
|
23
|
+
import * as FridaScript from "@efffrida/frida-tools/FridaScript";
|
|
24
|
+
import * as FridaSession from "@efffrida/frida-tools/FridaSession";
|
|
29
25
|
import * as Esbuild from "esbuild";
|
|
30
26
|
import * as Flatted from "flatted";
|
|
31
27
|
import * as Frida from "frida";
|
|
32
28
|
|
|
33
29
|
// First, pick your device
|
|
34
|
-
|
|
30
|
+
const DeviceSchema = Schema.Union([
|
|
35
31
|
Schema.Struct({
|
|
36
|
-
|
|
32
|
+
connection: Schema.Literal("local"),
|
|
37
33
|
}),
|
|
38
34
|
Schema.Struct({
|
|
39
|
-
|
|
40
|
-
timeout: Schema.
|
|
35
|
+
connection: Schema.Literal("usb"),
|
|
36
|
+
timeout: Schema.optional(Schema.DurationFromMillis),
|
|
41
37
|
}),
|
|
42
38
|
Schema.Struct({
|
|
43
39
|
address: Schema.String,
|
|
44
|
-
|
|
45
|
-
token: Schema.
|
|
46
|
-
origin: Schema.
|
|
47
|
-
keepaliveInterval: Schema.
|
|
40
|
+
connection: Schema.Literal("remote"),
|
|
41
|
+
token: Schema.optional(Schema.String),
|
|
42
|
+
origin: Schema.optional(Schema.String),
|
|
43
|
+
keepaliveInterval: Schema.optional(Schema.DurationFromMillis),
|
|
48
44
|
}),
|
|
49
45
|
Schema.Struct({
|
|
50
46
|
emulatorName: Schema.String,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
fridaExecutable: Schema.
|
|
55
|
-
emulatorExecutable: Schema.
|
|
56
|
-
})
|
|
57
|
-
)
|
|
47
|
+
hidden: Schema.optional(Schema.Boolean),
|
|
48
|
+
adbExecutable: Schema.optional(Schema.String),
|
|
49
|
+
connection: Schema.Literal("android-emulator"),
|
|
50
|
+
fridaExecutable: Schema.optional(Schema.String),
|
|
51
|
+
emulatorExecutable: Schema.optional(Schema.String),
|
|
52
|
+
}),
|
|
53
|
+
]);
|
|
58
54
|
|
|
59
55
|
// Second, pick your session
|
|
60
|
-
|
|
56
|
+
const AttachSchema = Schema.Union([
|
|
61
57
|
Schema.Struct({
|
|
62
|
-
|
|
58
|
+
pid: Schema.Number,
|
|
63
59
|
}),
|
|
64
60
|
Schema.Struct({
|
|
65
|
-
spawn: Schema.
|
|
66
|
-
preSpawn: Schema.
|
|
61
|
+
spawn: Schema.NonEmptyArray(Schema.String),
|
|
62
|
+
preSpawn: Schema.optional(Schema.Boolean),
|
|
67
63
|
}),
|
|
68
64
|
Schema.Struct({
|
|
69
65
|
attachFrontmost: Schema.Literal(true),
|
|
70
|
-
frontmostScope: Schema.
|
|
71
|
-
})
|
|
72
|
-
)
|
|
66
|
+
frontmostScope: Schema.optional(Schema.Literals(["minimal", "metadata", "full"])),
|
|
67
|
+
}),
|
|
68
|
+
]);
|
|
73
69
|
|
|
74
70
|
// Third, pick your runtime and platform
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
.
|
|
71
|
+
const ConfigSchema = Schema.Struct({
|
|
72
|
+
device: DeviceSchema,
|
|
73
|
+
attach: AttachSchema,
|
|
74
|
+
runtime: Schema.optional(Schema.Literals(["default", "qjs", "v8"])),
|
|
75
|
+
platform: Schema.optional(Schema.Literals(["gum", "browser", "neutral"])),
|
|
76
|
+
});
|
|
80
77
|
|
|
81
78
|
/**
|
|
82
79
|
* @since 1.0.0
|
|
83
80
|
* @category Tests
|
|
84
81
|
*/
|
|
85
82
|
export class FridaPoolWorker implements VitestNode.PoolWorker {
|
|
86
|
-
readonly name = "frida-pool";
|
|
87
83
|
readonly agentTemplatePath = new URL("../frida/agent.ts", import.meta.url);
|
|
84
|
+
readonly name = "frida-pool";
|
|
85
|
+
|
|
86
|
+
private readonly customOptions: Schema.Schema.Type<typeof ConfigSchema>;
|
|
87
|
+
|
|
88
|
+
private readonly cancelables: Map<(arg: any) => void, (interrupter?: number) => void>;
|
|
88
89
|
|
|
89
|
-
private
|
|
90
|
-
private
|
|
91
|
-
|
|
92
|
-
private
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
| FridaDeviceAcquisitionError.FridaDeviceAcquisitionError
|
|
97
|
-
| PlatformError.PlatformError
|
|
98
|
-
| FridaSessionError.FridaSessionError
|
|
99
|
-
>
|
|
100
|
-
>;
|
|
101
|
-
|
|
102
|
-
private modifiedAgentScope: Scope.CloseableScope;
|
|
103
|
-
private managedRuntime:
|
|
104
|
-
| ManagedRuntime.ManagedRuntime<
|
|
105
|
-
FridaScript.FridaScript,
|
|
106
|
-
| FridaDeviceAcquisitionError.FridaDeviceAcquisitionError
|
|
107
|
-
| PlatformError.PlatformError
|
|
108
|
-
| FridaSessionError.FridaSessionError
|
|
109
|
-
>
|
|
110
|
-
| undefined;
|
|
111
|
-
private sends: Array<
|
|
112
|
-
Promise<
|
|
113
|
-
Exit.Exit<
|
|
114
|
-
void,
|
|
115
|
-
| FridaDeviceAcquisitionError.FridaDeviceAcquisitionError
|
|
116
|
-
| PlatformError.PlatformError
|
|
117
|
-
| FridaSessionError.FridaSessionError
|
|
118
|
-
| ParseResult.ParseError
|
|
119
|
-
>
|
|
120
|
-
>
|
|
121
|
-
> = [];
|
|
122
|
-
|
|
123
|
-
constructor(poolOptions: VitestNode.PoolOptions, customOptions: Schema.Schema.Type<ConfigSchema>) {
|
|
124
|
-
this.poolOptions = poolOptions;
|
|
90
|
+
private modifiedAgentScope: Scope.Closeable;
|
|
91
|
+
private managedRuntime: ManagedRuntime.ManagedRuntime<FridaScript.FridaScript, unknown> | undefined;
|
|
92
|
+
private sends: Array<Promise<Exit.Exit<unknown, unknown>>> = [];
|
|
93
|
+
private compiledAgentUrlPromise: Promise<URL>;
|
|
94
|
+
private messageCallback: ((arg: any) => void) | undefined;
|
|
95
|
+
|
|
96
|
+
constructor(poolOptions: VitestNode.PoolOptions, customOptions: Schema.Schema.Type<typeof ConfigSchema>) {
|
|
125
97
|
this.customOptions = customOptions;
|
|
126
98
|
this.cancelables = new Map();
|
|
127
99
|
this.managedRuntime = undefined;
|
|
128
100
|
this.modifiedAgentScope = Effect.runSync(Scope.make());
|
|
101
|
+
this.compiledAgentUrlPromise = compileTestFiles(this.agentTemplatePath, poolOptions).pipe(
|
|
102
|
+
Scope.provide(this.modifiedAgentScope),
|
|
103
|
+
Effect.provide(NodeServices.layer),
|
|
104
|
+
Effect.runPromise
|
|
105
|
+
);
|
|
129
106
|
}
|
|
130
107
|
|
|
131
108
|
async start(): Promise<void> {
|
|
132
|
-
const tempAgentUrl = await
|
|
133
|
-
Scope.extend(this.modifiedAgentScope),
|
|
134
|
-
Effect.provide(NodeContext.layer),
|
|
135
|
-
Effect.runPromise
|
|
136
|
-
);
|
|
109
|
+
const tempAgentUrl = await this.compiledAgentUrlPromise;
|
|
137
110
|
|
|
138
111
|
const FridaRuntime = Match.value(this.customOptions.runtime).pipe(
|
|
139
112
|
Match.when(undefined, () => undefined),
|
|
@@ -151,14 +124,14 @@ export class FridaPoolWorker implements VitestNode.PoolWorker {
|
|
|
151
124
|
Match.exhaustive
|
|
152
125
|
);
|
|
153
126
|
|
|
154
|
-
const DeviceLive = Match.value(this.customOptions).pipe(
|
|
155
|
-
Match.when({
|
|
156
|
-
Match.when({
|
|
127
|
+
const DeviceLive = Match.value(this.customOptions.device).pipe(
|
|
128
|
+
Match.when({ connection: "local" }, () => FridaDevice.layerLocalDevice),
|
|
129
|
+
Match.when({ connection: "usb" }, ({ timeout }) =>
|
|
157
130
|
FridaDevice.layerUsbDevice({
|
|
158
131
|
timeout: timeout ? Duration.toMillis(timeout) : undefined,
|
|
159
132
|
} as Frida.GetDeviceOptions)
|
|
160
133
|
),
|
|
161
|
-
Match.when({
|
|
134
|
+
Match.when({ connection: "remote" }, ({ address, keepaliveInterval, origin, token }) =>
|
|
162
135
|
FridaDevice.layerRemoteDevice(address, {
|
|
163
136
|
token,
|
|
164
137
|
origin,
|
|
@@ -166,37 +139,36 @@ export class FridaPoolWorker implements VitestNode.PoolWorker {
|
|
|
166
139
|
} as Frida.RemoteDeviceOptions)
|
|
167
140
|
),
|
|
168
141
|
Match.when(
|
|
169
|
-
{
|
|
142
|
+
{ connection: "android-emulator" },
|
|
170
143
|
({ adbExecutable, emulatorExecutable, emulatorName, fridaExecutable, hidden }) =>
|
|
171
144
|
FridaDevice.layerAndroidEmulatorDevice(emulatorName, {
|
|
172
|
-
hidden,
|
|
173
|
-
adbExecutable,
|
|
174
|
-
fridaExecutable,
|
|
175
|
-
emulatorExecutable,
|
|
145
|
+
hidden: hidden ?? undefined,
|
|
146
|
+
adbExecutable: adbExecutable ?? undefined,
|
|
147
|
+
fridaExecutable: fridaExecutable ?? undefined,
|
|
148
|
+
emulatorExecutable: emulatorExecutable ?? undefined,
|
|
176
149
|
})
|
|
177
150
|
),
|
|
178
151
|
Match.exhaustive
|
|
179
152
|
);
|
|
180
153
|
|
|
181
|
-
const SessionLive = Match.value(this.customOptions).pipe(
|
|
182
|
-
Match.when({
|
|
154
|
+
const SessionLive = Match.value(this.customOptions.attach).pipe(
|
|
155
|
+
Match.when({ pid: Match.number }, ({ pid }) => FridaSession.layer(pid)),
|
|
183
156
|
Match.when({ attachFrontmost: true }, ({ frontmostScope }) =>
|
|
184
157
|
FridaSession.layerFrontmost({ scope: frontmostScope } as Frida.FrontmostQueryOptions)
|
|
185
158
|
),
|
|
186
159
|
Match.when({ preSpawn: true }, ({ spawn }) =>
|
|
187
|
-
Layer.
|
|
160
|
+
Layer.unwrap(
|
|
188
161
|
Effect.gen(function* () {
|
|
189
|
-
const
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
return FridaSession.layer(process.pid);
|
|
162
|
+
const [command, ...args] = spawn;
|
|
163
|
+
const handle = yield* ChildProcess.make(command, args);
|
|
164
|
+
return FridaSession.layer(handle.pid);
|
|
193
165
|
})
|
|
194
166
|
)
|
|
195
167
|
),
|
|
196
168
|
Match.orElse(({ spawn }) => FridaSession.layer(spawn))
|
|
197
169
|
);
|
|
198
170
|
|
|
199
|
-
const FridaLive = Layer.provide(SessionLive, DeviceLive).pipe(Layer.provide(
|
|
171
|
+
const FridaLive = Layer.provide(SessionLive, DeviceLive).pipe(Layer.provide(NodeServices.layer));
|
|
200
172
|
const ScriptLive = FridaScript.layer(tempAgentUrl, {
|
|
201
173
|
externals: ["jsdom", "happy-dom", "@edge-runtime/vm"],
|
|
202
174
|
...(FridaRuntime !== undefined ? { runtime: FridaRuntime } : {}),
|
|
@@ -214,59 +186,65 @@ export class FridaPoolWorker implements VitestNode.PoolWorker {
|
|
|
214
186
|
async stop(): Promise<void> {
|
|
215
187
|
for (const cancelable of this.cancelables.values()) cancelable();
|
|
216
188
|
this.cancelables.clear();
|
|
217
|
-
|
|
189
|
+
await Promise.allSettled(this.sends);
|
|
218
190
|
await this.managedRuntime!.dispose();
|
|
219
191
|
await Effect.runPromise(Scope.close(this.modifiedAgentScope, Exit.void));
|
|
220
192
|
}
|
|
221
193
|
|
|
222
194
|
async send(message: VitestNode.WorkerRequest): Promise<void> {
|
|
223
195
|
const sendPromise = this.managedRuntime!.runPromiseExit(
|
|
224
|
-
Effect.flatMap(FridaScript.FridaScript, (fridaScript) =>
|
|
225
|
-
fridaScript.callExport("onMessage", Schema.Void)(message)
|
|
226
|
-
)
|
|
196
|
+
Effect.flatMap(FridaScript.FridaScript, (fridaScript) => fridaScript.callExport("onMessage")(message))
|
|
227
197
|
);
|
|
228
198
|
|
|
229
199
|
this.sends.push(sendPromise);
|
|
230
200
|
const exit = await sendPromise;
|
|
231
201
|
this.sends = this.sends.filter((p) => p !== sendPromise);
|
|
232
|
-
if (Exit.isSuccess(exit))
|
|
202
|
+
if (Exit.isSuccess(exit)) {
|
|
203
|
+
if (exit.value !== null && exit.value !== undefined) {
|
|
204
|
+
this.messageCallback?.(exit.value);
|
|
205
|
+
}
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
233
208
|
const prettyError = Cause.prettyErrors(exit.cause);
|
|
234
209
|
throw prettyError[0];
|
|
235
210
|
}
|
|
236
211
|
|
|
237
212
|
on(event: string, callback: (arg: any) => void): void {
|
|
238
|
-
let cancelable!:
|
|
239
|
-
unknown,
|
|
240
|
-
| FridaDeviceAcquisitionError.FridaDeviceAcquisitionError
|
|
241
|
-
| PlatformError.PlatformError
|
|
242
|
-
| FridaSessionError.FridaSessionError
|
|
243
|
-
>;
|
|
244
|
-
|
|
245
|
-
const sink = Sink.forEach<
|
|
246
|
-
{
|
|
247
|
-
message: unknown;
|
|
248
|
-
data: Option.Option<Buffer<ArrayBufferLike>>;
|
|
249
|
-
},
|
|
250
|
-
void,
|
|
251
|
-
never,
|
|
252
|
-
never
|
|
253
|
-
>((input) =>
|
|
254
|
-
Effect.sync(() => {
|
|
255
|
-
callback(input.message);
|
|
256
|
-
})
|
|
257
|
-
);
|
|
213
|
+
let cancelable!: (interrupter?: number) => void;
|
|
258
214
|
|
|
259
215
|
switch (event) {
|
|
260
|
-
case "message":
|
|
216
|
+
case "message": {
|
|
217
|
+
this.messageCallback = callback;
|
|
218
|
+
const sink = Sink.forEach<
|
|
219
|
+
{
|
|
220
|
+
message: unknown;
|
|
221
|
+
data: Option.Option<Buffer<ArrayBufferLike>>;
|
|
222
|
+
},
|
|
223
|
+
void,
|
|
224
|
+
never,
|
|
225
|
+
never
|
|
226
|
+
>((input) =>
|
|
227
|
+
Effect.sync(() => {
|
|
228
|
+
callback(input.message);
|
|
229
|
+
})
|
|
230
|
+
);
|
|
261
231
|
cancelable = this.managedRuntime!.runCallback(
|
|
262
232
|
Effect.flatMap(FridaScript.FridaScript, (fridaScript) => Stream.run(fridaScript.stream, sink))
|
|
263
233
|
);
|
|
264
234
|
break;
|
|
235
|
+
}
|
|
265
236
|
|
|
266
237
|
case "error":
|
|
267
238
|
cancelable = this.managedRuntime!.runCallback(
|
|
268
239
|
Effect.flatMap(FridaScript.FridaScript, (fridaScript) => Deferred.await(fridaScript.scriptError)),
|
|
269
|
-
{
|
|
240
|
+
{
|
|
241
|
+
onExit: (exit) =>
|
|
242
|
+
Exit.isSuccess(exit)
|
|
243
|
+
? callback(exit.value)
|
|
244
|
+
: !Cause.hasInterruptsOnly(exit.cause)
|
|
245
|
+
? callback(exit.cause)
|
|
246
|
+
: {},
|
|
247
|
+
}
|
|
270
248
|
);
|
|
271
249
|
break;
|
|
272
250
|
|
|
@@ -290,6 +268,9 @@ export class FridaPoolWorker implements VitestNode.PoolWorker {
|
|
|
290
268
|
this.cancelables.delete(callback);
|
|
291
269
|
cancelable();
|
|
292
270
|
}
|
|
271
|
+
if (this.messageCallback === callback) {
|
|
272
|
+
this.messageCallback = undefined;
|
|
273
|
+
}
|
|
293
274
|
}
|
|
294
275
|
|
|
295
276
|
deserialize(data: unknown) {
|
|
@@ -307,7 +288,7 @@ export class FridaPoolWorker implements VitestNode.PoolWorker {
|
|
|
307
288
|
* @category Tests
|
|
308
289
|
*/
|
|
309
290
|
export const createFridaPool = (
|
|
310
|
-
customOptions: Schema.
|
|
291
|
+
customOptions: Schema.Codec.Encoded<typeof ConfigSchema>
|
|
311
292
|
): VitestNode.PoolRunnerInitializer => {
|
|
312
293
|
const decoded = Schema.decodeUnknownSync(ConfigSchema)(customOptions);
|
|
313
294
|
return {
|
|
@@ -459,13 +440,15 @@ const vitestGlobalsPlugin: Esbuild.Plugin = {
|
|
|
459
440
|
const compileTestFiles = Effect.fnUntraced(function* (
|
|
460
441
|
agentTemplatePath: URL,
|
|
461
442
|
poolOptions: VitestNode.PoolOptions,
|
|
462
|
-
customOptions?: Schema.Schema.Type<ConfigSchema> | undefined
|
|
463
|
-
)
|
|
443
|
+
customOptions?: Schema.Schema.Type<typeof ConfigSchema> | undefined
|
|
444
|
+
) {
|
|
464
445
|
const path = yield* Path.Path;
|
|
465
446
|
const fs = yield* FileSystem.FileSystem;
|
|
466
447
|
const url = yield* path.fromFileUrl(agentTemplatePath);
|
|
467
448
|
|
|
468
|
-
const
|
|
449
|
+
const testFilesList: Array<string> = (poolOptions.project as any).testFilesList ?? [];
|
|
450
|
+
const setupFiles: Array<string> = poolOptions.project.config.setupFiles ?? [];
|
|
451
|
+
const allFiles = [...new Set([...setupFiles, ...testFilesList])];
|
|
469
452
|
const testFilesMap: Record<string, string> = {};
|
|
470
453
|
|
|
471
454
|
const esbuildPlatform = Match.value(customOptions?.platform).pipe(
|
|
@@ -475,7 +458,7 @@ const compileTestFiles = Effect.fnUntraced(function* (
|
|
|
475
458
|
Match.orElseAbsurd
|
|
476
459
|
);
|
|
477
460
|
|
|
478
|
-
for (const testFile of
|
|
461
|
+
for (const testFile of allFiles) {
|
|
479
462
|
const result = yield* Effect.promise(() =>
|
|
480
463
|
Esbuild.build({
|
|
481
464
|
bundle: true,
|
|
@@ -489,7 +472,7 @@ const compileTestFiles = Effect.fnUntraced(function* (
|
|
|
489
472
|
);
|
|
490
473
|
|
|
491
474
|
if (!result.outputFiles || result.outputFiles.length === 0) {
|
|
492
|
-
return yield* Effect.
|
|
475
|
+
return yield* Effect.die(new Error(`esbuild produced no output for ${testFile}`));
|
|
493
476
|
} else {
|
|
494
477
|
testFilesMap[testFile] = Buffer.from(result.outputFiles[0].text).toString("base64");
|
|
495
478
|
}
|