aboutsummaryrefslogtreecommitdiffstats
path: root/lib/strfry.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/strfry.ts')
-rw-r--r--lib/strfry.ts102
1 files changed, 24 insertions, 78 deletions
diff --git a/lib/strfry.ts b/lib/strfry.ts
index 65b77709..b2791e74 100644
--- a/lib/strfry.ts
+++ b/lib/strfry.ts
@@ -1,83 +1,29 @@
-import { randomUUID } from "crypto";
-import { connect, createServer } from "net";
+import * as net from "net";
import type { Event } from "nostr-tools";
-const exec = async (cmd: string, data = ""): Promise<Event[]> =>
- new Promise((resolve, reject) => {
- const c = `${cmd} 2>/dev/null`;
- const id = randomUUID();
- const resultSocketPath = `/sockets/result_${id}`;
-
- const resultServer = createServer((socket) => {
- let resultBuffer = "";
-
- const results = [];
- socket.on("data", (chunk) => {
- resultBuffer += chunk.toString();
- const parts = resultBuffer.split("\n");
-
- for (let i = 0; i < parts.length - 1; i++) {
- try {
- const parsedObject = JSON.parse(parts[i]);
- results.push(parsedObject);
- } catch (e) {
- console.error("Failed to parse:", parts[i]);
- }
- }
+const controlSocketPath = "/home/bun/app/data/sockets/strsrv.sock";
- resultBuffer = parts[parts.length - 1];
- });
-
- socket.on("end", () => {
- socket.write("DONE");
- resolve(results);
- socket.end();
-
- resultServer.close();
- });
- });
-
- resultServer.listen(resultSocketPath, () => {
- const controlClient = connect("/sockets/ctrl", () => {
- // Send the command and data payload
- const message = `${resultSocketPath} ${c}\n${data}\n`;
- controlClient.write(message);
- controlClient.end();
- });
-
- controlClient.on("error", (e) => {
- reject(`Control socket error: ${e.message}`);
+export const scan = (f: object): Promise<Event[]> =>
+ new Promise((resolve, reject) => {
+ const result = [];
+ const client = net
+ .createConnection(controlSocketPath)
+ .on("connect", () => {
+ client.write(`${JSON.stringify(f)}\n`);
+ })
+ .on("data", (data) => {
+ result.push(data);
+ })
+ .on("end", () => {
+ resolve(
+ Buffer.concat(result)
+ .toString("utf8")
+ .split("\n")
+ .filter((l) => l)
+ .map((l) => JSON.parse(l) as Event),
+ );
+ })
+ .on("error", (e) => {
+ reject(e.message);
});
- });
-
- resultServer.on("error", (e) => {
- reject(`Result server error: ${e.message}`);
- });
});
-
-// const filter2params = (f) => {
-// let r = "";
-//
-// const { limit, since, until } = f;
-//
-// if (limit) r += `-l ${limit} `;
-// if (since) r += `-s ${since} `;
-// if (until) r += `-u ${until} `;
-//
-// for (const k of f.kinds || []) r += `-k ${k} `;
-// for (const a of f.authors || []) r += `-a ${a} `;
-// for (const e of f["#e"] || []) r += `-e ${e} `;
-// for (const p of f["#p"] || []) r += `-p ${p} `;
-//
-// return r;
-// };
-
-export const load = (data) =>
- exec(
- `echo '${data.replace(/'/g, "'\\''")}' | /app/strfry import --no-verify\n`,
- );
-export const count = (f) =>
- exec(`/app/strfry scan --count '${JSON.stringify(f)}'\n`);
-export const scan = (f) => exec(`/app/strfry scan '${JSON.stringify(f)}'\n`);
-export const sync = (r, f) =>
- exec(`/app/strfry sync ${r} --dir down --filter '${JSON.stringify(f)}'\n`);