@efffrida/rpc 0.0.15 → 0.0.17
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/FridaRpcClient.d.ts +1 -0
- package/dist/frida/FridaRpcClient.d.ts.map +1 -1
- package/dist/frida/FridaRpcClient.js +1 -0
- package/dist/frida/FridaRpcClient.js.map +1 -1
- package/dist/frida/FridaRpcServer.d.ts +1 -0
- package/dist/frida/FridaRpcServer.d.ts.map +1 -1
- package/dist/frida/FridaRpcServer.js +9 -7
- package/dist/frida/FridaRpcServer.js.map +1 -1
- package/dist/node/FridaRpcClient.d.ts +12 -0
- package/dist/node/FridaRpcClient.d.ts.map +1 -1
- package/dist/node/FridaRpcClient.js +5 -8
- package/dist/node/FridaRpcClient.js.map +1 -1
- package/package.json +22 -20
- package/src/frida/FridaRpcClient.ts +2 -0
- package/src/frida/FridaRpcServer.ts +11 -7
- package/src/node/FridaRpcClient.ts +29 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FridaRpcClient.d.ts","sourceRoot":"","sources":["../../src/frida/FridaRpcClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"FridaRpcClient.d.ts","sourceRoot":"","sources":["../../src/frida/FridaRpcClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,qBAAqB,CAAC;AAG7B,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,gBAAgB,MAAM,8BAA8B,CAAC;AAIjE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAUtC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC1B,UACM;IACI,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,2BAA2B,CAAC,EAC/B;QACI,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;QAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC;KAChE,GACD;QACI,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;QACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC;KAChE,GACD,SAAS,CAAC;CACnB,GACD,SAAS,KAChB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAsG9F,CAAC;AAEN;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC3B,UACM;IACI,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,2BAA2B,CAAC,EAC/B;QACI,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;QAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC;KAChE,GACD;QACI,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;QACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC;KAChE,GACD,SAAS,CAAC;CACnB,GACD,SAAS,KAChB,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,gBAAgB,CAAC,gBAAgB,CACX,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FridaRpcClient.js","names":["RpcClient","RpcSerialization","FridaStream","Cause","Deferred","Effect","Function","Layer","Option","ParseResult","Predicate","Schema","Stream","constants","sharedPredicates","makeProtocolFrida","options","Protocol","make","fnUntraced","writeResponse","serialization","encoder","TextEncoder","parser","unsafeMake","clientIdDeferred","exportName","generateExportName","generateClientCallbackExportNameForServer","addFinalizer","sync","rpc","exports","maybeIncomingClientId","parsedClientId","decodeUnknown","Number","unsafeDone","connectionRequest","nodeRpcClientMakeConnectionRequestForServer","connectionRequestTimeout","clientId","send","pipe","flatMap","await","timeout","catchIf","isParseError","dieMessage","isTimeoutException","receivingPredicate","isTaggedForClient","receiveStream","receivingStreamShareOptions","replay","capacity","filterMap","unfiltered","message","fromNullable","data","none","runForEach","filtered","responses","decode","length","void","i","whileLoop","while","body","step","constVoid","defect","_tag","interruptible","forkScoped","sendHelper","encoded","encode","isUndefined","transformed","buffer","supportsAck","supportsTransferables","layerProtocolFrida","scoped"],"sources":["../../src/frida/FridaRpcClient.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;
|
|
1
|
+
{"version":3,"file":"FridaRpcClient.js","names":["RpcClient","RpcSerialization","FridaStream","Cause","Deferred","Effect","Function","Layer","Option","ParseResult","Predicate","Schema","Stream","constants","sharedPredicates","makeProtocolFrida","options","Protocol","make","fnUntraced","writeResponse","serialization","encoder","TextEncoder","parser","unsafeMake","clientIdDeferred","exportName","generateExportName","generateClientCallbackExportNameForServer","addFinalizer","sync","rpc","exports","maybeIncomingClientId","parsedClientId","decodeUnknown","Number","unsafeDone","connectionRequest","nodeRpcClientMakeConnectionRequestForServer","connectionRequestTimeout","clientId","send","pipe","flatMap","await","timeout","catchIf","isParseError","dieMessage","isTimeoutException","receivingPredicate","isTaggedForClient","receiveStream","receivingStreamShareOptions","replay","capacity","filterMap","unfiltered","message","fromNullable","data","none","runForEach","filtered","responses","decode","length","void","i","whileLoop","while","body","step","constVoid","defect","_tag","interruptible","forkScoped","sendHelper","encoded","encode","isUndefined","transformed","buffer","supportsAck","supportsTransferables","layerProtocolFrida","scoped"],"sources":["../../src/frida/FridaRpcClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FridaRpcServer.d.ts","sourceRoot":"","sources":["../../src/frida/FridaRpcServer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"FridaRpcServer.d.ts","sourceRoot":"","sources":["../../src/frida/FridaRpcServer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,qBAAqB,CAAC;AAG7B,OAAO,KAAK,gBAAgB,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAMtC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC1B,UACM;IACI,oEAAoE;IACpE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CAC5E,GACD,SAAS,KAChB,MAAM,CAAC,MAAM,CACZ;IACI,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7C,EACD,KAAK,EACL,gBAAgB,CAAC,gBAAgB,CA0F/B,CAAC;AAEP;;;GAGG;AACH,eAAO,MAAM,2BAA2B,GACpC,UACM;IACI;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEzC,oEAAoE;IACpE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CAC5E,GACD,SAAS,KAChB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,gBAAgB,CAK/E,CAAC;AAEP;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC3B,UACM;IACI;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEzC,oEAAoE;IACpE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CAC5E,GACD,SAAS,KAChB,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,gBAAgB,CAAC,gBAAgB,CACD,CAAC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @since 1.0.0
|
|
6
6
|
*/
|
|
7
|
+
import "@efffrida/polyfills";
|
|
7
8
|
import * as RpcMessage from "@effect/rpc/RpcMessage";
|
|
8
9
|
import * as RpcSerialization from "@effect/rpc/RpcSerialization";
|
|
9
10
|
import * as RpcServer from "@effect/rpc/RpcServer";
|
|
@@ -25,10 +26,10 @@ export const makeProtocolFrida = options => Effect.gen(function* () {
|
|
|
25
26
|
const clientIds = new Set();
|
|
26
27
|
const clients = new Map();
|
|
27
28
|
let writeRequest;
|
|
28
|
-
const
|
|
29
|
+
const makeExportName = options?.generateExportName ?? constants.generateServerExportNameForClient;
|
|
29
30
|
// Listen for new clients on the main rpc export
|
|
30
31
|
const rpcExport = Effect.gen(function* () {
|
|
31
|
-
const id = clientId
|
|
32
|
+
const id = ++clientId;
|
|
32
33
|
const parser = serialization.unsafeMake();
|
|
33
34
|
const writeRaw = data => {
|
|
34
35
|
const transformed = typeof data === "string" ? encoder.encode(data) : data;
|
|
@@ -49,7 +50,8 @@ export const makeProtocolFrida = options => Effect.gen(function* () {
|
|
|
49
50
|
clients.set(id, {
|
|
50
51
|
write
|
|
51
52
|
});
|
|
52
|
-
const onMessage =
|
|
53
|
+
const onMessage = input => {
|
|
54
|
+
const data = typeof input === "string" ? input : Uint8Array.from(Object.values(input));
|
|
53
55
|
try {
|
|
54
56
|
const decoded = parser.decode(data);
|
|
55
57
|
if (decoded.length === 0) return Effect.void;
|
|
@@ -66,8 +68,8 @@ export const makeProtocolFrida = options => Effect.gen(function* () {
|
|
|
66
68
|
return Effect.sync(() => writeRaw(parser.encode(RpcMessage.ResponseDefectEncoded(cause))));
|
|
67
69
|
}
|
|
68
70
|
};
|
|
69
|
-
rpc.exports[
|
|
70
|
-
return
|
|
71
|
+
rpc.exports[makeExportName(id)] = data => Effect.runPromise(onMessage(data));
|
|
72
|
+
return id;
|
|
71
73
|
});
|
|
72
74
|
const protocol = yield* RpcServer.Protocol.make(writeRequest_ => {
|
|
73
75
|
writeRequest = writeRequest_;
|
|
@@ -81,8 +83,8 @@ export const makeProtocolFrida = options => Effect.gen(function* () {
|
|
|
81
83
|
end(clientId) {
|
|
82
84
|
clientIds.delete(clientId); // TODO: Is this required?
|
|
83
85
|
clients.delete(clientId); // TODO: Is this required?
|
|
84
|
-
const
|
|
85
|
-
delete rpc.exports[
|
|
86
|
+
const makeExportName = options?.generateExportName ?? constants.generateServerExportNameForClient;
|
|
87
|
+
delete rpc.exports[makeExportName(clientId)];
|
|
86
88
|
return Effect.void;
|
|
87
89
|
},
|
|
88
90
|
clientIds: Effect.sync(() => clientIds),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FridaRpcServer.js","names":["RpcMessage","RpcSerialization","RpcServer","Effect","Function","Layer","Mailbox","Predicate","constants","makeProtocolFrida","options","gen","encoder","TextEncoder","disconnects","make","serialization","clientId","clientIds","Set","clients","Map","writeRequest","
|
|
1
|
+
{"version":3,"file":"FridaRpcServer.js","names":["RpcMessage","RpcSerialization","RpcServer","Effect","Function","Layer","Mailbox","Predicate","constants","makeProtocolFrida","options","gen","encoder","TextEncoder","disconnects","make","serialization","clientId","clientIds","Set","clients","Map","writeRequest","makeExportName","generateExportName","generateServerExportNameForClient","rpcExport","id","parser","unsafeMake","writeRaw","data","transformed","encode","send","buffer","write","response","encoded","isNotUndefined","cause","ResponseDefectEncoded","add","set","onMessage","input","Uint8Array","from","Object","values","decoded","decode","length","void","i","whileLoop","while","body","message","step","constVoid","sync","rpc","exports","runPromise","protocol","Protocol","writeRequest_","succeed","client","get","end","delete","initialMessage","succeedNone","supportsAck","supportsTransferables","supportsSpanPropagation","makeProtocolFridaWithExport","exportName","defaultServerMainExportName","layerProtocolFrida","effect"],"sources":["../../src/frida/FridaRpcServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -16,13 +16,25 @@ import * as Layer from "effect/Layer";
|
|
|
16
16
|
* @category Protocol
|
|
17
17
|
*/
|
|
18
18
|
export declare const makeProtocolFrida: (options?: {
|
|
19
|
+
/**
|
|
20
|
+
* Name for the main rpc export that all clients start by
|
|
21
|
+
* connecting to.
|
|
22
|
+
*/
|
|
19
23
|
readonly exportName?: string | undefined;
|
|
24
|
+
/** Generates server listener rpc exports for individual clients. */
|
|
25
|
+
readonly generateExportName?: ((clientId: number) => string) | undefined;
|
|
20
26
|
} | undefined) => Effect.Effect<RpcClient.Protocol["Type"], FridaSessionError.FridaSessionError, RpcSerialization.RpcSerialization | FridaScript.FridaScript | Scope.Scope>;
|
|
21
27
|
/**
|
|
22
28
|
* @since 1.0.0
|
|
23
29
|
* @category Layers
|
|
24
30
|
*/
|
|
25
31
|
export declare const layerProtocolFrida: (options?: {
|
|
32
|
+
/**
|
|
33
|
+
* Name for the main rpc export that all clients start by
|
|
34
|
+
* connecting to.
|
|
35
|
+
*/
|
|
26
36
|
readonly exportName?: string | undefined;
|
|
37
|
+
/** Generates server listener rpc exports for individual clients. */
|
|
38
|
+
readonly generateExportName?: ((clientId: number) => string) | undefined;
|
|
27
39
|
} | undefined) => Layer.Layer<RpcClient.Protocol, FridaSessionError.FridaSessionError, RpcSerialization.RpcSerialization | FridaScript.FridaScript>;
|
|
28
40
|
//# sourceMappingURL=FridaRpcClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FridaRpcClient.d.ts","sourceRoot":"","sources":["../../src/node/FridaRpcClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,KAAK,iBAAiB,MAAM,yCAAyC,CAAC;AAClF,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,gBAAgB,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,WAAW,MAAM,mCAAmC,CAAC;AACjE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAStC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC1B,
|
|
1
|
+
{"version":3,"file":"FridaRpcClient.d.ts","sourceRoot":"","sources":["../../src/node/FridaRpcClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,KAAK,iBAAiB,MAAM,yCAAyC,CAAC;AAClF,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,gBAAgB,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,WAAW,MAAM,mCAAmC,CAAC;AACjE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAStC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC1B,UACM;IACI;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEzC,oEAAoE;IACpE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CAC5E,GACD,SAAS,KAChB,MAAM,CAAC,MAAM,CACZ,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC1B,iBAAiB,CAAC,iBAAiB,EACnC,gBAAgB,CAAC,gBAAgB,GAAG,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAwExE,CAAC;AAEN;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC3B,UACM;IACI;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEzC,oEAAoE;IACpE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;CAC5E,GACD,SAAS,KAChB,KAAK,CAAC,KAAK,CACV,SAAS,CAAC,QAAQ,EAClB,iBAAiB,CAAC,iBAAiB,EACnC,gBAAgB,CAAC,gBAAgB,GAAG,WAAW,CAAC,WAAW,CACE,CAAC"}
|
|
@@ -15,7 +15,7 @@ import * as ParseResult from "effect/ParseResult";
|
|
|
15
15
|
import * as Predicate from "effect/Predicate";
|
|
16
16
|
import * as Schema from "effect/Schema";
|
|
17
17
|
import * as Stream from "effect/Stream";
|
|
18
|
-
import * as
|
|
18
|
+
import * as constants from "../shared/constants.js";
|
|
19
19
|
/**
|
|
20
20
|
* @since 1.0.0
|
|
21
21
|
* @category Protocol
|
|
@@ -23,15 +23,15 @@ import * as shared from "../shared/constants.js";
|
|
|
23
23
|
export const makeProtocolFrida = options => RpcClient.Protocol.make(Effect.fnUntraced(function* (writeResponse) {
|
|
24
24
|
const script = yield* FridaScript.FridaScript;
|
|
25
25
|
const serialization = yield* RpcSerialization.RpcSerialization;
|
|
26
|
-
const encoder = new TextEncoder();
|
|
27
26
|
const parser = serialization.unsafeMake();
|
|
28
|
-
const
|
|
27
|
+
const mainExportName = options?.exportName ?? constants.defaultServerMainExportName;
|
|
28
|
+
const makeExportName = options?.generateExportName ?? constants.generateServerExportNameForClient;
|
|
29
29
|
/**
|
|
30
30
|
* Obtain a client id from the frida script export, this will allow
|
|
31
31
|
* us to filter future messages for ours since the script channels
|
|
32
32
|
* are shared.
|
|
33
33
|
*/
|
|
34
|
-
const clientId = yield* Effect.catchIf(script.callExport(
|
|
34
|
+
const clientId = yield* Effect.catchIf(script.callExport(mainExportName, Schema.Number)(), ParseResult.isParseError, () => Effect.dieMessage("Failed to obtain client ID from Frida script export"));
|
|
35
35
|
const isClientId = Predicate.compose(Predicate.isNumber, id => id === clientId);
|
|
36
36
|
const receivingPredicate = Predicate.compose(Predicate.isUnknown, Predicate.struct({
|
|
37
37
|
clientId: isClientId
|
|
@@ -67,10 +67,7 @@ export const makeProtocolFrida = options => RpcClient.Protocol.make(Effect.fnUnt
|
|
|
67
67
|
const send = Effect.fnUntraced(function* (message) {
|
|
68
68
|
const encoded = parser.encode(message);
|
|
69
69
|
if (Predicate.isUndefined(encoded)) return;
|
|
70
|
-
|
|
71
|
-
script.script.post({
|
|
72
|
-
clientId
|
|
73
|
-
}, Buffer.from(transformed));
|
|
70
|
+
yield* script.callExport(makeExportName(clientId), Schema.Void)(encoded).pipe(Effect.orDie);
|
|
74
71
|
});
|
|
75
72
|
return {
|
|
76
73
|
send,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FridaRpcClient.js","names":["RpcClient","RpcSerialization","FridaScript","Effect","Function","Layer","Option","ParseResult","Predicate","Schema","Stream","
|
|
1
|
+
{"version":3,"file":"FridaRpcClient.js","names":["RpcClient","RpcSerialization","FridaScript","Effect","Function","Layer","Option","ParseResult","Predicate","Schema","Stream","constants","makeProtocolFrida","options","Protocol","make","fnUntraced","writeResponse","script","serialization","parser","unsafeMake","mainExportName","exportName","defaultServerMainExportName","makeExportName","generateExportName","generateServerExportNameForClient","clientId","catchIf","callExport","Number","isParseError","dieMessage","isClientId","compose","isNumber","id","receivingPredicate","isUnknown","struct","stream","pipe","filterMap","unfiltered","message","data","none","runForEach","filtered","responses","decode","length","void","i","whileLoop","while","body","step","constVoid","defect","_tag","interruptible","forkScoped","send","encoded","encode","isUndefined","Void","orDie","supportsAck","supportsTransferables","layerProtocolFrida","scoped"],"sources":["../../src/node/FridaRpcClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@efffrida/rpc",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.17",
|
|
4
4
|
"description": "effect rpc-frida",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"frida.re",
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"type": "module",
|
|
20
20
|
"exports": {
|
|
21
21
|
"./package.json": "./package.json",
|
|
22
|
-
"./node": "./dist/node/index.
|
|
23
|
-
"./frida": "./dist/frida/index.
|
|
24
|
-
"./*": "./dist/*.
|
|
22
|
+
"./node": "./dist/node/index.js",
|
|
23
|
+
"./frida": "./dist/frida/index.js",
|
|
24
|
+
"./*": "./dist/*.js",
|
|
25
25
|
"./internal/*": null,
|
|
26
26
|
"./shared/*": null,
|
|
27
27
|
"./*/index": null
|
|
@@ -34,28 +34,30 @@
|
|
|
34
34
|
"dist/**/*.d.ts.map"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@efffrida/frida-tools": "^0.0.
|
|
37
|
+
"@efffrida/frida-tools": "^0.0.17",
|
|
38
|
+
"@efffrida/polyfills": "0.0.2"
|
|
38
39
|
},
|
|
39
40
|
"devDependencies": {
|
|
40
|
-
"@effect/cluster": "0.
|
|
41
|
-
"@effect/experimental": "0.
|
|
42
|
-
"@effect/platform": "0.
|
|
43
|
-
"@effect/platform-node": "0.
|
|
44
|
-
"@effect/rpc": "0.
|
|
45
|
-
"@effect/sql": "0.
|
|
41
|
+
"@effect/cluster": "0.56.0",
|
|
42
|
+
"@effect/experimental": "0.58.0",
|
|
43
|
+
"@effect/platform": "0.94.0",
|
|
44
|
+
"@effect/platform-node": "0.104.0",
|
|
45
|
+
"@effect/rpc": "0.73.0",
|
|
46
|
+
"@effect/sql": "0.49.0",
|
|
46
47
|
"@effect/vitest": "0.27.0",
|
|
47
|
-
"@effect/workflow": "0.
|
|
48
|
+
"@effect/workflow": "0.16.0",
|
|
48
49
|
"@types/frida-gum": "19.0.1",
|
|
49
|
-
"@types/node": "
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"vitest": "4.0.
|
|
53
|
-
"@efffrida/platform": "0.0.
|
|
50
|
+
"@types/node": "25.0.3",
|
|
51
|
+
"effect": "3.19.13",
|
|
52
|
+
"frida": "17.5.1",
|
|
53
|
+
"vitest": "4.0.16",
|
|
54
|
+
"@efffrida/platform": "0.0.15",
|
|
55
|
+
"@efffrida/vitest-pool": "0.0.3"
|
|
54
56
|
},
|
|
55
57
|
"peerDependencies": {
|
|
56
|
-
"@effect/platform": "0.
|
|
57
|
-
"@effect/rpc": "0.
|
|
58
|
-
"effect": "3.19.
|
|
58
|
+
"@effect/platform": "0.94.0",
|
|
59
|
+
"@effect/rpc": "0.73.0",
|
|
60
|
+
"effect": "3.19.13"
|
|
59
61
|
},
|
|
60
62
|
"publishConfig": {
|
|
61
63
|
"access": "public"
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
* @since 1.0.0
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
import "@efffrida/polyfills";
|
|
9
|
+
|
|
8
10
|
import * as RpcMessage from "@effect/rpc/RpcMessage";
|
|
9
11
|
import * as RpcSerialization from "@effect/rpc/RpcSerialization";
|
|
10
12
|
import * as RpcServer from "@effect/rpc/RpcServer";
|
|
@@ -45,11 +47,11 @@ export const makeProtocolFrida = (
|
|
|
45
47
|
const clients = new Map<number, { readonly write: (bytes: RpcMessage.FromServerEncoded) => void }>();
|
|
46
48
|
|
|
47
49
|
let writeRequest!: (clientId: number, message: RpcMessage.FromClientEncoded) => Effect.Effect<void>;
|
|
48
|
-
const
|
|
50
|
+
const makeExportName = options?.generateExportName ?? constants.generateServerExportNameForClient;
|
|
49
51
|
|
|
50
52
|
// Listen for new clients on the main rpc export
|
|
51
53
|
const rpcExport = Effect.gen(function* () {
|
|
52
|
-
const id = clientId
|
|
54
|
+
const id = ++clientId;
|
|
53
55
|
const parser = serialization.unsafeMake();
|
|
54
56
|
|
|
55
57
|
const writeRaw = (data: string | Uint8Array): void => {
|
|
@@ -69,7 +71,9 @@ export const makeProtocolFrida = (
|
|
|
69
71
|
clientIds.add(id);
|
|
70
72
|
clients.set(id, { write });
|
|
71
73
|
|
|
72
|
-
const onMessage = (
|
|
74
|
+
const onMessage = (input: string | Record<number, string>): Effect.Effect<void, never, never> => {
|
|
75
|
+
const data = typeof input === "string" ? input : Uint8Array.from(Object.values(input));
|
|
76
|
+
|
|
73
77
|
try {
|
|
74
78
|
const decoded = parser.decode(data) as ReadonlyArray<RpcMessage.FromClientEncoded>;
|
|
75
79
|
if (decoded.length === 0) return Effect.void;
|
|
@@ -87,10 +91,10 @@ export const makeProtocolFrida = (
|
|
|
87
91
|
}
|
|
88
92
|
};
|
|
89
93
|
|
|
90
|
-
rpc.exports[
|
|
94
|
+
rpc.exports[makeExportName(id)] = (data: string | Record<number, string>): Promise<void> =>
|
|
91
95
|
Effect.runPromise(onMessage(data));
|
|
92
96
|
|
|
93
|
-
return
|
|
97
|
+
return id;
|
|
94
98
|
});
|
|
95
99
|
|
|
96
100
|
const protocol = yield* RpcServer.Protocol.make((writeRequest_) => {
|
|
@@ -105,8 +109,8 @@ export const makeProtocolFrida = (
|
|
|
105
109
|
end(clientId) {
|
|
106
110
|
clientIds.delete(clientId); // TODO: Is this required?
|
|
107
111
|
clients.delete(clientId); // TODO: Is this required?
|
|
108
|
-
const
|
|
109
|
-
delete rpc.exports[
|
|
112
|
+
const makeExportName = options?.generateExportName ?? constants.generateServerExportNameForClient;
|
|
113
|
+
delete rpc.exports[makeExportName(clientId)];
|
|
110
114
|
return Effect.void;
|
|
111
115
|
},
|
|
112
116
|
clientIds: Effect.sync(() => clientIds),
|
|
@@ -21,14 +21,25 @@ import * as Predicate from "effect/Predicate";
|
|
|
21
21
|
import * as Schema from "effect/Schema";
|
|
22
22
|
import * as Stream from "effect/Stream";
|
|
23
23
|
|
|
24
|
-
import * as
|
|
24
|
+
import * as constants from "../shared/constants.ts";
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* @since 1.0.0
|
|
28
28
|
* @category Protocol
|
|
29
29
|
*/
|
|
30
30
|
export const makeProtocolFrida = (
|
|
31
|
-
options?:
|
|
31
|
+
options?:
|
|
32
|
+
| {
|
|
33
|
+
/**
|
|
34
|
+
* Name for the main rpc export that all clients start by
|
|
35
|
+
* connecting to.
|
|
36
|
+
*/
|
|
37
|
+
readonly exportName?: string | undefined;
|
|
38
|
+
|
|
39
|
+
/** Generates server listener rpc exports for individual clients. */
|
|
40
|
+
readonly generateExportName?: ((clientId: number) => string) | undefined;
|
|
41
|
+
}
|
|
42
|
+
| undefined
|
|
32
43
|
): Effect.Effect<
|
|
33
44
|
RpcClient.Protocol["Type"],
|
|
34
45
|
FridaSessionError.FridaSessionError,
|
|
@@ -39,9 +50,9 @@ export const makeProtocolFrida = (
|
|
|
39
50
|
const script = yield* FridaScript.FridaScript;
|
|
40
51
|
const serialization = yield* RpcSerialization.RpcSerialization;
|
|
41
52
|
|
|
42
|
-
const encoder = new TextEncoder();
|
|
43
53
|
const parser = serialization.unsafeMake();
|
|
44
|
-
const
|
|
54
|
+
const mainExportName = options?.exportName ?? constants.defaultServerMainExportName;
|
|
55
|
+
const makeExportName = options?.generateExportName ?? constants.generateServerExportNameForClient;
|
|
45
56
|
|
|
46
57
|
/**
|
|
47
58
|
* Obtain a client id from the frida script export, this will allow
|
|
@@ -49,7 +60,7 @@ export const makeProtocolFrida = (
|
|
|
49
60
|
* are shared.
|
|
50
61
|
*/
|
|
51
62
|
const clientId = yield* Effect.catchIf(
|
|
52
|
-
script.callExport(
|
|
63
|
+
script.callExport(mainExportName, Schema.Number)(),
|
|
53
64
|
ParseResult.isParseError,
|
|
54
65
|
() => Effect.dieMessage("Failed to obtain client ID from Frida script export")
|
|
55
66
|
);
|
|
@@ -95,8 +106,7 @@ export const makeProtocolFrida = (
|
|
|
95
106
|
const send = Effect.fnUntraced(function* (message: RpcMessage.FromClientEncoded) {
|
|
96
107
|
const encoded = parser.encode(message);
|
|
97
108
|
if (Predicate.isUndefined(encoded)) return;
|
|
98
|
-
|
|
99
|
-
script.script.post({ clientId }, Buffer.from(transformed));
|
|
109
|
+
yield* script.callExport(makeExportName(clientId), Schema.Void)(encoded).pipe(Effect.orDie);
|
|
100
110
|
});
|
|
101
111
|
|
|
102
112
|
return {
|
|
@@ -112,7 +122,18 @@ export const makeProtocolFrida = (
|
|
|
112
122
|
* @category Layers
|
|
113
123
|
*/
|
|
114
124
|
export const layerProtocolFrida = (
|
|
115
|
-
options?:
|
|
125
|
+
options?:
|
|
126
|
+
| {
|
|
127
|
+
/**
|
|
128
|
+
* Name for the main rpc export that all clients start by
|
|
129
|
+
* connecting to.
|
|
130
|
+
*/
|
|
131
|
+
readonly exportName?: string | undefined;
|
|
132
|
+
|
|
133
|
+
/** Generates server listener rpc exports for individual clients. */
|
|
134
|
+
readonly generateExportName?: ((clientId: number) => string) | undefined;
|
|
135
|
+
}
|
|
136
|
+
| undefined
|
|
116
137
|
): Layer.Layer<
|
|
117
138
|
RpcClient.Protocol,
|
|
118
139
|
FridaSessionError.FridaSessionError,
|