@sockethub/irc2as 4.0.0-alpha.11 → 4.0.0-alpha.13

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.
package/README.md CHANGED
@@ -11,8 +11,15 @@ of them, and as time goes on hopefully become more compliant (PRs & feedback wel
11
11
  ## Usage
12
12
 
13
13
  ```javascript
14
- var IRC2AS = require('irc2as');
15
- var irc2as = new IRC2AS({server: 'irc.freenode.net'});
14
+ import { IrcToActivityStreams } from '@sockethub/irc2as';
15
+ const irc2as = new IrcToActivityStreams({
16
+ server: 'irc.freenode.net',
17
+ contexts: [
18
+ 'https://www.w3.org/ns/activitystreams',
19
+ 'https://sockethub.org/ns/context/v1.jsonld',
20
+ 'https://sockethub.org/ns/context/platform/irc/v1.jsonld'
21
+ ]
22
+ });
16
23
 
17
24
  irc2as.events.on('incoming', function (asObject) {
18
25
  console.log('activity stream: ', asObject);
@@ -0,0 +1,34 @@
1
+ export class ASEmitter {
2
+ constructor(events: any, server: any, contexts: any);
3
+ server: any;
4
+ events: any;
5
+ contexts: any[];
6
+ emitEvent(code: any, asObject: any): void;
7
+ __generalError(nick: any, content: any): {
8
+ "@context": any[];
9
+ type: string;
10
+ actor: {
11
+ type: string;
12
+ id: string;
13
+ name: any;
14
+ };
15
+ target: {
16
+ type: string;
17
+ id: any;
18
+ };
19
+ error: any;
20
+ };
21
+ presence(nick: any, role: any, channel: any): void;
22
+ channelError(channel: any, nick: any, content: any): void;
23
+ nickError(nick: any, content: any): void;
24
+ notice(nick: any, content: any): void;
25
+ serviceError(nick: any, content: any): void;
26
+ joinError(nick: any): void;
27
+ topicChange(channel: any, nick: any, content: any): void;
28
+ joinRoom(channel: any, nick: any): void;
29
+ userQuit(nick: any): void;
30
+ userPart(channel: any, nick: any): void;
31
+ privMsg(nick: any, target: any, content: any): void;
32
+ role(type: any, nick: any, target: any, role: any, channel: any): void;
33
+ nickChange(nick: any, content: any): void;
34
+ }
@@ -0,0 +1,10 @@
1
+ export class IrcToActivityStreams {
2
+ constructor(cfg: any);
3
+ server: any;
4
+ contexts: any[];
5
+ events: events<[never]>;
6
+ __buffer: {};
7
+ input(payload: any): boolean;
8
+ __processIRCCodes(code: any, server: any, channel: any, pos1: any, pos2: any, pos3: any, content: any, msg: any, incoming: any): void;
9
+ }
10
+ import events from "node:events";
package/dist/index.js CHANGED
@@ -6,19 +6,23 @@ var EVENT_INCOMING = "incoming";
6
6
  var EVENT_ERROR = "error";
7
7
 
8
8
  class ASEmitter {
9
- constructor(events, server) {
9
+ constructor(events, server, contexts) {
10
+ if (!Array.isArray(contexts) || contexts.length === 0) {
11
+ throw new Error("ASEmitter requires a non-empty contexts array from the caller");
12
+ }
10
13
  this.server = server;
11
14
  this.events = events;
15
+ this.contexts = [...contexts];
12
16
  }
13
17
  emitEvent(code, asObject) {
14
18
  if (typeof asObject === "object" && !asObject.published) {
15
- asObject.published = `${Date.now()}`;
19
+ asObject.published = new Date().toISOString();
16
20
  }
17
21
  this.events.emit(code, asObject);
18
22
  }
19
23
  __generalError(nick, content) {
20
24
  return {
21
- context: "irc",
25
+ "@context": this.contexts,
22
26
  type: "update",
23
27
  actor: {
24
28
  type: "person",
@@ -34,7 +38,7 @@ class ASEmitter {
34
38
  }
35
39
  presence(nick, role, channel) {
36
40
  this.emitEvent(EVENT_INCOMING, {
37
- context: "irc",
41
+ "@context": this.contexts,
38
42
  type: "update",
39
43
  actor: {
40
44
  type: "person",
@@ -54,7 +58,7 @@ class ASEmitter {
54
58
  }
55
59
  channelError(channel, nick, content) {
56
60
  this.emitEvent(EVENT_ERROR, {
57
- context: "irc",
61
+ "@context": this.contexts,
58
62
  type: "update",
59
63
  actor: {
60
64
  type: "person",
@@ -72,7 +76,7 @@ class ASEmitter {
72
76
  }
73
77
  notice(nick, content) {
74
78
  this.emitEvent(EVENT_INCOMING, {
75
- context: "irc",
79
+ "@context": this.contexts,
76
80
  type: "send",
77
81
  actor: {
78
82
  type: "service",
@@ -94,7 +98,7 @@ class ASEmitter {
94
98
  }
95
99
  joinError(nick) {
96
100
  this.emitEvent(EVENT_ERROR, {
97
- context: "irc",
101
+ "@context": this.contexts,
98
102
  type: "join",
99
103
  actor: {
100
104
  id: this.server,
@@ -109,7 +113,7 @@ class ASEmitter {
109
113
  }
110
114
  topicChange(channel, nick, content) {
111
115
  this.emitEvent(EVENT_INCOMING, {
112
- context: "irc",
116
+ "@context": this.contexts,
113
117
  type: "update",
114
118
  actor: {
115
119
  type: "person",
@@ -129,7 +133,7 @@ class ASEmitter {
129
133
  }
130
134
  joinRoom(channel, nick) {
131
135
  this.emitEvent(EVENT_INCOMING, {
132
- context: "irc",
136
+ "@context": this.contexts,
133
137
  type: "join",
134
138
  actor: {
135
139
  type: "person",
@@ -145,7 +149,7 @@ class ASEmitter {
145
149
  }
146
150
  userQuit(nick) {
147
151
  this.emitEvent(EVENT_INCOMING, {
148
- context: "irc",
152
+ "@context": this.contexts,
149
153
  type: "leave",
150
154
  actor: {
151
155
  type: "person",
@@ -164,7 +168,7 @@ class ASEmitter {
164
168
  }
165
169
  userPart(channel, nick) {
166
170
  this.emitEvent(EVENT_INCOMING, {
167
- context: "irc",
171
+ "@context": this.contexts,
168
172
  type: "leave",
169
173
  actor: {
170
174
  type: "person",
@@ -193,7 +197,7 @@ class ASEmitter {
193
197
  message = content;
194
198
  }
195
199
  this.emitEvent(EVENT_INCOMING, {
196
- context: "irc",
200
+ "@context": this.contexts,
197
201
  type: "send",
198
202
  actor: {
199
203
  type: "person",
@@ -213,7 +217,7 @@ class ASEmitter {
213
217
  }
214
218
  role(type, nick, target, role, channel) {
215
219
  this.emitEvent(EVENT_INCOMING, {
216
- context: "irc",
220
+ "@context": this.contexts,
217
221
  type,
218
222
  actor: {
219
223
  type: "person",
@@ -242,7 +246,7 @@ class ASEmitter {
242
246
  }
243
247
  nickChange(nick, content) {
244
248
  this.emitEvent(EVENT_INCOMING, {
245
- context: "irc",
249
+ "@context": this.contexts,
246
250
  type: "update",
247
251
  actor: {
248
252
  type: "person",
@@ -314,6 +318,10 @@ class IrcToActivityStreams {
314
318
  constructor(cfg) {
315
319
  const config = cfg || {};
316
320
  this.server = config.server;
321
+ if (!Array.isArray(config.contexts) || config.contexts.length === 0) {
322
+ throw new Error("IrcToActivityStreams requires a non-empty contexts array");
323
+ }
324
+ this.contexts = [...config.contexts];
317
325
  this.events = new events.EventEmitter;
318
326
  this.__buffer = {};
319
327
  this.__buffer[NAMES] = {};
@@ -336,7 +344,7 @@ class IrcToActivityStreams {
336
344
  this.__processIRCCodes(code, server, channel, pos1, pos2, pos3, content, msg, incoming);
337
345
  }
338
346
  __processIRCCodes(code, server, channel, pos1, pos2, pos3, content, msg, incoming) {
339
- const ase = new ASEmitter(this.events, this.server);
347
+ const ase = new ASEmitter(this.events, this.server, this.contexts);
340
348
  let nick;
341
349
  let type;
342
350
  let role;
@@ -384,7 +392,7 @@ class IrcToActivityStreams {
384
392
  case MOTD:
385
393
  if (!this.__buffer[MOTD]) {
386
394
  this.__buffer[MOTD] = {
387
- context: "irc",
395
+ "@context": this.contexts,
388
396
  type: "update",
389
397
  actor: {
390
398
  type: "service",
@@ -441,7 +449,7 @@ class IrcToActivityStreams {
441
449
  break;
442
450
  case TOPIC_IS:
443
451
  this.__buffer[TOPIC_IS] = {
444
- context: "irc",
452
+ "@context": this.contexts,
445
453
  type: "update",
446
454
  actor: undefined,
447
455
  target: {
@@ -455,7 +463,7 @@ class IrcToActivityStreams {
455
463
  }
456
464
  };
457
465
  break;
458
- case TOPIC_SET_BY:
466
+ case TOPIC_SET_BY: {
459
467
  if (!this.__buffer[TOPIC_IS]) {
460
468
  break;
461
469
  }
@@ -465,10 +473,14 @@ class IrcToActivityStreams {
465
473
  id: `${nick}@${this.server}`,
466
474
  name: nick
467
475
  };
468
- this.__buffer[TOPIC_IS].published = msg[0];
476
+ const topicSetEpochSeconds = Number.parseInt(msg[0], 10);
477
+ if (Number.isFinite(topicSetEpochSeconds)) {
478
+ this.__buffer[TOPIC_IS].published = new Date(topicSetEpochSeconds * 1000).toISOString();
479
+ }
469
480
  ase.emitEvent(EVENT_INCOMING2, this.__buffer[TOPIC_IS]);
470
481
  delete this.__buffer[TOPIC_IS];
471
482
  break;
483
+ }
472
484
  case WHO:
473
485
  case WHO_OLD:
474
486
  nick = msg[3].length <= 2 ? msg[2] : msg[3];
@@ -488,4 +500,4 @@ export {
488
500
  IrcToActivityStreams
489
501
  };
490
502
 
491
- //# debugId=5327FF84B5B5443164756E2164756E21
503
+ //# debugId=7A36A45E2CE5F78564756E2164756E21
package/dist/index.js.map CHANGED
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/index.js", "../src/as-emitter.js"],
4
4
  "sourcesContent": [
5
- "import events from \"node:events\";\nimport { ASEmitter } from \"./as-emitter.js\";\n\nconst EVENT_INCOMING = \"incoming\";\n// EVENT_ERROR = 'error',\nconst EVENT_PONG = \"pong\";\nconst EVENT_PING = \"ping\";\nconst EVENT_UNPROCESSED = \"unprocessed\";\n\nconst ERR_BAD_NICK = \"432\";\nconst ERR_CHAN_PRIVS = \"482\";\nconst ERR_NICK_IN_USE = \"433\";\nconst ERR_TEMP_UNAVAIL = \"437\";\nconst ERR_NO_CHANNEL = \"403\";\nconst ERR_NOT_INVITED = \"471\";\nconst ERR_BADMODE = \"472\";\nconst ERR_INVITE_ONLY = \"473\";\nconst ERR_BANNED = \"474\";\nconst ERR_BADKEY = \"475\";\nconst ERR_BADMASK = \"476\";\nconst ERR_NOCHANMODES = \"477\";\nconst ERR_BANLISTFULL = \"478\";\nconst JOIN = \"JOIN\";\nconst MODE = \"MODE\";\nconst MOTD = \"372\";\nconst MOTD_END = \"376\";\nconst NAMES = \"353\";\n// NAMES_END = \"366\",\nconst NICK = \"NICK\";\nconst NOTICE = \"NOTICE\";\nconst PART = \"PART\";\nconst PING = \"PING\";\nconst PONG = \"PONG\";\nconst PRIVMSG = \"PRIVMSG\";\nconst QUIT = \"QUIT\";\nconst TOPIC_CHANGE = \"TOPIC\";\nconst TOPIC_IS = \"332\";\nconst TOPIC_SET_BY = \"333\";\nconst WHO = \"352\";\nconst WHO_OLD = \"354\";\n// WHO_END = \"315\";\n\nconst ROLE = {\n \"@\": \"owner\",\n \"%\": \"admin\",\n \"*\": \"participant\",\n};\n\nconst MODES = {\n o: \"owner\",\n h: \"admin\",\n v: \"participant\",\n};\n\nfunction getNickFromServer(server) {\n return server.split(/^:/)[1].split(\"!\")[0];\n}\n\nexport class IrcToActivityStreams {\n constructor(cfg) {\n const config = cfg || {};\n this.server = config.server;\n this.events = new events.EventEmitter();\n this.__buffer = {};\n this.__buffer[NAMES] = {};\n }\n\n input(payload) {\n if (typeof payload !== \"string\") {\n return false;\n }\n if (payload.length < 3) {\n return false;\n }\n const incoming = payload.trim();\n const [metadata, content] = incoming.split(\" :\");\n const [server, code, pos1, pos2, pos3, ...msg] = metadata.split(\" \");\n const channel =\n typeof pos1 === \"string\" && pos1.startsWith(\"#\")\n ? pos1\n : typeof pos2 === \"string\" && pos2.startsWith(\"#\")\n ? pos2\n : typeof pos3 === \"string\" && pos3.startsWith(\"#\")\n ? pos3\n : undefined;\n if (metadata === PING) {\n this.events.emit(EVENT_PING, `${Date.now()}`);\n return true;\n }\n this.__processIRCCodes(\n code,\n server,\n channel,\n pos1,\n pos2,\n pos3,\n content,\n msg,\n incoming,\n );\n }\n\n __processIRCCodes(\n code,\n server,\n channel,\n pos1,\n pos2,\n pos3,\n content,\n msg,\n incoming,\n ) {\n const ase = new ASEmitter(this.events, this.server);\n let nick;\n let type;\n let role;\n\n switch (code) {\n /** */\n case ERR_CHAN_PRIVS:\n case ERR_NOT_INVITED:\n case ERR_BADMODE:\n case ERR_INVITE_ONLY:\n case ERR_BANNED:\n case ERR_BADKEY:\n case ERR_BADMASK:\n case ERR_NOCHANMODES:\n case ERR_BANLISTFULL:\n ase.channelError(channel, pos1, content);\n break;\n\n /** */\n case ERR_NICK_IN_USE: // nick conflict\n case ERR_BAD_NICK:\n ase.serviceError(pos2, content);\n break;\n\n /** */\n case ERR_NO_CHANNEL: // no such channel\n ase.joinError(pos2);\n break;\n\n /** */\n case ERR_TEMP_UNAVAIL: // nick conflict\n ase.nickError(pos2, content);\n break;\n\n /** */\n case JOIN: // room join\n ase.joinRoom(channel, getNickFromServer(server));\n break;\n\n // custom event indicating a channel mode has been updated, used to re-query user or channel\n case MODE: {\n const user_mode = pos2 || content;\n if (!channel) {\n break;\n } // don't handle cases with no channel defined\n if (!pos3) {\n break;\n } // we need target user\n role = MODES[user_mode[1]] || \"member\";\n type = \"add\";\n if (user_mode[0] === \"-\") {\n type = \"remove\";\n }\n ase.role(type, getNickFromServer(server), pos3, role, channel);\n break;\n }\n\n /** */\n case MOTD: // MOTD\n if (!this.__buffer[MOTD]) {\n this.__buffer[MOTD] = {\n context: \"irc\",\n type: \"update\",\n actor: {\n type: \"service\",\n id: this.server,\n name: this.server,\n },\n object: {\n type: \"topic\",\n content: content,\n },\n };\n } else {\n this.__buffer[MOTD].object.content += ` ${content}`;\n }\n break;\n case MOTD_END: // end of MOTD\n if (!this.__buffer[MOTD]) {\n break;\n }\n ase.emitEvent(EVENT_INCOMING, this.__buffer[MOTD]);\n delete this.__buffer[MOTD];\n break;\n\n /** */\n case NAMES: // user list\n for (const entry of content.split(\" \")) {\n role = \"member\";\n let username = entry;\n if (ROLE[entry[0]]) {\n username = entry.substr(1);\n role = ROLE[entry[0]];\n }\n ase.presence(username, role, channel);\n }\n break;\n\n /** */\n case NICK: // nick change\n // log(`- 2 nick: ${nick} from content: ${content}`);\n ase.nickChange(getNickFromServer(server), content);\n break;\n\n /** */\n case NOTICE: // notice\n ase.notice(pos1, content);\n break;\n\n /** */\n case PART: // leaving\n ase.userPart(channel, getNickFromServer(server));\n break;\n\n /** */\n case PONG: // ping response received\n this.events.emit(EVENT_PONG, `${Date.now()}`);\n break;\n\n /** */\n case PRIVMSG: // msg\n ase.privMsg(getNickFromServer(server), pos1, content);\n break;\n\n /** */\n case QUIT: // quit user\n ase.userQuit(getNickFromServer(server));\n break;\n\n /** */\n case TOPIC_CHANGE: // topic changed now\n ase.topicChange(channel, getNickFromServer(server), content);\n break;\n\n /** */\n case TOPIC_IS: // topic currently set to\n this.__buffer[TOPIC_IS] = {\n context: \"irc\",\n type: \"update\",\n actor: undefined,\n target: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n name: channel,\n },\n object: {\n type: \"topic\",\n content: content,\n },\n };\n break;\n case TOPIC_SET_BY: // current topic set by\n if (!this.__buffer[TOPIC_IS]) {\n break;\n }\n nick = pos3.split(\"!\")[0];\n this.__buffer[TOPIC_IS].actor = {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n };\n this.__buffer[TOPIC_IS].published = msg[0];\n ase.emitEvent(EVENT_INCOMING, this.__buffer[TOPIC_IS]);\n delete this.__buffer[TOPIC_IS];\n break;\n\n /** */\n case WHO:\n case WHO_OLD:\n nick = msg[3].length <= 2 ? msg[2] : msg[3];\n if (nick === \"undefined\") {\n break;\n }\n role = MODES[pos2[1]] || \"member\";\n ase.presence(nick, role, channel);\n break;\n\n /** */\n default:\n this.events.emit(EVENT_UNPROCESSED, incoming);\n break;\n }\n }\n}\n",
6
- "const EVENT_INCOMING = \"incoming\";\nconst EVENT_ERROR = \"error\";\n\nexport class ASEmitter {\n constructor(events, server) {\n this.server = server;\n this.events = events;\n }\n\n emitEvent(code, asObject) {\n if (typeof asObject === \"object\" && !asObject.published) {\n asObject.published = `${Date.now()}`;\n }\n this.events.emit(code, asObject);\n }\n\n __generalError(nick, content) {\n return {\n context: \"irc\",\n type: \"update\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"service\",\n id: this.server,\n },\n error: content,\n };\n }\n\n presence(nick, role, channel) {\n this.emitEvent(EVENT_INCOMING, {\n context: \"irc\",\n type: \"update\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n name: channel,\n },\n object: {\n type: \"presence\",\n role: role,\n },\n });\n }\n\n channelError(channel, nick, content) {\n this.emitEvent(EVENT_ERROR, {\n context: \"irc\",\n type: \"update\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n },\n target: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n },\n error: content,\n });\n }\n\n nickError(nick, content) {\n this.emitEvent(EVENT_ERROR, this.__generalError(nick, content));\n }\n\n notice(nick, content) {\n this.emitEvent(EVENT_INCOMING, {\n context: \"irc\",\n type: \"send\",\n actor: {\n type: \"service\",\n id: this.server,\n },\n object: {\n type: \"message\",\n content: content,\n },\n target: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n });\n }\n\n serviceError(nick, content) {\n this.emitEvent(EVENT_ERROR, this.__generalError(nick, content));\n }\n\n joinError(nick) {\n this.emitEvent(EVENT_ERROR, {\n context: \"irc\",\n type: \"join\",\n actor: {\n id: this.server,\n type: \"service\",\n },\n error: `no such channel ${nick}`,\n target: {\n id: `${nick}@${this.server}`,\n type: \"person\",\n },\n });\n }\n\n topicChange(channel, nick, content) {\n this.emitEvent(EVENT_INCOMING, {\n context: \"irc\",\n type: \"update\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n name: channel,\n },\n object: {\n type: \"topic\",\n content: content,\n },\n });\n }\n\n joinRoom(channel, nick) {\n this.emitEvent(EVENT_INCOMING, {\n context: \"irc\",\n type: \"join\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n name: channel,\n },\n });\n }\n\n userQuit(nick) {\n this.emitEvent(EVENT_INCOMING, {\n context: \"irc\",\n type: \"leave\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"service\",\n id: this.server,\n },\n object: {\n type: \"message\",\n content: \"user has quit\",\n },\n });\n }\n\n userPart(channel, nick) {\n this.emitEvent(EVENT_INCOMING, {\n context: \"irc\",\n type: \"leave\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n name: channel,\n },\n object: {\n type: \"message\",\n content: \"user has left the channel\",\n },\n });\n }\n\n privMsg(nick, target, content) {\n let type;\n let message;\n if (content.startsWith(\"+\\u0001ACTION \")) {\n type = \"me\";\n message = content\n // biome-ignore lint/suspicious/noControlCharactersInRegex: <explanation>\n .split(/^\\+\\u0001ACTION\\s+/)[1]\n // biome-ignore lint/suspicious/noControlCharactersInRegex: <explanation>\n .split(/\\u0001$/)[0];\n } else {\n type = \"message\";\n message = content;\n }\n this.emitEvent(EVENT_INCOMING, {\n context: \"irc\",\n type: \"send\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: target.startsWith(\"#\") ? \"room\" : \"person\",\n id: `${this.server}/${target}`,\n name: target,\n },\n object: {\n type: type,\n content: message,\n },\n });\n }\n\n role(type, nick, target, role, channel) {\n this.emitEvent(EVENT_INCOMING, {\n context: \"irc\",\n type: type,\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"person\",\n id: `${target}@${this.server}`,\n name: target,\n },\n object: {\n type: \"relationship\",\n relationship: \"role\",\n subject: {\n type: \"presence\",\n role: role,\n },\n object: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n name: channel,\n },\n },\n });\n }\n\n nickChange(nick, content) {\n this.emitEvent(EVENT_INCOMING, {\n context: \"irc\",\n type: \"update\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"person\",\n id: `${content}@${this.server}`,\n name: content,\n },\n object: {\n type: \"address\",\n },\n });\n }\n}\n"
5
+ "import events from \"node:events\";\nimport { ASEmitter } from \"./as-emitter.js\";\n\nconst EVENT_INCOMING = \"incoming\";\n// EVENT_ERROR = 'error',\nconst EVENT_PONG = \"pong\";\nconst EVENT_PING = \"ping\";\nconst EVENT_UNPROCESSED = \"unprocessed\";\n\nconst ERR_BAD_NICK = \"432\";\nconst ERR_CHAN_PRIVS = \"482\";\nconst ERR_NICK_IN_USE = \"433\";\nconst ERR_TEMP_UNAVAIL = \"437\";\nconst ERR_NO_CHANNEL = \"403\";\nconst ERR_NOT_INVITED = \"471\";\nconst ERR_BADMODE = \"472\";\nconst ERR_INVITE_ONLY = \"473\";\nconst ERR_BANNED = \"474\";\nconst ERR_BADKEY = \"475\";\nconst ERR_BADMASK = \"476\";\nconst ERR_NOCHANMODES = \"477\";\nconst ERR_BANLISTFULL = \"478\";\nconst JOIN = \"JOIN\";\nconst MODE = \"MODE\";\nconst MOTD = \"372\";\nconst MOTD_END = \"376\";\nconst NAMES = \"353\";\n// NAMES_END = \"366\",\nconst NICK = \"NICK\";\nconst NOTICE = \"NOTICE\";\nconst PART = \"PART\";\nconst PING = \"PING\";\nconst PONG = \"PONG\";\nconst PRIVMSG = \"PRIVMSG\";\nconst QUIT = \"QUIT\";\nconst TOPIC_CHANGE = \"TOPIC\";\nconst TOPIC_IS = \"332\";\nconst TOPIC_SET_BY = \"333\";\nconst WHO = \"352\";\nconst WHO_OLD = \"354\";\n// WHO_END = \"315\";\n\nconst ROLE = {\n \"@\": \"owner\",\n \"%\": \"admin\",\n \"*\": \"participant\",\n};\n\nconst MODES = {\n o: \"owner\",\n h: \"admin\",\n v: \"participant\",\n};\n\nfunction getNickFromServer(server) {\n return server.split(/^:/)[1].split(\"!\")[0];\n}\n\nexport class IrcToActivityStreams {\n constructor(cfg) {\n const config = cfg || {};\n this.server = config.server;\n if (!Array.isArray(config.contexts) || config.contexts.length === 0) {\n throw new Error(\n \"IrcToActivityStreams requires a non-empty contexts array\",\n );\n }\n this.contexts = [...config.contexts];\n this.events = new events.EventEmitter();\n this.__buffer = {};\n this.__buffer[NAMES] = {};\n }\n\n input(payload) {\n if (typeof payload !== \"string\") {\n return false;\n }\n if (payload.length < 3) {\n return false;\n }\n const incoming = payload.trim();\n const [metadata, content] = incoming.split(\" :\");\n const [server, code, pos1, pos2, pos3, ...msg] = metadata.split(\" \");\n const channel =\n typeof pos1 === \"string\" && pos1.startsWith(\"#\")\n ? pos1\n : typeof pos2 === \"string\" && pos2.startsWith(\"#\")\n ? pos2\n : typeof pos3 === \"string\" && pos3.startsWith(\"#\")\n ? pos3\n : undefined;\n if (metadata === PING) {\n this.events.emit(EVENT_PING, `${Date.now()}`);\n return true;\n }\n this.__processIRCCodes(\n code,\n server,\n channel,\n pos1,\n pos2,\n pos3,\n content,\n msg,\n incoming,\n );\n }\n\n __processIRCCodes(\n code,\n server,\n channel,\n pos1,\n pos2,\n pos3,\n content,\n msg,\n incoming,\n ) {\n const ase = new ASEmitter(this.events, this.server, this.contexts);\n let nick;\n let type;\n let role;\n\n switch (code) {\n /** */\n case ERR_CHAN_PRIVS:\n case ERR_NOT_INVITED:\n case ERR_BADMODE:\n case ERR_INVITE_ONLY:\n case ERR_BANNED:\n case ERR_BADKEY:\n case ERR_BADMASK:\n case ERR_NOCHANMODES:\n case ERR_BANLISTFULL:\n ase.channelError(channel, pos1, content);\n break;\n\n /** */\n case ERR_NICK_IN_USE: // nick conflict\n case ERR_BAD_NICK:\n ase.serviceError(pos2, content);\n break;\n\n /** */\n case ERR_NO_CHANNEL: // no such channel\n ase.joinError(pos2);\n break;\n\n /** */\n case ERR_TEMP_UNAVAIL: // nick conflict\n ase.nickError(pos2, content);\n break;\n\n /** */\n case JOIN: // room join\n ase.joinRoom(channel, getNickFromServer(server));\n break;\n\n // custom event indicating a channel mode has been updated, used to re-query user or channel\n case MODE: {\n const user_mode = pos2 || content;\n if (!channel) {\n break;\n } // don't handle cases with no channel defined\n if (!pos3) {\n break;\n } // we need target user\n role = MODES[user_mode[1]] || \"member\";\n type = \"add\";\n if (user_mode[0] === \"-\") {\n type = \"remove\";\n }\n ase.role(type, getNickFromServer(server), pos3, role, channel);\n break;\n }\n\n /** */\n case MOTD: // MOTD\n if (!this.__buffer[MOTD]) {\n this.__buffer[MOTD] = {\n \"@context\": this.contexts,\n type: \"update\",\n actor: {\n type: \"service\",\n id: this.server,\n name: this.server,\n },\n object: {\n type: \"topic\",\n content: content,\n },\n };\n } else {\n this.__buffer[MOTD].object.content += ` ${content}`;\n }\n break;\n case MOTD_END: // end of MOTD\n if (!this.__buffer[MOTD]) {\n break;\n }\n ase.emitEvent(EVENT_INCOMING, this.__buffer[MOTD]);\n delete this.__buffer[MOTD];\n break;\n\n /** */\n case NAMES: // user list\n for (const entry of content.split(\" \")) {\n role = \"member\";\n let username = entry;\n if (ROLE[entry[0]]) {\n username = entry.substr(1);\n role = ROLE[entry[0]];\n }\n ase.presence(username, role, channel);\n }\n break;\n\n /** */\n case NICK: // nick change\n // log(`- 2 nick: ${nick} from content: ${content}`);\n ase.nickChange(getNickFromServer(server), content);\n break;\n\n /** */\n case NOTICE: // notice\n ase.notice(pos1, content);\n break;\n\n /** */\n case PART: // leaving\n ase.userPart(channel, getNickFromServer(server));\n break;\n\n /** */\n case PONG: // ping response received\n this.events.emit(EVENT_PONG, `${Date.now()}`);\n break;\n\n /** */\n case PRIVMSG: // msg\n ase.privMsg(getNickFromServer(server), pos1, content);\n break;\n\n /** */\n case QUIT: // quit user\n ase.userQuit(getNickFromServer(server));\n break;\n\n /** */\n case TOPIC_CHANGE: // topic changed now\n ase.topicChange(channel, getNickFromServer(server), content);\n break;\n\n /** */\n case TOPIC_IS: // topic currently set to\n this.__buffer[TOPIC_IS] = {\n \"@context\": this.contexts,\n type: \"update\",\n actor: undefined,\n target: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n name: channel,\n },\n object: {\n type: \"topic\",\n content: content,\n },\n };\n break;\n case TOPIC_SET_BY: {\n // current topic set by\n if (!this.__buffer[TOPIC_IS]) {\n break;\n }\n nick = pos3.split(\"!\")[0];\n this.__buffer[TOPIC_IS].actor = {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n };\n // IRC RPL_TOPICWHOTIME (333) timestamp is Unix epoch seconds; normalize when valid\n const topicSetEpochSeconds = Number.parseInt(msg[0], 10);\n if (Number.isFinite(topicSetEpochSeconds)) {\n this.__buffer[TOPIC_IS].published = new Date(\n topicSetEpochSeconds * 1000,\n ).toISOString();\n }\n ase.emitEvent(EVENT_INCOMING, this.__buffer[TOPIC_IS]);\n delete this.__buffer[TOPIC_IS];\n break;\n }\n\n /** */\n case WHO:\n case WHO_OLD:\n nick = msg[3].length <= 2 ? msg[2] : msg[3];\n if (nick === \"undefined\") {\n break;\n }\n role = MODES[pos2[1]] || \"member\";\n ase.presence(nick, role, channel);\n break;\n\n /** */\n default:\n this.events.emit(EVENT_UNPROCESSED, incoming);\n break;\n }\n }\n}\n",
6
+ "const EVENT_INCOMING = \"incoming\";\nconst EVENT_ERROR = \"error\";\n\nexport class ASEmitter {\n constructor(events, server, contexts) {\n if (!Array.isArray(contexts) || contexts.length === 0) {\n throw new Error(\n \"ASEmitter requires a non-empty contexts array from the caller\",\n );\n }\n this.server = server;\n this.events = events;\n this.contexts = [...contexts];\n }\n\n emitEvent(code, asObject) {\n if (typeof asObject === \"object\" && !asObject.published) {\n asObject.published = new Date().toISOString();\n }\n this.events.emit(code, asObject);\n }\n\n __generalError(nick, content) {\n return {\n \"@context\": this.contexts,\n type: \"update\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"service\",\n id: this.server,\n },\n error: content,\n };\n }\n\n presence(nick, role, channel) {\n this.emitEvent(EVENT_INCOMING, {\n \"@context\": this.contexts,\n type: \"update\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n name: channel,\n },\n object: {\n type: \"presence\",\n role: role,\n },\n });\n }\n\n channelError(channel, nick, content) {\n this.emitEvent(EVENT_ERROR, {\n \"@context\": this.contexts,\n type: \"update\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n },\n target: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n },\n error: content,\n });\n }\n\n nickError(nick, content) {\n this.emitEvent(EVENT_ERROR, this.__generalError(nick, content));\n }\n\n notice(nick, content) {\n this.emitEvent(EVENT_INCOMING, {\n \"@context\": this.contexts,\n type: \"send\",\n actor: {\n type: \"service\",\n id: this.server,\n },\n object: {\n type: \"message\",\n content: content,\n },\n target: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n });\n }\n\n serviceError(nick, content) {\n this.emitEvent(EVENT_ERROR, this.__generalError(nick, content));\n }\n\n joinError(nick) {\n this.emitEvent(EVENT_ERROR, {\n \"@context\": this.contexts,\n type: \"join\",\n actor: {\n id: this.server,\n type: \"service\",\n },\n error: `no such channel ${nick}`,\n target: {\n id: `${nick}@${this.server}`,\n type: \"person\",\n },\n });\n }\n\n topicChange(channel, nick, content) {\n this.emitEvent(EVENT_INCOMING, {\n \"@context\": this.contexts,\n type: \"update\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n name: channel,\n },\n object: {\n type: \"topic\",\n content: content,\n },\n });\n }\n\n joinRoom(channel, nick) {\n this.emitEvent(EVENT_INCOMING, {\n \"@context\": this.contexts,\n type: \"join\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n name: channel,\n },\n });\n }\n\n userQuit(nick) {\n this.emitEvent(EVENT_INCOMING, {\n \"@context\": this.contexts,\n type: \"leave\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"service\",\n id: this.server,\n },\n object: {\n type: \"message\",\n content: \"user has quit\",\n },\n });\n }\n\n userPart(channel, nick) {\n this.emitEvent(EVENT_INCOMING, {\n \"@context\": this.contexts,\n type: \"leave\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n name: channel,\n },\n object: {\n type: \"message\",\n content: \"user has left the channel\",\n },\n });\n }\n\n privMsg(nick, target, content) {\n let type;\n let message;\n if (content.startsWith(\"+\\u0001ACTION \")) {\n type = \"me\";\n message = content\n // biome-ignore lint/suspicious/noControlCharactersInRegex: IRC ACTION framing uses control chars\n .split(/^\\+\\u0001ACTION\\s+/)[1]\n // biome-ignore lint/suspicious/noControlCharactersInRegex: IRC ACTION framing uses control chars\n .split(/\\u0001$/)[0];\n } else {\n type = \"message\";\n message = content;\n }\n this.emitEvent(EVENT_INCOMING, {\n \"@context\": this.contexts,\n type: \"send\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: target.startsWith(\"#\") ? \"room\" : \"person\",\n id: `${this.server}/${target}`,\n name: target,\n },\n object: {\n type: type,\n content: message,\n },\n });\n }\n\n role(type, nick, target, role, channel) {\n this.emitEvent(EVENT_INCOMING, {\n \"@context\": this.contexts,\n type: type,\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"person\",\n id: `${target}@${this.server}`,\n name: target,\n },\n object: {\n type: \"relationship\",\n relationship: \"role\",\n subject: {\n type: \"presence\",\n role: role,\n },\n object: {\n type: \"room\",\n id: `${this.server}/${channel}`,\n name: channel,\n },\n },\n });\n }\n\n nickChange(nick, content) {\n this.emitEvent(EVENT_INCOMING, {\n \"@context\": this.contexts,\n type: \"update\",\n actor: {\n type: \"person\",\n id: `${nick}@${this.server}`,\n name: nick,\n },\n target: {\n type: \"person\",\n id: `${content}@${this.server}`,\n name: content,\n },\n object: {\n type: \"address\",\n },\n });\n }\n}\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "5327FF84B5B5443164756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "7A36A45E2CE5F78564756E2164756E21",
10
10
  "names": []
11
11
  }
package/package.json CHANGED
@@ -1,22 +1,21 @@
1
1
  {
2
2
  "name": "@sockethub/irc2as",
3
- "version": "4.0.0-alpha.11",
3
+ "version": "4.0.0-alpha.13",
4
4
  "description": "IRC to ActivityStreams objects",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "exports": {
8
8
  ".": {
9
- "bun": "./src/index.js",
9
+ "types": "./dist/index.d.ts",
10
10
  "import": "./dist/index.js",
11
11
  "default": "./dist/index.js"
12
12
  }
13
13
  },
14
14
  "files": [
15
- "src/",
16
15
  "dist/"
17
16
  ],
18
17
  "engines": {
19
- "bun": ">=1.2"
18
+ "node": ">=20"
20
19
  },
21
20
  "repository": {
22
21
  "type": "git",
@@ -46,7 +45,8 @@
46
45
  "fast-deep-equal": "^3.1.3"
47
46
  },
48
47
  "devDependencies": {
49
- "@sockethub/schemas": "^3.0.0-alpha.11"
48
+ "@sockethub/schemas": "^3.0.0-alpha.13"
50
49
  },
51
- "gitHead": "c243fa9e76c688ce5ffcf524400b1dd27dcce615"
50
+ "gitHead": "864733e5b34449ef39542eceb4ff11aa308081bc",
51
+ "types": "./dist/index.d.ts"
52
52
  }