@efffrida/rpc 0.0.14 → 0.0.15
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 +47 -0
- package/dist/frida/FridaRpcClient.d.ts.map +1 -0
- package/dist/frida/FridaRpcClient.js +115 -0
- package/dist/frida/FridaRpcClient.js.map +1 -0
- package/dist/frida/FridaRpcServer.d.ts +48 -0
- package/dist/frida/FridaRpcServer.d.ts.map +1 -0
- package/dist/frida/FridaRpcServer.js +119 -0
- package/dist/frida/FridaRpcServer.js.map +1 -0
- package/dist/frida/index.d.ts +18 -0
- package/dist/frida/index.d.ts.map +1 -0
- package/dist/{esm → frida}/index.js +5 -4
- package/dist/frida/index.js.map +1 -0
- package/dist/{dts → node}/FridaRpcClient.d.ts +4 -6
- package/dist/node/FridaRpcClient.d.ts.map +1 -0
- package/dist/node/FridaRpcClient.js +86 -0
- package/dist/node/FridaRpcClient.js.map +1 -0
- package/dist/node/FridaRpcServer.d.ts +16 -0
- package/dist/node/FridaRpcServer.d.ts.map +1 -0
- package/dist/node/FridaRpcServer.js +115 -0
- package/dist/node/FridaRpcServer.js.map +1 -0
- package/dist/node/index.d.ts +18 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/{dts/index.d.ts → node/index.js} +6 -5
- package/dist/node/index.js.map +1 -0
- package/dist/shared/constants.d.ts +6 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +7 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/predicates.d.ts +10 -0
- package/dist/shared/predicates.d.ts.map +1 -0
- package/dist/shared/predicates.js +12 -0
- package/dist/shared/predicates.js.map +1 -0
- package/package.json +59 -45
- package/src/frida/FridaRpcClient.ts +180 -0
- package/src/frida/FridaRpcServer.ts +168 -0
- package/src/frida/index.ts +19 -0
- package/src/node/FridaRpcClient.ts +120 -0
- package/src/node/FridaRpcServer.ts +134 -0
- package/src/node/index.ts +19 -0
- package/src/shared/constants.ts +11 -0
- package/src/shared/predicates.ts +19 -0
- package/FridaRpcClient/package.json +0 -6
- package/FridaRpcServer/package.json +0 -6
- package/dist/cjs/FridaRpcClient.js +0 -77
- package/dist/cjs/FridaRpcClient.js.map +0 -1
- package/dist/cjs/FridaRpcServer.js +0 -135
- package/dist/cjs/FridaRpcServer.js.map +0 -1
- package/dist/cjs/index.js +0 -12
- package/dist/cjs/index.js.map +0 -1
- package/dist/dts/FridaRpcClient.d.ts.map +0 -1
- package/dist/dts/FridaRpcServer.d.ts +0 -36
- package/dist/dts/FridaRpcServer.d.ts.map +0 -1
- package/dist/dts/index.d.ts.map +0 -1
- package/dist/esm/FridaRpcClient.js +0 -67
- package/dist/esm/FridaRpcClient.js.map +0 -1
- package/dist/esm/FridaRpcServer.js +0 -125
- package/dist/esm/FridaRpcServer.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/package.json +0 -4
- package/index/package.json +0 -6
- package/src/FridaRpcClient.ts +0 -107
- package/src/FridaRpcServer.ts +0 -172
- package/src/index.ts +0 -17
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.makeProtocolFridaWithExport = exports.makeProtocolFrida = exports.layerProtocolFrida = void 0;
|
|
7
|
-
var RpcMessage = _interopRequireWildcard(require("@effect/rpc/RpcMessage"));
|
|
8
|
-
var RpcSerialization = _interopRequireWildcard(require("@effect/rpc/RpcSerialization"));
|
|
9
|
-
var RpcServer = _interopRequireWildcard(require("@effect/rpc/RpcServer"));
|
|
10
|
-
var Array = _interopRequireWildcard(require("effect/Array"));
|
|
11
|
-
var Chunk = _interopRequireWildcard(require("effect/Chunk"));
|
|
12
|
-
var Effect = _interopRequireWildcard(require("effect/Effect"));
|
|
13
|
-
var Function = _interopRequireWildcard(require("effect/Function"));
|
|
14
|
-
var Layer = _interopRequireWildcard(require("effect/Layer"));
|
|
15
|
-
var Mailbox = _interopRequireWildcard(require("effect/Mailbox"));
|
|
16
|
-
var Predicate = _interopRequireWildcard(require("effect/Predicate"));
|
|
17
|
-
var Queue = _interopRequireWildcard(require("effect/Queue"));
|
|
18
|
-
var Runtime = _interopRequireWildcard(require("effect/Runtime"));
|
|
19
|
-
var Schema = _interopRequireWildcard(require("effect/Schema"));
|
|
20
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
21
|
-
/**
|
|
22
|
-
* Implements a Frida RPC server protocol for effect using the frida script
|
|
23
|
-
* exports. The reason we don't use the send/recv script channels is because
|
|
24
|
-
* those are shared channels by everybody.
|
|
25
|
-
*
|
|
26
|
-
* @since 1.0.0
|
|
27
|
-
*/
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* @since 1.0.0
|
|
31
|
-
* @category Protocol
|
|
32
|
-
*/
|
|
33
|
-
const makeProtocolFrida = exports.makeProtocolFrida = /*#__PURE__*/Effect.gen(function* () {
|
|
34
|
-
const runtime = yield* Effect.runtime();
|
|
35
|
-
const disconnects = yield* Mailbox.make();
|
|
36
|
-
const serialization = yield* RpcSerialization.RpcSerialization;
|
|
37
|
-
let clientId = 0;
|
|
38
|
-
const clients = new Map();
|
|
39
|
-
let writeRequest;
|
|
40
|
-
const rpcExport = async function (request) {
|
|
41
|
-
const id = clientId++;
|
|
42
|
-
const parser = serialization.unsafeMake();
|
|
43
|
-
const schema = Schema.Union(Schema.String, Schema.Uint8Array);
|
|
44
|
-
const encode = Function.compose(parser.encode, Schema.encodeSync(schema));
|
|
45
|
-
const decode = Function.compose(Schema.decodeUnknownSync(schema), parser.decode);
|
|
46
|
-
const latch = await Effect.makeLatch(false).pipe(Runtime.runPromise(runtime));
|
|
47
|
-
const queue = await Queue.unbounded().pipe(Runtime.runPromise(runtime));
|
|
48
|
-
// When the implementation is done, do this with it's response
|
|
49
|
-
clients.set(id, {
|
|
50
|
-
end: Effect.void,
|
|
51
|
-
write: response => Effect.andThen(queue.offer(response), Predicate.isTagged(response, "Chunk") ? Effect.void : latch.open)
|
|
52
|
-
});
|
|
53
|
-
// Parse the request and send it to the implementation
|
|
54
|
-
try {
|
|
55
|
-
const decoded = decode(request);
|
|
56
|
-
if (decoded.length === 0) return "";
|
|
57
|
-
let i = 0;
|
|
58
|
-
await Runtime.runPromise(runtime, Effect.whileLoop({
|
|
59
|
-
while: () => i < decoded.length,
|
|
60
|
-
body: () => writeRequest(id, decoded[i++]),
|
|
61
|
-
step: Function.constVoid
|
|
62
|
-
}));
|
|
63
|
-
} catch (cause) {
|
|
64
|
-
const message = RpcMessage.ResponseDefectEncoded(cause);
|
|
65
|
-
const encoded = encode(message);
|
|
66
|
-
return Promise.resolve(encoded);
|
|
67
|
-
}
|
|
68
|
-
// Wait for the implementation to respond
|
|
69
|
-
const responses = await latch.await.pipe(Effect.andThen(queue.takeAll)).pipe(Effect.tap(queue.shutdown)).pipe(Effect.map(Chunk.toReadonlyArray)).pipe(Runtime.runPromise(runtime));
|
|
70
|
-
// Encode the responses
|
|
71
|
-
const chunks = [];
|
|
72
|
-
for (const responseMessage of responses) {
|
|
73
|
-
try {
|
|
74
|
-
const encoded = encode(responseMessage);
|
|
75
|
-
chunks.push(encoded);
|
|
76
|
-
} catch (cause) {
|
|
77
|
-
const message = RpcMessage.ResponseDefectEncoded(cause);
|
|
78
|
-
const encoded = encode(message);
|
|
79
|
-
return Promise.resolve(encoded);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
// Concatenate the responses
|
|
83
|
-
const final = Predicate.isString(chunks[0]) ? chunks.join("") : Array.flatten(chunks);
|
|
84
|
-
return Promise.resolve(final);
|
|
85
|
-
};
|
|
86
|
-
const protocol = yield* RpcServer.Protocol.make(writeRequest_ => {
|
|
87
|
-
writeRequest = writeRequest_;
|
|
88
|
-
return Effect.succeed({
|
|
89
|
-
disconnects,
|
|
90
|
-
send: (clientId, response) => {
|
|
91
|
-
const client = clients.get(clientId);
|
|
92
|
-
if (!client) return Effect.void;
|
|
93
|
-
return client.write(response);
|
|
94
|
-
},
|
|
95
|
-
end(clientId) {
|
|
96
|
-
const client = clients.get(clientId);
|
|
97
|
-
if (!client) return Effect.void;
|
|
98
|
-
clients.delete(clientId);
|
|
99
|
-
return client.end;
|
|
100
|
-
},
|
|
101
|
-
initialMessage: Effect.succeedNone,
|
|
102
|
-
supportsAck: false,
|
|
103
|
-
supportsTransferables: false,
|
|
104
|
-
supportsSpanPropagation: false
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
return {
|
|
108
|
-
protocol,
|
|
109
|
-
rpcExport
|
|
110
|
-
};
|
|
111
|
-
});
|
|
112
|
-
/**
|
|
113
|
-
* @since 1.0.0
|
|
114
|
-
* @category Protocol
|
|
115
|
-
*/
|
|
116
|
-
const makeProtocolFridaWithExport = options => Effect.gen(function* () {
|
|
117
|
-
const {
|
|
118
|
-
protocol,
|
|
119
|
-
rpcExport
|
|
120
|
-
} = yield* makeProtocolFrida;
|
|
121
|
-
rpc.exports[options?.exportName ?? "rpc"] = rpcExport;
|
|
122
|
-
const messageOnRpcAvailable = options?.messageOnRpcAvailable;
|
|
123
|
-
if (Predicate.isNotUndefined(messageOnRpcAvailable)) {
|
|
124
|
-
send(messageOnRpcAvailable);
|
|
125
|
-
}
|
|
126
|
-
return protocol;
|
|
127
|
-
});
|
|
128
|
-
/**
|
|
129
|
-
* @since 1.0.0
|
|
130
|
-
* @category Layer
|
|
131
|
-
*/
|
|
132
|
-
exports.makeProtocolFridaWithExport = makeProtocolFridaWithExport;
|
|
133
|
-
const layerProtocolFrida = options => Layer.effect(RpcServer.Protocol, makeProtocolFridaWithExport(options));
|
|
134
|
-
exports.layerProtocolFrida = layerProtocolFrida;
|
|
135
|
-
//# sourceMappingURL=FridaRpcServer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FridaRpcServer.js","names":["RpcMessage","_interopRequireWildcard","require","RpcSerialization","RpcServer","Array","Chunk","Effect","Function","Layer","Mailbox","Predicate","Queue","Runtime","Schema","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","makeProtocolFrida","exports","gen","runtime","disconnects","make","serialization","clientId","clients","Map","writeRequest","rpcExport","request","id","parser","unsafeMake","schema","Union","String","Uint8Array","encode","compose","encodeSync","decode","decodeUnknownSync","latch","makeLatch","pipe","runPromise","queue","unbounded","end","void","write","response","andThen","offer","isTagged","open","decoded","length","whileLoop","while","body","step","constVoid","cause","message","ResponseDefectEncoded","encoded","Promise","resolve","responses","await","takeAll","tap","shutdown","map","toReadonlyArray","chunks","responseMessage","push","final","isString","join","flatten","protocol","Protocol","writeRequest_","succeed","send","client","delete","initialMessage","succeedNone","supportsAck","supportsTransferables","supportsSpanPropagation","makeProtocolFridaWithExport","options","rpc","exportName","messageOnRpcAvailable","isNotUndefined","layerProtocolFrida","effect"],"sources":["../../src/FridaRpcServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/cjs/index.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.FridaRpcServer = exports.FridaRpcClient = void 0;
|
|
7
|
-
var _FridaRpcClient = _interopRequireWildcard(require("./FridaRpcClient.js"));
|
|
8
|
-
exports.FridaRpcClient = _FridaRpcClient;
|
|
9
|
-
var _FridaRpcServer = _interopRequireWildcard(require("./FridaRpcServer.js"));
|
|
10
|
-
exports.FridaRpcServer = _FridaRpcServer;
|
|
11
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
12
|
-
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FridaRpcClient.d.ts","sourceRoot":"","sources":["../../src/FridaRpcClient.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,KAAK,iBAAiB,MAAM,yCAAyC,CAAC;AAElF,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;AAKtC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC1B,QAAQ,WAAW,CAAC,WAAW,EAC/B,UACM;IACI,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;CAC5E,GACD,SAAS,KAChB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,gBAAgB,CAoD9G,CAAC;AAEN;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC3B,UACM;IACI,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,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,CAK1D,CAAC"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Implements a Frida RPC server protocol for effect using the frida script
|
|
3
|
-
* exports. The reason we don't use the send/recv script channels is because
|
|
4
|
-
* those are shared channels by everybody.
|
|
5
|
-
*
|
|
6
|
-
* @since 1.0.0
|
|
7
|
-
*/
|
|
8
|
-
import * as RpcSerialization from "@effect/rpc/RpcSerialization";
|
|
9
|
-
import * as RpcServer from "@effect/rpc/RpcServer";
|
|
10
|
-
import * as Effect from "effect/Effect";
|
|
11
|
-
import * as Layer from "effect/Layer";
|
|
12
|
-
/**
|
|
13
|
-
* @since 1.0.0
|
|
14
|
-
* @category Protocol
|
|
15
|
-
*/
|
|
16
|
-
export declare const makeProtocolFrida: Effect.Effect<{
|
|
17
|
-
protocol: RpcServer.Protocol["Type"];
|
|
18
|
-
rpcExport: (request: string | Uint8Array) => Promise<string | ReadonlyArray<number>>;
|
|
19
|
-
}, never, RpcSerialization.RpcSerialization>;
|
|
20
|
-
/**
|
|
21
|
-
* @since 1.0.0
|
|
22
|
-
* @category Protocol
|
|
23
|
-
*/
|
|
24
|
-
export declare const makeProtocolFridaWithExport: (options?: {
|
|
25
|
-
readonly exportName?: string | undefined;
|
|
26
|
-
readonly messageOnRpcAvailable?: string | undefined;
|
|
27
|
-
} | undefined) => Effect.Effect<RpcServer.Protocol["Type"], never, RpcSerialization.RpcSerialization>;
|
|
28
|
-
/**
|
|
29
|
-
* @since 1.0.0
|
|
30
|
-
* @category Layer
|
|
31
|
-
*/
|
|
32
|
-
export declare const layerProtocolFrida: (options?: {
|
|
33
|
-
readonly exportName?: string | undefined;
|
|
34
|
-
readonly messageOnRpcAvailable?: string | undefined;
|
|
35
|
-
} | undefined) => Layer.Layer<RpcServer.Protocol, never, RpcSerialization.RpcSerialization>;
|
|
36
|
-
//# sourceMappingURL=FridaRpcServer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FridaRpcServer.d.ts","sourceRoot":"","sources":["../../src/FridaRpcServer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,gBAAgB,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AAGnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAOtC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,CACzC;IACI,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,KAAK,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;CACxF,EACD,KAAK,EACL,gBAAgB,CAAC,gBAAgB,CAuGnC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,2BAA2B,GACpC,UACM;IACI,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvD,GACD,SAAS,KAChB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,gBAAgB,CAS/E,CAAC;AAEP;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC3B,UACM;IACI,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvD,GACD,SAAS,KAChB,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,gBAAgB,CAAC,gBAAgB,CACD,CAAC"}
|
package/dist/dts/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;;;;;GAMG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Implements a Frida RPC client protocol for effect using the frida script
|
|
3
|
-
* exports. The reason we don't use the send/recv script channels is because
|
|
4
|
-
* those are shared channels by everybody.
|
|
5
|
-
*
|
|
6
|
-
* @since 1.0.0
|
|
7
|
-
*/
|
|
8
|
-
import * as RpcClient from "@effect/rpc/RpcClient";
|
|
9
|
-
import * as RpcSerialization from "@effect/rpc/RpcSerialization";
|
|
10
|
-
import * as FridaScript from "@efffrida/frida-tools/FridaScript";
|
|
11
|
-
import * as Effect from "effect/Effect";
|
|
12
|
-
import * as Function from "effect/Function";
|
|
13
|
-
import * as Layer from "effect/Layer";
|
|
14
|
-
import * as Predicate from "effect/Predicate";
|
|
15
|
-
import * as Schema from "effect/Schema";
|
|
16
|
-
import * as Stream from "effect/Stream";
|
|
17
|
-
/**
|
|
18
|
-
* @since 1.0.0
|
|
19
|
-
* @category Protocol
|
|
20
|
-
*/
|
|
21
|
-
export const makeProtocolFrida = (script, options) => RpcClient.Protocol.make(Effect.fnUntraced(function* (writeResponse) {
|
|
22
|
-
const serialization = yield* RpcSerialization.RpcSerialization;
|
|
23
|
-
const exportName = options?.exportName ?? "rpc";
|
|
24
|
-
const rpcIsAvailableWhen = options?.rpcIsAvailableWhen;
|
|
25
|
-
const send = request => {
|
|
26
|
-
if (request._tag !== "Request") {
|
|
27
|
-
return Effect.void;
|
|
28
|
-
}
|
|
29
|
-
const parser = serialization.unsafeMake();
|
|
30
|
-
const schema = Schema.Union(Schema.String, Schema.Uint8Array);
|
|
31
|
-
const encode = Function.compose(parser.encode, Schema.encode(schema));
|
|
32
|
-
const decode = Function.compose(Schema.decodeUnknownSync(schema), parser.decode);
|
|
33
|
-
return encode(request).pipe(Effect.flatMap(script.callExport(exportName))).pipe(Effect.orDie).pipe(Effect.flatMap(incoming => {
|
|
34
|
-
try {
|
|
35
|
-
const responses = decode(incoming);
|
|
36
|
-
if (responses.length === 0) return Effect.void;
|
|
37
|
-
let i = 0;
|
|
38
|
-
return Effect.whileLoop({
|
|
39
|
-
while: () => i < responses.length,
|
|
40
|
-
body: () => writeResponse(responses[i++]),
|
|
41
|
-
step: Function.constVoid
|
|
42
|
-
});
|
|
43
|
-
} catch (defect) {
|
|
44
|
-
return writeResponse({
|
|
45
|
-
_tag: "Defect",
|
|
46
|
-
defect
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
}));
|
|
50
|
-
};
|
|
51
|
-
if (Predicate.isNotUndefined(rpcIsAvailableWhen)) {
|
|
52
|
-
yield* script.stream.pipe(Stream.map(({
|
|
53
|
-
message
|
|
54
|
-
}) => message)).pipe(Stream.filter(Predicate.isString)).pipe(Stream.takeUntil(rpcIsAvailableWhen)).pipe(Stream.runDrain);
|
|
55
|
-
}
|
|
56
|
-
return {
|
|
57
|
-
send,
|
|
58
|
-
supportsAck: false,
|
|
59
|
-
supportsTransferables: false
|
|
60
|
-
};
|
|
61
|
-
}));
|
|
62
|
-
/**
|
|
63
|
-
* @since 1.0.0
|
|
64
|
-
* @category Layers
|
|
65
|
-
*/
|
|
66
|
-
export const layerProtocolFrida = options => Layer.effect(RpcClient.Protocol, Effect.flatMap(FridaScript.FridaScript, script => makeProtocolFrida(script, options)));
|
|
67
|
-
//# sourceMappingURL=FridaRpcClient.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FridaRpcClient.js","names":["RpcClient","RpcSerialization","FridaScript","Effect","Function","Layer","Predicate","Schema","Stream","makeProtocolFrida","script","options","Protocol","make","fnUntraced","writeResponse","serialization","exportName","rpcIsAvailableWhen","send","request","_tag","void","parser","unsafeMake","schema","Union","String","Uint8Array","encode","compose","decode","decodeUnknownSync","pipe","flatMap","callExport","orDie","incoming","responses","length","i","whileLoop","while","body","step","constVoid","defect","isNotUndefined","stream","map","message","filter","isString","takeUntil","runDrain","supportsAck","supportsTransferables","layerProtocolFrida","effect"],"sources":["../../src/FridaRpcClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Implements a Frida RPC server protocol for effect using the frida script
|
|
3
|
-
* exports. The reason we don't use the send/recv script channels is because
|
|
4
|
-
* those are shared channels by everybody.
|
|
5
|
-
*
|
|
6
|
-
* @since 1.0.0
|
|
7
|
-
*/
|
|
8
|
-
import * as RpcMessage from "@effect/rpc/RpcMessage";
|
|
9
|
-
import * as RpcSerialization from "@effect/rpc/RpcSerialization";
|
|
10
|
-
import * as RpcServer from "@effect/rpc/RpcServer";
|
|
11
|
-
import * as Array from "effect/Array";
|
|
12
|
-
import * as Chunk from "effect/Chunk";
|
|
13
|
-
import * as Effect from "effect/Effect";
|
|
14
|
-
import * as Function from "effect/Function";
|
|
15
|
-
import * as Layer from "effect/Layer";
|
|
16
|
-
import * as Mailbox from "effect/Mailbox";
|
|
17
|
-
import * as Predicate from "effect/Predicate";
|
|
18
|
-
import * as Queue from "effect/Queue";
|
|
19
|
-
import * as Runtime from "effect/Runtime";
|
|
20
|
-
import * as Schema from "effect/Schema";
|
|
21
|
-
/**
|
|
22
|
-
* @since 1.0.0
|
|
23
|
-
* @category Protocol
|
|
24
|
-
*/
|
|
25
|
-
export const makeProtocolFrida = /*#__PURE__*/Effect.gen(function* () {
|
|
26
|
-
const runtime = yield* Effect.runtime();
|
|
27
|
-
const disconnects = yield* Mailbox.make();
|
|
28
|
-
const serialization = yield* RpcSerialization.RpcSerialization;
|
|
29
|
-
let clientId = 0;
|
|
30
|
-
const clients = new Map();
|
|
31
|
-
let writeRequest;
|
|
32
|
-
const rpcExport = async function (request) {
|
|
33
|
-
const id = clientId++;
|
|
34
|
-
const parser = serialization.unsafeMake();
|
|
35
|
-
const schema = Schema.Union(Schema.String, Schema.Uint8Array);
|
|
36
|
-
const encode = Function.compose(parser.encode, Schema.encodeSync(schema));
|
|
37
|
-
const decode = Function.compose(Schema.decodeUnknownSync(schema), parser.decode);
|
|
38
|
-
const latch = await Effect.makeLatch(false).pipe(Runtime.runPromise(runtime));
|
|
39
|
-
const queue = await Queue.unbounded().pipe(Runtime.runPromise(runtime));
|
|
40
|
-
// When the implementation is done, do this with it's response
|
|
41
|
-
clients.set(id, {
|
|
42
|
-
end: Effect.void,
|
|
43
|
-
write: response => Effect.andThen(queue.offer(response), Predicate.isTagged(response, "Chunk") ? Effect.void : latch.open)
|
|
44
|
-
});
|
|
45
|
-
// Parse the request and send it to the implementation
|
|
46
|
-
try {
|
|
47
|
-
const decoded = decode(request);
|
|
48
|
-
if (decoded.length === 0) return "";
|
|
49
|
-
let i = 0;
|
|
50
|
-
await Runtime.runPromise(runtime, Effect.whileLoop({
|
|
51
|
-
while: () => i < decoded.length,
|
|
52
|
-
body: () => writeRequest(id, decoded[i++]),
|
|
53
|
-
step: Function.constVoid
|
|
54
|
-
}));
|
|
55
|
-
} catch (cause) {
|
|
56
|
-
const message = RpcMessage.ResponseDefectEncoded(cause);
|
|
57
|
-
const encoded = encode(message);
|
|
58
|
-
return Promise.resolve(encoded);
|
|
59
|
-
}
|
|
60
|
-
// Wait for the implementation to respond
|
|
61
|
-
const responses = await latch.await.pipe(Effect.andThen(queue.takeAll)).pipe(Effect.tap(queue.shutdown)).pipe(Effect.map(Chunk.toReadonlyArray)).pipe(Runtime.runPromise(runtime));
|
|
62
|
-
// Encode the responses
|
|
63
|
-
const chunks = [];
|
|
64
|
-
for (const responseMessage of responses) {
|
|
65
|
-
try {
|
|
66
|
-
const encoded = encode(responseMessage);
|
|
67
|
-
chunks.push(encoded);
|
|
68
|
-
} catch (cause) {
|
|
69
|
-
const message = RpcMessage.ResponseDefectEncoded(cause);
|
|
70
|
-
const encoded = encode(message);
|
|
71
|
-
return Promise.resolve(encoded);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
// Concatenate the responses
|
|
75
|
-
const final = Predicate.isString(chunks[0]) ? chunks.join("") : Array.flatten(chunks);
|
|
76
|
-
return Promise.resolve(final);
|
|
77
|
-
};
|
|
78
|
-
const protocol = yield* RpcServer.Protocol.make(writeRequest_ => {
|
|
79
|
-
writeRequest = writeRequest_;
|
|
80
|
-
return Effect.succeed({
|
|
81
|
-
disconnects,
|
|
82
|
-
send: (clientId, response) => {
|
|
83
|
-
const client = clients.get(clientId);
|
|
84
|
-
if (!client) return Effect.void;
|
|
85
|
-
return client.write(response);
|
|
86
|
-
},
|
|
87
|
-
end(clientId) {
|
|
88
|
-
const client = clients.get(clientId);
|
|
89
|
-
if (!client) return Effect.void;
|
|
90
|
-
clients.delete(clientId);
|
|
91
|
-
return client.end;
|
|
92
|
-
},
|
|
93
|
-
initialMessage: Effect.succeedNone,
|
|
94
|
-
supportsAck: false,
|
|
95
|
-
supportsTransferables: false,
|
|
96
|
-
supportsSpanPropagation: false
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
return {
|
|
100
|
-
protocol,
|
|
101
|
-
rpcExport
|
|
102
|
-
};
|
|
103
|
-
});
|
|
104
|
-
/**
|
|
105
|
-
* @since 1.0.0
|
|
106
|
-
* @category Protocol
|
|
107
|
-
*/
|
|
108
|
-
export const makeProtocolFridaWithExport = options => Effect.gen(function* () {
|
|
109
|
-
const {
|
|
110
|
-
protocol,
|
|
111
|
-
rpcExport
|
|
112
|
-
} = yield* makeProtocolFrida;
|
|
113
|
-
rpc.exports[options?.exportName ?? "rpc"] = rpcExport;
|
|
114
|
-
const messageOnRpcAvailable = options?.messageOnRpcAvailable;
|
|
115
|
-
if (Predicate.isNotUndefined(messageOnRpcAvailable)) {
|
|
116
|
-
send(messageOnRpcAvailable);
|
|
117
|
-
}
|
|
118
|
-
return protocol;
|
|
119
|
-
});
|
|
120
|
-
/**
|
|
121
|
-
* @since 1.0.0
|
|
122
|
-
* @category Layer
|
|
123
|
-
*/
|
|
124
|
-
export const layerProtocolFrida = options => Layer.effect(RpcServer.Protocol, makeProtocolFridaWithExport(options));
|
|
125
|
-
//# sourceMappingURL=FridaRpcServer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FridaRpcServer.js","names":["RpcMessage","RpcSerialization","RpcServer","Array","Chunk","Effect","Function","Layer","Mailbox","Predicate","Queue","Runtime","Schema","makeProtocolFrida","gen","runtime","disconnects","make","serialization","clientId","clients","Map","writeRequest","rpcExport","request","id","parser","unsafeMake","schema","Union","String","Uint8Array","encode","compose","encodeSync","decode","decodeUnknownSync","latch","makeLatch","pipe","runPromise","queue","unbounded","set","end","void","write","response","andThen","offer","isTagged","open","decoded","length","i","whileLoop","while","body","step","constVoid","cause","message","ResponseDefectEncoded","encoded","Promise","resolve","responses","await","takeAll","tap","shutdown","map","toReadonlyArray","chunks","responseMessage","push","final","isString","join","flatten","protocol","Protocol","writeRequest_","succeed","send","client","get","delete","initialMessage","succeedNone","supportsAck","supportsTransferables","supportsSpanPropagation","makeProtocolFridaWithExport","options","rpc","exports","exportName","messageOnRpcAvailable","isNotUndefined","layerProtocolFrida","effect"],"sources":["../../src/FridaRpcServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/esm/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["FridaRpcClient","FridaRpcServer"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;AAOA,OAAO,KAAKA,cAAc,MAAM,qBAAqB;AAErD;;;;;;;AAOA,OAAO,KAAKC,cAAc,MAAM,qBAAqB","ignoreList":[]}
|
package/dist/esm/package.json
DELETED
package/index/package.json
DELETED
package/src/FridaRpcClient.ts
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Implements a Frida RPC client protocol for effect using the frida script
|
|
3
|
-
* exports. The reason we don't use the send/recv script channels is because
|
|
4
|
-
* those are shared channels by everybody.
|
|
5
|
-
*
|
|
6
|
-
* @since 1.0.0
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import type * as RpcMessage from "@effect/rpc/RpcMessage";
|
|
10
|
-
import type * as FridaSessionError from "@efffrida/frida-tools/FridaSessionError";
|
|
11
|
-
|
|
12
|
-
import * as RpcClient from "@effect/rpc/RpcClient";
|
|
13
|
-
import * as RpcSerialization from "@effect/rpc/RpcSerialization";
|
|
14
|
-
import * as FridaScript from "@efffrida/frida-tools/FridaScript";
|
|
15
|
-
import * as Effect from "effect/Effect";
|
|
16
|
-
import * as Function from "effect/Function";
|
|
17
|
-
import * as Layer from "effect/Layer";
|
|
18
|
-
import * as Predicate from "effect/Predicate";
|
|
19
|
-
import * as Schema from "effect/Schema";
|
|
20
|
-
import * as Stream from "effect/Stream";
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* @since 1.0.0
|
|
24
|
-
* @category Protocol
|
|
25
|
-
*/
|
|
26
|
-
export const makeProtocolFrida = (
|
|
27
|
-
script: FridaScript.FridaScript,
|
|
28
|
-
options?:
|
|
29
|
-
| {
|
|
30
|
-
readonly exportName?: string | undefined;
|
|
31
|
-
readonly rpcIsAvailableWhen?: ((message: string) => boolean) | undefined;
|
|
32
|
-
}
|
|
33
|
-
| undefined
|
|
34
|
-
): Effect.Effect<RpcClient.Protocol["Type"], FridaSessionError.FridaSessionError, RpcSerialization.RpcSerialization> =>
|
|
35
|
-
RpcClient.Protocol.make(
|
|
36
|
-
Effect.fnUntraced(function* (writeResponse) {
|
|
37
|
-
const serialization = yield* RpcSerialization.RpcSerialization;
|
|
38
|
-
const exportName = options?.exportName ?? "rpc";
|
|
39
|
-
const rpcIsAvailableWhen = options?.rpcIsAvailableWhen;
|
|
40
|
-
|
|
41
|
-
const send = (request: RpcMessage.FromClientEncoded): Effect.Effect<void> => {
|
|
42
|
-
if (request._tag !== "Request") {
|
|
43
|
-
return Effect.void;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const parser = serialization.unsafeMake();
|
|
47
|
-
const schema = Schema.Union(Schema.String, Schema.Uint8Array);
|
|
48
|
-
const encode = Function.compose(parser.encode, Schema.encode(schema));
|
|
49
|
-
const decode = Function.compose(Schema.decodeUnknownSync(schema), parser.decode);
|
|
50
|
-
|
|
51
|
-
return encode(request)
|
|
52
|
-
.pipe(Effect.flatMap(script.callExport(exportName)))
|
|
53
|
-
.pipe(Effect.orDie)
|
|
54
|
-
.pipe(
|
|
55
|
-
Effect.flatMap((incoming) => {
|
|
56
|
-
try {
|
|
57
|
-
const responses = decode(incoming) as Array<RpcMessage.FromServerEncoded>;
|
|
58
|
-
if (responses.length === 0) return Effect.void;
|
|
59
|
-
let i = 0;
|
|
60
|
-
return Effect.whileLoop({
|
|
61
|
-
while: () => i < responses.length,
|
|
62
|
-
body: () => writeResponse(responses[i++]),
|
|
63
|
-
step: Function.constVoid,
|
|
64
|
-
});
|
|
65
|
-
} catch (defect) {
|
|
66
|
-
return writeResponse({ _tag: "Defect", defect });
|
|
67
|
-
}
|
|
68
|
-
})
|
|
69
|
-
);
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
if (Predicate.isNotUndefined(rpcIsAvailableWhen)) {
|
|
73
|
-
yield* script.stream
|
|
74
|
-
.pipe(Stream.map(({ message }) => message))
|
|
75
|
-
.pipe(Stream.filter(Predicate.isString))
|
|
76
|
-
.pipe(Stream.takeUntil(rpcIsAvailableWhen))
|
|
77
|
-
.pipe(Stream.runDrain);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return {
|
|
81
|
-
send,
|
|
82
|
-
supportsAck: false,
|
|
83
|
-
supportsTransferables: false,
|
|
84
|
-
};
|
|
85
|
-
})
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* @since 1.0.0
|
|
90
|
-
* @category Layers
|
|
91
|
-
*/
|
|
92
|
-
export const layerProtocolFrida = (
|
|
93
|
-
options?:
|
|
94
|
-
| {
|
|
95
|
-
readonly exportName?: string | undefined;
|
|
96
|
-
readonly rpcIsAvailableWhen?: ((message: string) => boolean) | undefined;
|
|
97
|
-
}
|
|
98
|
-
| undefined
|
|
99
|
-
): Layer.Layer<
|
|
100
|
-
RpcClient.Protocol,
|
|
101
|
-
FridaSessionError.FridaSessionError,
|
|
102
|
-
RpcSerialization.RpcSerialization | FridaScript.FridaScript
|
|
103
|
-
> =>
|
|
104
|
-
Layer.effect(
|
|
105
|
-
RpcClient.Protocol,
|
|
106
|
-
Effect.flatMap(FridaScript.FridaScript, (script) => makeProtocolFrida(script, options))
|
|
107
|
-
);
|