@efffrida/rpc 0.0.14 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/frida/FridaRpcClient.d.ts +48 -0
  2. package/dist/frida/FridaRpcClient.d.ts.map +1 -0
  3. package/dist/frida/FridaRpcClient.js +116 -0
  4. package/dist/frida/FridaRpcClient.js.map +1 -0
  5. package/dist/frida/FridaRpcServer.d.ts +49 -0
  6. package/dist/frida/FridaRpcServer.d.ts.map +1 -0
  7. package/dist/frida/FridaRpcServer.js +121 -0
  8. package/dist/frida/FridaRpcServer.js.map +1 -0
  9. package/dist/frida/index.d.ts +18 -0
  10. package/dist/frida/index.d.ts.map +1 -0
  11. package/dist/{esm → frida}/index.js +5 -4
  12. package/dist/frida/index.js.map +1 -0
  13. package/dist/{dts → node}/FridaRpcClient.d.ts +16 -6
  14. package/dist/node/FridaRpcClient.d.ts.map +1 -0
  15. package/dist/node/FridaRpcClient.js +83 -0
  16. package/dist/node/FridaRpcClient.js.map +1 -0
  17. package/dist/node/FridaRpcServer.d.ts +16 -0
  18. package/dist/node/FridaRpcServer.d.ts.map +1 -0
  19. package/dist/node/FridaRpcServer.js +115 -0
  20. package/dist/node/FridaRpcServer.js.map +1 -0
  21. package/dist/node/index.d.ts +18 -0
  22. package/dist/node/index.d.ts.map +1 -0
  23. package/dist/{dts/index.d.ts → node/index.js} +6 -5
  24. package/dist/node/index.js.map +1 -0
  25. package/dist/shared/constants.d.ts +6 -0
  26. package/dist/shared/constants.d.ts.map +1 -0
  27. package/dist/shared/constants.js +7 -0
  28. package/dist/shared/constants.js.map +1 -0
  29. package/dist/shared/predicates.d.ts +10 -0
  30. package/dist/shared/predicates.d.ts.map +1 -0
  31. package/dist/shared/predicates.js +12 -0
  32. package/dist/shared/predicates.js.map +1 -0
  33. package/package.json +61 -45
  34. package/src/frida/FridaRpcClient.ts +182 -0
  35. package/src/frida/FridaRpcServer.ts +172 -0
  36. package/src/frida/index.ts +19 -0
  37. package/src/node/FridaRpcClient.ts +141 -0
  38. package/src/node/FridaRpcServer.ts +134 -0
  39. package/src/node/index.ts +19 -0
  40. package/src/shared/constants.ts +11 -0
  41. package/src/shared/predicates.ts +19 -0
  42. package/FridaRpcClient/package.json +0 -6
  43. package/FridaRpcServer/package.json +0 -6
  44. package/dist/cjs/FridaRpcClient.js +0 -77
  45. package/dist/cjs/FridaRpcClient.js.map +0 -1
  46. package/dist/cjs/FridaRpcServer.js +0 -135
  47. package/dist/cjs/FridaRpcServer.js.map +0 -1
  48. package/dist/cjs/index.js +0 -12
  49. package/dist/cjs/index.js.map +0 -1
  50. package/dist/dts/FridaRpcClient.d.ts.map +0 -1
  51. package/dist/dts/FridaRpcServer.d.ts +0 -36
  52. package/dist/dts/FridaRpcServer.d.ts.map +0 -1
  53. package/dist/dts/index.d.ts.map +0 -1
  54. package/dist/esm/FridaRpcClient.js +0 -67
  55. package/dist/esm/FridaRpcClient.js.map +0 -1
  56. package/dist/esm/FridaRpcServer.js +0 -125
  57. package/dist/esm/FridaRpcServer.js.map +0 -1
  58. package/dist/esm/index.js.map +0 -1
  59. package/dist/esm/package.json +0 -4
  60. package/index/package.json +0 -6
  61. package/src/FridaRpcClient.ts +0 -107
  62. package/src/FridaRpcServer.ts +0 -172
  63. 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
@@ -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"}
@@ -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":[]}
@@ -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":[]}
@@ -1,4 +0,0 @@
1
- {
2
- "type": "module",
3
- "sideEffects": []
4
- }
@@ -1,6 +0,0 @@
1
- {
2
- "sideEffects": [],
3
- "main": "../dist/cjs/index.js",
4
- "module": "../dist/esm/index.js",
5
- "types": "../dist/dts/index.d.ts"
6
- }
@@ -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
- );