Compare commits
14 Commits
v0.0.1
...
v0.0.2-dev
Author | SHA1 | Date |
---|---|---|
semantic-release-bot | c29d215588 | |
Derrick Hammer | b4db108103 | |
Derrick Hammer | 548fb9843d | |
Derrick Hammer | 95428a77de | |
Derrick Hammer | 48eb03e6ab | |
Derrick Hammer | 37ed79f911 | |
Derrick Hammer | 4104942f07 | |
Derrick Hammer | e8f632299b | |
Derrick Hammer | d2e154efd2 | |
Derrick Hammer | d1101d1bbe | |
Derrick Hammer | e94bcf4cb5 | |
Derrick Hammer | 7e3440af17 | |
Derrick Hammer | 3ded5580d1 | |
Derrick Hammer | d0e6d91d11 |
|
@ -0,0 +1,13 @@
|
||||||
|
name: Build/Publish
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
- develop-*
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
main:
|
||||||
|
uses: lumeweb/github-node-deploy-workflow/.github/workflows/main.yml@master
|
||||||
|
secrets: inherit
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"preset": [
|
||||||
|
"@lumeweb/presetter-kernel-module-preset"
|
||||||
|
],
|
||||||
|
"config": {
|
||||||
|
"official": true
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
## [0.0.2-develop.1](https://git.lumeweb.com/LumeWeb/kernel-discovery-irc/compare/v0.0.1...v0.0.2-develop.1) (2023-07-01)
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"name": "@lumeweb/kernel-discovery-irc",
|
||||||
|
"version": "0.0.2-develop.1",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"prepare": "presetter bootstrap",
|
||||||
|
"build": "run build",
|
||||||
|
"semantic-release": "semantic-release"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@lumeweb/presetter-kernel-module-preset": "^0.1.0-develop.20",
|
||||||
|
"presetter": "*"
|
||||||
|
},
|
||||||
|
"readme": "ERROR: No README data found!",
|
||||||
|
"dependencies": {
|
||||||
|
"@lumeweb/kernel-peer-discovery-client": "^0.0.2-develop.4",
|
||||||
|
"@lumeweb/libkernel": "^0.1.0-develop.9",
|
||||||
|
"@lumeweb/peer-discovery-irc": "^0.0.2-develop.1"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "gitea@git.lumeweb.com:LumeWeb/kernel-discovery-irc.git"
|
||||||
|
},
|
||||||
|
"browser": {
|
||||||
|
"crypto": false,
|
||||||
|
"net": "./build/net.js",
|
||||||
|
"tls": "./build/net.js"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
diff --git a/dist/src/irc.js b/dist/src/irc.js
|
||||||
|
index fd7a55d6bb09a961921e58e6bff1a7028c61bb47..c96cbca5e904b5ba0312d7ae273e537e66e22fb9 100644
|
||||||
|
--- a/dist/src/irc.js
|
||||||
|
+++ b/dist/src/irc.js
|
||||||
|
@@ -9,6 +9,7 @@ import defaultsdeep from 'lodash.defaultsdeep';
|
||||||
|
import { TypedEmitter } from 'tiny-typed-emitter';
|
||||||
|
import { CyclingPingTimer } from './cyclingPingTimer.js';
|
||||||
|
import { parseMessage } from './parseMessage.js';
|
||||||
|
+import { Buffer } from 'buffer';
|
||||||
|
const log = debug('irc');
|
||||||
|
const lineDelimiter = new RegExp(/\r\n|\r|\n/);
|
||||||
|
const defaultOptions = {
|
|
@ -0,0 +1,36 @@
|
||||||
|
diff --git a/browser.js b/browser.js
|
||||||
|
index e07f78d17b7b4a2963e4f0062047cc96e6025f9e..a9f266a2644f3f8ebd0f6684b3e11a7519059851 100644
|
||||||
|
--- a/browser.js
|
||||||
|
+++ b/browser.js
|
||||||
|
@@ -3,6 +3,7 @@ const base64 = require('./lib/base64')
|
||||||
|
const hex = require('./lib/hex')
|
||||||
|
const utf8 = require('./lib/utf8')
|
||||||
|
const utf16le = require('./lib/utf16le')
|
||||||
|
+const Buffer = require('buffer').Buffer
|
||||||
|
|
||||||
|
const LE = new Uint8Array(Uint16Array.of(0xff).buffer)[0] === 0xff
|
||||||
|
|
||||||
|
diff --git a/index.js b/index.js
|
||||||
|
index a751d6b4d27c7dd903efbfdc87a98f61044a62b8..8bd32640afdcfbc475168d458c51f8b9162d1656 100644
|
||||||
|
--- a/index.js
|
||||||
|
+++ b/index.js
|
||||||
|
@@ -1,3 +1,5 @@
|
||||||
|
+const Buffer = require('buffer').Buffer
|
||||||
|
+
|
||||||
|
function isBuffer (value) {
|
||||||
|
return Buffer.isBuffer(value) || value instanceof Uint8Array
|
||||||
|
}
|
||||||
|
diff --git a/package.json b/package.json
|
||||||
|
index eb0f792709b27e66f26658054781b4099507b5ed..69c4ff39c48b0bdd5f0bc7ebbade517e7c5d76e4 100644
|
||||||
|
--- a/package.json
|
||||||
|
+++ b/package.json
|
||||||
|
@@ -8,9 +8,6 @@
|
||||||
|
"index.js",
|
||||||
|
"lib"
|
||||||
|
],
|
||||||
|
- "browser": {
|
||||||
|
- "./index.js": "./browser.js"
|
||||||
|
- },
|
||||||
|
"scripts": {
|
||||||
|
"test": "standard && brittle test/*.mjs"
|
||||||
|
},
|
|
@ -0,0 +1,54 @@
|
||||||
|
import type { ActiveQuery } from "@lumeweb/libkernel/module";
|
||||||
|
import { addHandler, handleMessage } from "@lumeweb/libkernel/module";
|
||||||
|
import DiscoveryIRC from "@lumeweb/peer-discovery-irc";
|
||||||
|
import { createClient } from "@lumeweb/kernel-peer-discovery-client";
|
||||||
|
|
||||||
|
onmessage = handleMessage;
|
||||||
|
|
||||||
|
const client = createClient();
|
||||||
|
|
||||||
|
async function handleRegister(aq: ActiveQuery) {
|
||||||
|
try {
|
||||||
|
await client.registerSelf();
|
||||||
|
} catch (e) {
|
||||||
|
aq.reject((e as Error).message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
aq.respond();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function handleName(aq: ActiveQuery): Promise<void> {
|
||||||
|
aq.respond("irc");
|
||||||
|
}
|
||||||
|
|
||||||
|
async function handleDiscover(aq: ActiveQuery): Promise<void> {
|
||||||
|
if (!("pubkey" in aq.callerInput)) {
|
||||||
|
aq.reject("pubkey required");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aq.callerInput.pubkey.length !== 32) {
|
||||||
|
aq.reject("pubkey must be 32 bytes");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
"options" in aq.callerInput &&
|
||||||
|
typeof aq.callerInput.options !== "object"
|
||||||
|
) {
|
||||||
|
aq.reject(`options must be an object`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ret = await DiscoveryIRC(aq.callerInput.pubkey, {
|
||||||
|
host: "liberta.casa",
|
||||||
|
...aq.callerInput?.options,
|
||||||
|
});
|
||||||
|
|
||||||
|
aq.respond(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
addHandler("register", handleRegister);
|
||||||
|
addHandler("name", handleName);
|
||||||
|
addHandler("discover", handleDiscover);
|
|
@ -0,0 +1,52 @@
|
||||||
|
import { Duplex, Callback } from "streamx";
|
||||||
|
interface SocketOptions {
|
||||||
|
allowHalfOpen?: boolean;
|
||||||
|
remoteAddress?: string;
|
||||||
|
remotePort?: number;
|
||||||
|
cb?: Function;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class Socket extends Duplex {
|
||||||
|
private _ws: WebSocket;
|
||||||
|
|
||||||
|
constructor({ remoteAddress, remotePort, cb }: SocketOptions = {}) {
|
||||||
|
super();
|
||||||
|
this._ws = new WebSocket(`wss://${remoteAddress}/webirc`);
|
||||||
|
|
||||||
|
["message", "end", "close", "error"].forEach((event) => {
|
||||||
|
this._ws.addEventListener(event, (...args) => {
|
||||||
|
let sendEvent = event;
|
||||||
|
let sendData = args;
|
||||||
|
|
||||||
|
if (event === "message") {
|
||||||
|
sendEvent = "data";
|
||||||
|
sendData[0] = ((args[0] as MessageEvent).data + "\n") as any;
|
||||||
|
}
|
||||||
|
// @ts-ignore
|
||||||
|
return this.emit(sendEvent, ...sendData);
|
||||||
|
});
|
||||||
|
this._ws.addEventListener("open", cb as any);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
_write(data: any, cb: Callback) {
|
||||||
|
this._ws.send(data);
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
_destroy(cb: any) {
|
||||||
|
this._ws.close();
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
setEncoding() {}
|
||||||
|
}
|
||||||
|
export function connect(
|
||||||
|
port: number,
|
||||||
|
host: string,
|
||||||
|
opts = {},
|
||||||
|
cb: Function
|
||||||
|
): Socket {
|
||||||
|
return new Socket({
|
||||||
|
remotePort: port,
|
||||||
|
remoteAddress: host,
|
||||||
|
cb,
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in New Issue