@efffrida/rpc 0.0.27 → 0.0.29

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 (40) hide show
  1. package/dist/frida/FridaRpcClient.d.ts +5 -29
  2. package/dist/frida/FridaRpcClient.d.ts.map +1 -1
  3. package/dist/frida/FridaRpcClient.js +48 -83
  4. package/dist/frida/FridaRpcClient.js.map +1 -1
  5. package/dist/frida/FridaRpcServer.d.ts +7 -7
  6. package/dist/frida/FridaRpcServer.d.ts.map +1 -1
  7. package/dist/frida/FridaRpcServer.js +37 -49
  8. package/dist/frida/FridaRpcServer.js.map +1 -1
  9. package/dist/node/FridaRpcClient.d.ts +6 -10
  10. package/dist/node/FridaRpcClient.d.ts.map +1 -1
  11. package/dist/node/FridaRpcClient.js +67 -46
  12. package/dist/node/FridaRpcClient.js.map +1 -1
  13. package/dist/node/FridaRpcServer.d.ts +10 -3
  14. package/dist/node/FridaRpcServer.d.ts.map +1 -1
  15. package/dist/node/FridaRpcServer.js +63 -64
  16. package/dist/node/FridaRpcServer.js.map +1 -1
  17. package/dist/shared/{constants.d.ts → Constants.d.ts} +7 -3
  18. package/dist/shared/Constants.d.ts.map +1 -0
  19. package/dist/shared/Constants.js +10 -0
  20. package/dist/shared/Constants.js.map +1 -0
  21. package/dist/shared/index.d.ts +10 -0
  22. package/dist/shared/index.d.ts.map +1 -0
  23. package/dist/shared/index.js +10 -0
  24. package/dist/shared/index.js.map +1 -0
  25. package/package.json +12 -20
  26. package/src/frida/FridaRpcClient.ts +65 -141
  27. package/src/frida/FridaRpcServer.ts +47 -54
  28. package/src/node/FridaRpcClient.ts +84 -71
  29. package/src/node/FridaRpcServer.ts +92 -80
  30. package/src/shared/Constants.ts +13 -0
  31. package/src/shared/index.ts +10 -0
  32. package/dist/shared/constants.d.ts.map +0 -1
  33. package/dist/shared/constants.js +0 -7
  34. package/dist/shared/constants.js.map +0 -1
  35. package/dist/shared/predicates.d.ts +0 -10
  36. package/dist/shared/predicates.d.ts.map +0 -1
  37. package/dist/shared/predicates.js +0 -12
  38. package/dist/shared/predicates.js.map +0 -1
  39. package/src/shared/constants.ts +0 -11
  40. package/src/shared/predicates.ts +0 -19
@@ -4,80 +4,101 @@
4
4
  *
5
5
  * @since 1.0.0
6
6
  */
7
- import * as RpcClient from "@effect/rpc/RpcClient";
8
- import * as RpcSerialization from "@effect/rpc/RpcSerialization";
9
- import * as FridaScript from "@efffrida/frida-tools/FridaScript";
7
+ import * as Cause from "effect/Cause";
10
8
  import * as Effect from "effect/Effect";
11
9
  import * as Function from "effect/Function";
12
10
  import * as Layer from "effect/Layer";
13
11
  import * as Option from "effect/Option";
14
- import * as ParseResult from "effect/ParseResult";
15
- import * as Predicate from "effect/Predicate";
12
+ import * as Result from "effect/Result";
16
13
  import * as Schema from "effect/Schema";
17
14
  import * as Stream from "effect/Stream";
18
- import * as constants from "../shared/constants.js";
15
+ import * as RpcClient from "effect/unstable/rpc/RpcClient";
16
+ import * as RpcClientError from "effect/unstable/rpc/RpcClientError";
17
+ import * as RpcSerialization from "effect/unstable/rpc/RpcSerialization";
18
+ import * as FridaScript from "@efffrida/frida-tools/FridaScript";
19
+ import * as constants from "../shared/Constants.js";
19
20
  /**
20
21
  * @since 1.0.0
21
22
  * @category Protocol
22
23
  */
23
- export const makeProtocolFrida = options => RpcClient.Protocol.make(Effect.fnUntraced(function* (writeResponse) {
24
+ export const makeProtocolFrida = options => RpcClient.Protocol.make(Effect.fnUntraced(function* (writeResponse, clientIds) {
24
25
  const script = yield* FridaScript.FridaScript;
25
26
  const serialization = yield* RpcSerialization.RpcSerialization;
26
- const parser = serialization.unsafeMake();
27
27
  const mainExportName = options?.exportName ?? constants.defaultServerMainExportName;
28
- const makeExportName = options?.generateExportName ?? constants.generateServerExportNameForClient;
29
- /**
30
- * Obtain a client id from the frida script export, this will allow
31
- * us to filter future messages for ours since the script channels
32
- * are shared.
33
- */
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
- const isClientId = Predicate.compose(Predicate.isNumber, id => id === clientId);
36
- const receivingPredicate = Predicate.compose(Predicate.isUnknown, Predicate.struct({
37
- clientId: isClientId
38
- }));
39
- /**
40
- * Start listening for responses to our requests, decode them, and
41
- * send the responses back to the implementation.
42
- */
43
- yield* script.stream.pipe(Stream.filterMap(unfiltered => {
44
- if (receivingPredicate(unfiltered.message)) return unfiltered.data;else return Option.none();
45
- }), Stream.runForEach(filtered => {
28
+ const informServerToSetupExport = script.callExport(mainExportName, Schema.String);
29
+ const clientExportName = yield* Effect.orDie(informServerToSetupExport());
30
+ const parser = serialization.makeUnsafe();
31
+ const requestClientMap = new Map();
32
+ let currentError = undefined;
33
+ const broadcast = response => Effect.forEach(clientIds, clientId => writeResponse(clientId, response));
34
+ yield* Stream.runForEach(script.stream, message => {
35
+ if (Option.isNone(message.data)) {
36
+ return Effect.void;
37
+ }
46
38
  try {
47
- const responses = parser.decode(filtered);
39
+ const responses = parser.decode(message.data.value);
48
40
  if (responses.length === 0) return Effect.void;
49
41
  let i = 0;
50
42
  return Effect.whileLoop({
43
+ step: Function.constVoid,
51
44
  while: () => i < responses.length,
52
- body: () => writeResponse(responses[i++]),
53
- step: Function.constVoid
45
+ body: () => {
46
+ const response = responses[i++];
47
+ if ("requestId" in response) {
48
+ const clientId = requestClientMap.get(response.requestId);
49
+ if (response._tag === "Exit") requestClientMap.delete(response.requestId);
50
+ return writeResponse(clientId, response);
51
+ } else return broadcast(response);
52
+ }
54
53
  });
55
54
  } catch (defect) {
56
- return writeResponse({
57
- _tag: "Defect",
58
- defect
55
+ return broadcast({
56
+ _tag: "ClientProtocolError",
57
+ error: new RpcClientError.RpcClientError({
58
+ reason: new RpcClientError.RpcClientDefect({
59
+ message: "Error decoding message",
60
+ cause: defect
61
+ })
62
+ })
59
63
  });
60
64
  }
61
- }), Effect.interruptible, Effect.forkScoped);
62
- /**
63
- * Sending messages is as simple as encoding them, then posting them
64
- * to the frida side tagged with our client id so it knows where to
65
- * send them back to.
66
- */
67
- const send = Effect.fnUntraced(function* (message) {
68
- const encoded = parser.encode(message);
69
- if (Predicate.isUndefined(encoded)) return;
70
- yield* script.callExport(makeExportName(clientId), Schema.Void)(encoded).pipe(Effect.orDie);
71
- });
65
+ }).pipe(Effect.tapCause(cause => {
66
+ const error = Cause.findError(cause);
67
+ const hasError = Result.isSuccess(error);
68
+ const defect = hasError ? new RpcClientError.RpcClientDefect({
69
+ message: error.success.message,
70
+ cause: error.success.cause
71
+ }) : new RpcClientError.RpcClientDefect({
72
+ message: "Unknown error in Frida RPC client stream",
73
+ cause: Cause.squash(cause)
74
+ });
75
+ currentError = new RpcClientError.RpcClientError({
76
+ reason: defect
77
+ });
78
+ return broadcast({
79
+ _tag: "ClientProtocolError",
80
+ error: currentError
81
+ });
82
+ }), Effect.forkScoped);
72
83
  return {
73
- send,
74
84
  supportsAck: true,
75
- supportsTransferables: false
85
+ supportsTransferables: false,
86
+ send(clientId, request) {
87
+ if (currentError) {
88
+ return Effect.fail(currentError);
89
+ }
90
+ if (request._tag === "Request") {
91
+ requestClientMap.set(request.id, clientId);
92
+ }
93
+ const encoded = parser.encode(request);
94
+ if (encoded === undefined) return Effect.void;
95
+ return Effect.orDie(script.callExport(clientExportName)(encoded));
96
+ }
76
97
  };
77
98
  }));
78
99
  /**
79
100
  * @since 1.0.0
80
101
  * @category Layers
81
102
  */
82
- export const layerProtocolFrida = options => Layer.scoped(RpcClient.Protocol, makeProtocolFrida(options));
103
+ export const layerProtocolFrida = options => Layer.effect(RpcClient.Protocol, makeProtocolFrida(options));
83
104
  //# sourceMappingURL=FridaRpcClient.js.map
@@ -1 +1 @@
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":[]}
1
+ {"version":3,"file":"FridaRpcClient.js","names":["Cause","Effect","Function","Layer","Option","Result","Schema","Stream","RpcClient","RpcClientError","RpcSerialization","FridaScript","constants","makeProtocolFrida","options","Protocol","make","fnUntraced","writeResponse","clientIds","script","serialization","mainExportName","exportName","defaultServerMainExportName","informServerToSetupExport","callExport","String","clientExportName","orDie","parser","makeUnsafe","requestClientMap","Map","currentError","undefined","broadcast","response","forEach","clientId","runForEach","stream","message","isNone","data","void","responses","decode","value","length","i","whileLoop","step","constVoid","while","body","get","requestId","_tag","delete","defect","error","reason","RpcClientDefect","cause","pipe","tapCause","findError","hasError","isSuccess","success","squash","forkScoped","supportsAck","supportsTransferables","send","request","fail","set","id","encoded","encode","layerProtocolFrida","effect"],"sources":["../../src/node/FridaRpcClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -5,12 +5,19 @@
5
5
  * @since 1.0.0
6
6
  */
7
7
  import type * as Scope from "effect/Scope";
8
- import * as RpcSerialization from "@effect/rpc/RpcSerialization";
9
- import * as FridaScript from "@efffrida/frida-tools/FridaScript";
10
8
  import * as Effect from "effect/Effect";
9
+ import * as Layer from "effect/Layer";
10
+ import * as RpcSerialization from "effect/unstable/rpc/RpcSerialization";
11
+ import * as RpcServer from "effect/unstable/rpc/RpcServer";
12
+ import * as FridaScript from "@efffrida/frida-tools/FridaScript";
11
13
  /**
12
14
  * @since 1.0.0
13
15
  * @category Protocol
14
16
  */
15
- export declare const makeProtocolFrida: () => Effect.Effect<unknown, never, FridaScript.FridaScript | RpcSerialization.RpcSerialization | Scope.Scope>;
17
+ export declare const makeProtocolFrida: () => Effect.Effect<RpcServer.Protocol["Service"], never, FridaScript.FridaScript | RpcSerialization.RpcSerialization | Scope.Scope>;
18
+ /**
19
+ * @since 1.0.0
20
+ * @category Layer
21
+ */
22
+ export declare const layerProtocolFrida: Layer.Layer<RpcServer.Protocol, never, FridaScript.FridaScript | RpcSerialization.RpcSerialization>;
16
23
  //# sourceMappingURL=FridaRpcServer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FridaRpcServer.d.ts","sourceRoot":"","sources":["../../src/node/FridaRpcServer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,gBAAgB,MAAM,8BAA8B,CAAC;AAEjE,OAAO,KAAK,WAAW,MAAM,mCAAmC,CAAC;AAEjE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAaxC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAAM,CAAC,MAAM,CAC9C,OAAO,EACP,KAAK,EACL,WAAW,CAAC,WAAW,GAAG,gBAAgB,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAmGvE,CAAC"}
1
+ {"version":3,"file":"FridaRpcServer.d.ts","sourceRoot":"","sources":["../../src/node/FridaRpcServer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAOtC,OAAO,KAAK,gBAAgB,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAC;AAE3D,OAAO,KAAK,WAAW,MAAM,mCAAmC,CAAC;AAIjE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAAM,CAAC,MAAM,CAC9C,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAC7B,KAAK,EACL,WAAW,CAAC,WAAW,GAAG,gBAAgB,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAuGvE,CAAC;AAEP;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,KAAK,CACxC,SAAS,CAAC,QAAQ,EAClB,KAAK,EACL,WAAW,CAAC,WAAW,GAAG,gBAAgB,CAAC,gBAAgB,CACN,CAAC"}
@@ -4,102 +4,96 @@
4
4
  *
5
5
  * @since 1.0.0
6
6
  */
7
- import * as RpcMessage from "@effect/rpc/RpcMessage";
8
- import * as RpcSerialization from "@effect/rpc/RpcSerialization";
9
- import * as RpcServer from "@effect/rpc/RpcServer";
10
- import * as FridaScript from "@efffrida/frida-tools/FridaScript";
11
- import * as Console from "effect/Console";
12
7
  import * as Effect from "effect/Effect";
13
8
  import * as Function from "effect/Function";
14
- import * as Mailbox from "effect/Mailbox";
9
+ import * as Layer from "effect/Layer";
15
10
  import * as Option from "effect/Option";
16
11
  import * as Predicate from "effect/Predicate";
17
- import * as Schema from "effect/Schema";
12
+ import * as Queue from "effect/Queue";
18
13
  import * as Stream from "effect/Stream";
19
14
  import * as String from "effect/String";
20
- import * as Tuple from "effect/Tuple";
21
- import * as constants from "../shared/constants.js";
22
- import * as predicates from "../shared/predicates.js";
15
+ import * as RpcMessage from "effect/unstable/rpc/RpcMessage";
16
+ import * as RpcSerialization from "effect/unstable/rpc/RpcSerialization";
17
+ import * as RpcServer from "effect/unstable/rpc/RpcServer";
18
+ import * as FridaScript from "@efffrida/frida-tools/FridaScript";
19
+ import * as constants from "../shared/Constants.js";
23
20
  /**
24
21
  * @since 1.0.0
25
22
  * @category Protocol
26
23
  */
27
24
  export const makeProtocolFrida = () => Effect.gen(function* () {
28
- const encoder = new TextEncoder();
29
- const script = yield* FridaScript.FridaScript;
30
25
  const serialization = yield* RpcSerialization.RpcSerialization;
26
+ const script = yield* FridaScript.FridaScript;
27
+ const disconnects = yield* Queue.unbounded();
28
+ const parser = serialization.makeUnsafe();
29
+ const encoder = new TextEncoder();
31
30
  let clientId = 0;
32
31
  const clientIds = new Set();
33
- const parser = serialization.unsafeMake();
34
- const disconnects = yield* Mailbox.make();
32
+ const clientIdsByExports = new Map();
33
+ const clients = new Map();
34
+ const stripPrefix = String.replace(constants.nodeRpcClientConnectionRequestMessagePrefix, "");
35
+ const newClientPredicate = Predicate.compose(Predicate.isString, String.startsWith(constants.nodeRpcClientConnectionRequestMessagePrefix));
36
+ const clientMessagePredicate = Predicate.compose(Predicate.isString, message => clientIdsByExports.has(message));
35
37
  let writeRequest;
36
- // Listen for new clients
37
- yield* script.stream.pipe(Stream.filterMap(({
38
- message
39
- }) => {
40
- if (predicates.newClientPredicate(message)) {
41
- const stripPrefix = String.replace(constants.nodeRpcClientConnectionRequestMessagePrefix, "");
42
- return Option.some(stripPrefix(message));
43
- } else {
44
- return Option.none();
45
- }
46
- }), Stream.runForEach(exportName => {
47
- const id = clientId++;
38
+ const makeRawWriter = exportName => data => {
39
+ const transformed = typeof data === "string" ? encoder.encode(data) : data;
40
+ return script.callExport(exportName)(transformed).pipe(Effect.orDie);
41
+ };
42
+ const onClientConnect = message => {
43
+ const writeRaw = makeRawWriter(stripPrefix(message));
44
+ const write = response => {
45
+ try {
46
+ const encoded = parser.encode(response);
47
+ if (encoded === undefined) return Effect.void;
48
+ return writeRaw(encoded);
49
+ } catch (cause) {
50
+ const encoded = parser.encode(RpcMessage.ResponseDefectEncoded(cause));
51
+ return writeRaw(encoded);
52
+ }
53
+ };
54
+ const id = ++clientId;
55
+ clientIdsByExports.set(stripPrefix(message), id);
56
+ clients.set(id, {
57
+ write
58
+ });
48
59
  clientIds.add(id);
49
- return script.callExport(exportName, Schema.Void)(clientId++);
50
- }), Stream.tapError(Console.error), Stream.runDrain, Effect.forkScoped);
51
- // Listen for messages from connected clients
52
- yield* script.stream.pipe(Stream.filterMap(({
53
- data: maybeData,
54
- message
55
- }) => {
56
- if (predicates.isTaggedForAnyClient(message)) {
57
- return Option.map(maybeData, data => Tuple.make(message.clientId, data));
58
- } else {
59
- return Option.none();
60
- }
61
- }), Stream.runForEach(([clientId, data]) => {
60
+ return Effect.void;
61
+ };
62
+ const onMessage = (exportName, data) => {
62
63
  try {
64
+ const id = clientIdsByExports.get(exportName);
63
65
  const decoded = parser.decode(data);
64
66
  if (decoded.length === 0) return Effect.void;
65
67
  let i = 0;
66
68
  return Effect.whileLoop({
67
69
  while: () => i < decoded.length,
70
+ step: Function.constVoid,
68
71
  body() {
69
72
  const message = decoded[i++];
70
- return writeRequest(clientId, message);
71
- },
72
- step: Function.constVoid
73
+ return writeRequest(id, message);
74
+ }
73
75
  });
74
76
  } catch (cause) {
75
- return Effect.sync(() => {
76
- const encoded = parser.encode(RpcMessage.ResponseDefectEncoded(cause));
77
- const transformed = typeof encoded === "string" ? encoder.encode(encoded) : encoded;
78
- script.script.post({
79
- clientId
80
- }, Buffer.from(transformed));
81
- });
77
+ const writeRaw = makeRawWriter(exportName);
78
+ return writeRaw(parser.encode(RpcMessage.ResponseDefectEncoded(cause)));
82
79
  }
83
- }), Stream.tapError(Console.error), Stream.runDrain, Effect.forkScoped);
80
+ };
81
+ yield* Stream.runForEach(script.stream, ({
82
+ message,
83
+ data
84
+ }) => {
85
+ if (newClientPredicate(message)) return onClientConnect(message);
86
+ if (clientMessagePredicate(message) && Option.isSome(data)) return onMessage(message, data.value);
87
+ return Effect.void;
88
+ }).pipe(Effect.forkScoped);
84
89
  return yield* RpcServer.Protocol.make(_writeRequest => {
85
90
  writeRequest = _writeRequest;
86
91
  return Effect.succeed({
87
92
  disconnects,
88
93
  send: (clientId, response) => {
89
- const writeRaw = data => {
90
- const transformed = typeof data === "string" ? encoder.encode(data) : data;
91
- script.script.post({
92
- clientId
93
- }, Buffer.from(transformed));
94
- return Effect.void;
95
- };
96
- try {
97
- const encoded = parser.encode(response);
98
- if (Predicate.isNotUndefined(encoded)) return writeRaw(encoded);else return Effect.void;
99
- } catch (cause) {
100
- const encoded = parser.encode(RpcMessage.ResponseDefectEncoded(cause));
101
- return writeRaw(encoded);
102
- }
94
+ const client = clients.get(clientId);
95
+ if (!client) return Effect.void;
96
+ return Effect.sync(() => client.write(response));
103
97
  },
104
98
  end(_clientId) {
105
99
  return Effect.void;
@@ -112,4 +106,9 @@ export const makeProtocolFrida = () => Effect.gen(function* () {
112
106
  });
113
107
  });
114
108
  });
109
+ /**
110
+ * @since 1.0.0
111
+ * @category Layer
112
+ */
113
+ export const layerProtocolFrida = /*#__PURE__*/Layer.effect(RpcServer.Protocol, /*#__PURE__*/makeProtocolFrida());
115
114
  //# sourceMappingURL=FridaRpcServer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FridaRpcServer.js","names":["RpcMessage","RpcSerialization","RpcServer","FridaScript","Console","Effect","Function","Mailbox","Option","Predicate","Schema","Stream","String","Tuple","constants","predicates","makeProtocolFrida","gen","encoder","TextEncoder","script","serialization","clientId","clientIds","Set","parser","unsafeMake","disconnects","make","writeRequest","stream","pipe","filterMap","message","newClientPredicate","stripPrefix","replace","nodeRpcClientConnectionRequestMessagePrefix","some","none","runForEach","exportName","id","add","callExport","Void","tapError","error","runDrain","forkScoped","data","maybeData","isTaggedForAnyClient","map","decoded","decode","length","void","i","whileLoop","while","body","step","constVoid","cause","sync","encoded","encode","ResponseDefectEncoded","transformed","post","Buffer","from","Protocol","_writeRequest","succeed","send","response","writeRaw","isNotUndefined","end","_clientId","initialMessage","succeedNone","supportsAck","supportsTransferables","supportsSpanPropagation"],"sources":["../../src/node/FridaRpcServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FridaRpcServer.js","names":["Effect","Function","Layer","Option","Predicate","Queue","Stream","String","RpcMessage","RpcSerialization","RpcServer","FridaScript","constants","makeProtocolFrida","gen","serialization","script","disconnects","unbounded","parser","makeUnsafe","encoder","TextEncoder","clientId","clientIds","Set","clientIdsByExports","Map","clients","stripPrefix","replace","nodeRpcClientConnectionRequestMessagePrefix","newClientPredicate","compose","isString","startsWith","clientMessagePredicate","message","has","writeRequest","makeRawWriter","exportName","data","transformed","encode","callExport","pipe","orDie","onClientConnect","writeRaw","write","response","encoded","undefined","void","cause","ResponseDefectEncoded","id","set","add","onMessage","get","decoded","decode","length","i","whileLoop","while","step","constVoid","body","runForEach","stream","isSome","value","forkScoped","Protocol","make","_writeRequest","succeed","send","client","sync","end","_clientId","initialMessage","succeedNone","supportsAck","supportsTransferables","supportsSpanPropagation","layerProtocolFrida","effect"],"sources":["../../src/node/FridaRpcServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,10 @@
1
+ /**
2
+ * Constants for working with RPC servers and clients.
3
+ *
4
+ * @since 1.0.0
5
+ */
1
6
  export declare const defaultServerMainExportName = "rpc";
2
7
  export declare const generateServerExportNameForClient: (clientId: number) => string;
3
- export declare const generateClientCallbackExportNameForServer: () => string;
4
- export declare const nodeRpcClientConnectionRequestMessagePrefix = "client id request message";
8
+ export declare const nodeRpcClientConnectionRequestMessagePrefix = "@efffrida/rpc/NodeRpcClientConnectionRequest/";
5
9
  export declare const nodeRpcClientMakeConnectionRequestForServer: (exportName: string) => string;
6
- //# sourceMappingURL=constants.d.ts.map
10
+ //# sourceMappingURL=Constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Constants.d.ts","sourceRoot":"","sources":["../../src/shared/Constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AACjD,eAAO,MAAM,iCAAiC,GAAI,UAAU,MAAM,KAAG,MACN,CAAC;AAEhE,eAAO,MAAM,2CAA2C,kDAAkD,CAAC;AAC3G,eAAO,MAAM,2CAA2C,GAAI,YAAY,MAAM,WACb,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Constants for working with RPC servers and clients.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ export const defaultServerMainExportName = "rpc";
7
+ export const generateServerExportNameForClient = clientId => `@efffrida/rpc/FridaServerRpcListenerForClient/${clientId}`;
8
+ export const nodeRpcClientConnectionRequestMessagePrefix = "@efffrida/rpc/NodeRpcClientConnectionRequest/";
9
+ export const nodeRpcClientMakeConnectionRequestForServer = exportName => `${nodeRpcClientConnectionRequestMessagePrefix}${exportName}`;
10
+ //# sourceMappingURL=Constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Constants.js","names":["defaultServerMainExportName","generateServerExportNameForClient","clientId","nodeRpcClientConnectionRequestMessagePrefix","nodeRpcClientMakeConnectionRequestForServer","exportName"],"sources":["../../src/shared/Constants.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;AAMA,OAAO,MAAMA,2BAA2B,GAAG,KAAK;AAChD,OAAO,MAAMC,iCAAiC,GAAIC,QAAgB,IAC9D,iDAAiDA,QAAQ,EAAE;AAE/D,OAAO,MAAMC,2CAA2C,GAAG,+CAA+C;AAC1G,OAAO,MAAMC,2CAA2C,GAAIC,UAAkB,IAC1E,GAAGF,2CAA2C,GAAGE,UAAU,EAAE","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ /**
5
+ * Constants for working with RPC servers and clients.
6
+ *
7
+ * @since 1.0.0
8
+ */
9
+ export * as Constants from "./Constants.ts";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ /**
5
+ * Constants for working with RPC servers and clients.
6
+ *
7
+ * @since 1.0.0
8
+ */
9
+ export * as Constants from "./Constants.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["Constants"],"sources":["../../src/shared/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;;;;;AAKA,OAAO,KAAKA,SAAS,MAAM,gBAAgB","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@efffrida/rpc",
3
- "version": "0.0.27",
3
+ "version": "0.0.29",
4
4
  "description": "effect rpc-frida",
5
5
  "keywords": [
6
6
  "effect-ts",
@@ -38,30 +38,22 @@
38
38
  "provenance": true
39
39
  },
40
40
  "dependencies": {
41
- "@efffrida/frida-tools": "^0.0.27",
42
- "@efffrida/platform": "0.0.19",
43
- "@efffrida/polyfills": "0.0.6"
41
+ "@efffrida/frida-tools": "^0.0.29",
42
+ "@efffrida/platform": "0.0.21",
43
+ "@efffrida/polyfills": "0.0.8"
44
44
  },
45
45
  "devDependencies": {
46
- "@effect/cluster": "0.58.2",
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/vitest": "0.29.0",
53
- "@effect/workflow": "0.18.1",
46
+ "@effect/platform-node": "4.0.0-beta.69",
47
+ "@effect/vitest": "4.0.0-beta.69",
54
48
  "@types/frida-gum": "19.1.0",
55
- "@types/node": "25.7.0",
56
- "effect": "3.21.2",
57
- "frida": "17.9.8",
58
- "vitest": "4.1.6",
59
- "@efffrida/vitest-pool": "0.0.12"
49
+ "@types/node": "25.9.0",
50
+ "effect": "4.0.0-beta.69",
51
+ "frida": "17.9.10",
52
+ "ioredis": "5.10.1",
53
+ "vitest": "4.1.6"
60
54
  },
61
55
  "peerDependencies": {
62
- "@effect/platform": "0.96.1",
63
- "@effect/rpc": "0.75.1",
64
- "effect": "3.21.2"
56
+ "effect": "4.0.0-beta.69"
65
57
  },
66
58
  "tags": [
67
59
  "frida.re",