aboutsummaryrefslogtreecommitdiffstats
path: root/lib/strfry.ts
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-10-08 20:13:48 -0700
committerAdam Soltys <[email protected]>2024-10-10 12:17:05 -0700
commit0a2734dfb5ae312f5283f93ab2e3f819ace3f94b (patch)
tree9170fc9bb3c7e9bb5b05ccea407321eb6c7302ef /lib/strfry.ts
parent372c635714f6e7de8a0da135980697b49f207f2c (diff)
downloadcoinos-server-0a2734dfb5ae312f5283f93ab2e3f819ace3f94b.tar.gz
coinos-server-0a2734dfb5ae312f5283f93ab2e3f819ace3f94b.zip
nostr revamp wip
Diffstat (limited to 'lib/strfry.ts')
-rw-r--r--lib/strfry.ts68
1 files changed, 48 insertions, 20 deletions
diff --git a/lib/strfry.ts b/lib/strfry.ts
index ebc14ed3..029c8eee 100644
--- a/lib/strfry.ts
+++ b/lib/strfry.ts
@@ -1,30 +1,58 @@
-import { connect } from "net";
+import { createServer, connect } from "net";
+import { randomUUID } from "crypto";
-export default (cmd) =>
- new Promise((r, j) => {
- let results = [];
- let c = `/app/strfry ${cmd} 2>/dev/null\n`;
- let client = connect("/sockets/ctrl", () => client.write(c));
+let exec = async (cmd) =>
+ new Promise((resolve, reject) => {
+ let c = `/app/strfry ${cmd} 2>/dev/null`;
+ let id = randomUUID();
+ const resultSocketPath = `/sockets/result_${id}`;
- let s = "";
- client.on("data", (data) => {
- s += data.toString();
- // console.log("S", s);
+ const resultServer = createServer((socket) => {
+ let resultBuffer = "";
- try {
- let parts = s.split("}");
+ let results = [];
+ socket.on("data", (data) => {
+ resultBuffer += data.toString();
+
+ let parts = resultBuffer.split("\n");
for (let i = 0; i < parts.length - 1; i++) {
- let completeJson = parts[i] + "}";
- results.push(JSON.parse(completeJson));
+ try {
+ let parsedObject = JSON.parse(parts[i]);
+ results.push(parsedObject);
+ } catch (e) {
+ console.error(parts[i]);
+ }
}
- s = parts[parts.length - 1];
- } catch (err) {
- console.error("Error parsing JSON:", err.message);
- }
+ resultBuffer = parts[parts.length - 1];
+ });
+
+ socket.on("end", () => {
+ socket.write("DONE");
+ resolve(results);
+ socket.end();
+
+ resultServer.close();
+ });
});
- client.on("error", (e) => j(e.message));
- client.on("close", () => r(results));
+ resultServer.listen(resultSocketPath, () => {
+ const controlClient = connect("/sockets/ctrl", () => {
+ const message = `${resultSocketPath} ${c}\n`;
+ controlClient.write(message);
+ controlClient.end();
+ });
+
+ controlClient.on("error", (e) =>
+ reject(`Control socket error: ${e.message}`),
+ );
+ });
+
+ resultServer.on("error", (e) =>
+ reject(`Result server error: ${e.message}`),
+ );
});
+
+export let scan = (f) => exec(`scan '${JSON.stringify(f)}'\n`)
+export let sync = (r, f) => exec(`sync ${r} --dir down --filter '${JSON.stringify(f)}'\n`)