Compare commits

...

14 Commits

9 changed files with 22168 additions and 0 deletions

13
.github/workflows/ci.yml vendored Normal file
View File

@ -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

8
.presetterrc.json Normal file
View File

@ -0,0 +1,8 @@
{
"preset": [
"@lumeweb/presetter-kernel-module-preset"
],
"config": {
"official": true
}
}

1
CHANGELOG.md Normal file
View File

@ -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)

21963
npm-shrinkwrap.json generated Normal file

File diff suppressed because it is too large Load Diff

29
package.json Normal file
View File

@ -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"
}
}

View File

@ -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 = {

36
patches/b4a@1.6.1.patch Normal file
View File

@ -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"
},

54
src/index.ts Normal file
View File

@ -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);

52
src/net.ts Normal file
View File

@ -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,
});
}