@omujs/chat 0.2.0 → 0.3.4
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/CHANGELOG.md +54 -0
- package/built/dts/chat.d.ts +7 -1
- package/built/dts/chat.d.ts.map +1 -1
- package/built/dts/event/event-types.d.ts +10 -0
- package/built/dts/event/event-types.d.ts.map +1 -0
- package/built/dts/event/event.d.ts +32 -24
- package/built/dts/event/event.d.ts.map +1 -1
- package/built/dts/event/index.d.ts +2 -2
- package/built/dts/event/index.d.ts.map +1 -1
- package/built/dts/index.d.ts +1 -0
- package/built/dts/index.d.ts.map +1 -1
- package/built/dts/models/content.d.ts +9 -0
- package/built/dts/models/content.d.ts.map +1 -1
- package/built/dts/models/index.d.ts +2 -0
- package/built/dts/models/index.d.ts.map +1 -1
- package/built/dts/models/reaction.d.ts +23 -0
- package/built/dts/models/reaction.d.ts.map +1 -0
- package/built/dts/models/room.d.ts +5 -3
- package/built/dts/models/room.d.ts.map +1 -1
- package/built/dts/models/vote.d.ts +36 -0
- package/built/dts/models/vote.d.ts.map +1 -0
- package/built/dts/permissions.d.ts +1 -0
- package/built/dts/permissions.d.ts.map +1 -1
- package/built/esm/chat.js +26 -1
- package/built/esm/chat.js.map +1 -1
- package/built/esm/event/event-types.js +10 -0
- package/built/esm/event/event-types.js.map +1 -0
- package/built/esm/event/event.js +68 -34
- package/built/esm/event/event.js.map +1 -1
- package/built/esm/event/index.js +2 -2
- package/built/esm/event/index.js.map +1 -1
- package/built/esm/index.js +1 -0
- package/built/esm/index.js.map +1 -1
- package/built/esm/models/content.js +19 -5
- package/built/esm/models/content.js.map +1 -1
- package/built/esm/models/index.js +2 -0
- package/built/esm/models/index.js.map +1 -1
- package/built/esm/models/reaction.js +22 -0
- package/built/esm/models/reaction.js.map +1 -0
- package/built/esm/models/room.js.map +1 -1
- package/built/esm/models/vote.js +41 -0
- package/built/esm/models/vote.js.map +1 -0
- package/built/esm/permissions.js +1 -0
- package/built/esm/permissions.js.map +1 -1
- package/package.json +50 -51
- package/src/chat.ts +35 -7
- package/src/event/event-types.ts +10 -0
- package/src/event/event.ts +96 -0
- package/src/event/index.ts +2 -0
- package/src/index.ts +1 -0
- package/src/models/content.ts +27 -8
- package/src/models/index.ts +2 -1
- package/src/models/reaction.ts +40 -0
- package/src/models/room.ts +5 -3
- package/src/models/vote.ts +69 -0
- package/src/permissions.ts +1 -0
- package/built/dts/client.d.ts +0 -24
- package/built/dts/client.d.ts.map +0 -1
- package/built/dts/event/event-registry.d.ts +0 -12
- package/built/dts/event/event-registry.d.ts.map +0 -1
- package/built/esm/client.js +0 -44
- package/built/esm/client.js.map +0 -1
- package/built/esm/event/event-registry.js +0 -35
- package/built/esm/event/event-registry.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/event/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/event/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,aAAa,EAAe,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC"}
|
package/built/esm/index.js
CHANGED
package/built/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Identifier } from '@omujs/omu';
|
|
1
2
|
export class Component {
|
|
2
3
|
type;
|
|
3
4
|
constructor(type) {
|
|
@@ -121,6 +122,18 @@ export class Image extends Component {
|
|
|
121
122
|
return new Image(url, id, name);
|
|
122
123
|
}
|
|
123
124
|
}
|
|
125
|
+
export class Asset extends Component {
|
|
126
|
+
id;
|
|
127
|
+
constructor(id) {
|
|
128
|
+
super('asset');
|
|
129
|
+
this.id = id;
|
|
130
|
+
}
|
|
131
|
+
toJson() {
|
|
132
|
+
return {
|
|
133
|
+
id: this.id.key(),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
124
137
|
export class Link extends Component {
|
|
125
138
|
url;
|
|
126
139
|
children;
|
|
@@ -146,9 +159,10 @@ export class System extends Component {
|
|
|
146
159
|
return this.children.map(serialize);
|
|
147
160
|
}
|
|
148
161
|
}
|
|
149
|
-
register('root', (
|
|
150
|
-
register('text', (
|
|
151
|
-
register('image', (
|
|
152
|
-
register('
|
|
153
|
-
register('
|
|
162
|
+
register('root', (data) => new Root(data.map(deserialize)));
|
|
163
|
+
register('text', (data) => new Text(data));
|
|
164
|
+
register('image', (data) => new Image(data.url, data.id, data.name));
|
|
165
|
+
register('asset', (data) => new Asset(Identifier.fromKey(data.id)));
|
|
166
|
+
register('link', (data) => new Link(data.url, data.children.map(deserialize)));
|
|
167
|
+
register('system', (data) => new System(data.map(deserialize)));
|
|
154
168
|
//# sourceMappingURL=content.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/models/content.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/models/content.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,9 @@ export * as content from './content.js';
|
|
|
4
4
|
export { Gift } from './gift.js';
|
|
5
5
|
export { Message } from './message.js';
|
|
6
6
|
export { Paid } from './paid.js';
|
|
7
|
+
export { Reaction } from './reaction.js';
|
|
7
8
|
export { Provider } from './provider.js';
|
|
8
9
|
export { Role } from './role.js';
|
|
9
10
|
export { Room } from './room.js';
|
|
11
|
+
export { Vote } from './vote.js';
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAU,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Identifier } from '@omujs/omu';
|
|
2
|
+
export class Reaction {
|
|
3
|
+
roomId;
|
|
4
|
+
reactions;
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.roomId = options.roomId;
|
|
7
|
+
this.reactions = options.reactions;
|
|
8
|
+
}
|
|
9
|
+
static fromJson(data) {
|
|
10
|
+
return new Reaction({
|
|
11
|
+
roomId: Identifier.fromKey(data.room_id),
|
|
12
|
+
reactions: data.reactions,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
toJson() {
|
|
16
|
+
return {
|
|
17
|
+
room_id: this.roomId.key(),
|
|
18
|
+
reactions: this.reactions,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=reaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reaction.js","sourceRoot":"","sources":["../../../src/models/reaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAUxC,MAAM,OAAO,QAAQ;IACV,MAAM,CAAa;IACnB,SAAS,CAEd;IAEF,YAAY,OAKX;QACG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAkB;QAC9B,OAAO,IAAI,QAAQ,CAAC;YAChB,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YACxC,SAAS,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC,CAAC;IACP,CAAC;IAED,MAAM;QACF,OAAO;YACH,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room.js","sourceRoot":"","sources":["../../../src/models/room.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"room.js","sourceRoot":"","sources":["../../../src/models/room.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AA6BtD,MAAM,OAAO,IAAI;IACN,EAAE,CAAa;IACf,UAAU,CAAa;IACvB,SAAS,CAAU;IACnB,MAAM,CAAS;IACf,QAAQ,CAAe;IACvB,SAAS,CAAU;IACnB,SAAS,CAAO;IAEvB,YAAY,OAQX;QACG,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,OAAiB;QAC7B,OAAO,IAAI,IAAI,CAAC;YACZ,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;YACnD,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,UAAU;YAC7B,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;SAC1C,CAAC,CAAC;IACP,CAAC;IAED,MAAM;QACF,OAAO;YACH,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACjB,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;YAClC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;SAC3C,CAAC;IACN,CAAC;IAED,GAAG;QACC,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IACzB,CAAC;CACJ"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Identifier } from '@omujs/omu';
|
|
2
|
+
export class Vote {
|
|
3
|
+
id;
|
|
4
|
+
roomId;
|
|
5
|
+
title;
|
|
6
|
+
choices;
|
|
7
|
+
ended;
|
|
8
|
+
total;
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.id = options.id;
|
|
11
|
+
this.roomId = options.roomId;
|
|
12
|
+
this.title = options.title;
|
|
13
|
+
this.choices = options.choices;
|
|
14
|
+
this.ended = options.ended;
|
|
15
|
+
this.total = options.total;
|
|
16
|
+
}
|
|
17
|
+
static fromJson(options) {
|
|
18
|
+
return new Vote({
|
|
19
|
+
id: Identifier.fromKey(options.id),
|
|
20
|
+
roomId: Identifier.fromKey(options.room_id),
|
|
21
|
+
title: options.title,
|
|
22
|
+
choices: options.choices,
|
|
23
|
+
ended: options.ended,
|
|
24
|
+
total: options.total,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
toJson() {
|
|
28
|
+
return {
|
|
29
|
+
id: this.id.key(),
|
|
30
|
+
room_id: this.roomId.key(),
|
|
31
|
+
title: this.title,
|
|
32
|
+
choices: this.choices,
|
|
33
|
+
ended: this.ended,
|
|
34
|
+
total: this.total,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
key() {
|
|
38
|
+
return this.id.key();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=vote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vote.js","sourceRoot":"","sources":["../../../src/models/vote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAmBxC,MAAM,OAAO,IAAI;IACG,EAAE,CAAa;IACf,MAAM,CAAa;IAC5B,KAAK,CAAS;IACd,OAAO,CAAW;IAClB,KAAK,CAAU;IACf,KAAK,CAAgB;IAE5B,YAAY,OAOX;QACG,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/B,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,OAAiB;QACpC,OAAO,IAAI,IAAI,CAAC;YACZ,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;YAC3C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;SACvB,CAAC,CAAC;IACP,CAAC;IAEM,MAAM;QACT,OAAO;YACH,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACjB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YAC1B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;SACpB,CAAC;IACN,CAAC;IAEM,GAAG;QACN,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IACzB,CAAC;CACJ"}
|
package/built/esm/permissions.js
CHANGED
|
@@ -4,4 +4,5 @@ export const CHAT_READ_PERMISSION_ID = IDENTIFIER.join('chat', 'read');
|
|
|
4
4
|
export const CHAT_WRITE_PERMISSION_ID = IDENTIFIER.join('chat', 'write');
|
|
5
5
|
export const CHAT_SEND_PERMISSION_ID = IDENTIFIER.join('chat', 'send');
|
|
6
6
|
export const CHAT_CHANNEL_TREE_PERMISSION_ID = IDENTIFIER.join('create_channel_tree');
|
|
7
|
+
export const CHAT_REACTION_PERMISSION_ID = CHAT_PERMISSION_ID.join('reaction');
|
|
7
8
|
//# sourceMappingURL=permissions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAC7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,+BAA+B,GAAG,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAC7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,+BAA+B,GAAG,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACtF,MAAM,CAAC,MAAM,2BAA2B,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,53 +1,52 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
"type": "module",
|
|
3
|
+
"name": "@omujs/chat",
|
|
4
|
+
"version": "0.3.4",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/OMUAPPS/omuapps"
|
|
8
|
+
},
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./built/esm/index.js",
|
|
12
|
+
"types": "./built/dts/index.d.ts"
|
|
8
13
|
},
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
},
|
|
49
|
-
"dependencies": {
|
|
50
|
-
"@omujs/omu": "0.2.0"
|
|
51
|
-
},
|
|
52
|
-
"gitHead": "84fd2650daebec4c87b69cc4b604069d695be4a3"
|
|
53
|
-
}
|
|
14
|
+
"./*": {
|
|
15
|
+
"import": "./built/esm/*",
|
|
16
|
+
"types": "./built/dts/*"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@types/node": "^20.13.0",
|
|
21
|
+
"@types/websocket": "1.0.10",
|
|
22
|
+
"@types/ws": "8.5.10",
|
|
23
|
+
"@typescript-eslint/eslint-plugin": "^7.11.0",
|
|
24
|
+
"@typescript-eslint/parser": "^7.11.0",
|
|
25
|
+
"eslint": "^8.57.0",
|
|
26
|
+
"eslint-config-prettier": "^9.1.0",
|
|
27
|
+
"eslint-plugin-import": "^2.29.1",
|
|
28
|
+
"eslint-plugin-prettier": "^5.1.3",
|
|
29
|
+
"eslint-plugin-svelte": "^2.39.0",
|
|
30
|
+
"eslint-plugin-unused-imports": "^3.2.0",
|
|
31
|
+
"nodemon": "^3.1.2",
|
|
32
|
+
"ts-node": "10.9.2",
|
|
33
|
+
"typescript": "^5.4.5",
|
|
34
|
+
"websocket": "1.0.35",
|
|
35
|
+
"ws": "8.17.0",
|
|
36
|
+
"@omujs/omu": "0.3.4"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@omujs/omu": "0.3.4"
|
|
40
|
+
},
|
|
41
|
+
"gitHead": "04559d5aec52117d707e0d554ee429b858da522a",
|
|
42
|
+
"scripts": {
|
|
43
|
+
"ts": "pnpm run ts-esm && pnpm run ts-dts",
|
|
44
|
+
"ts-esm": "tsc --outDir built/esm",
|
|
45
|
+
"ts-dts": "tsc --outDir built/dts --declaration true --emitDeclarationOnly true --declarationMap true",
|
|
46
|
+
"watch": "nodemon -w src -e ts,json --exec \"pnpm run ts\"",
|
|
47
|
+
"dev": "pnpm run watch",
|
|
48
|
+
"build": "pnpm run ts",
|
|
49
|
+
"lint": "eslint . --ext .js,.ts",
|
|
50
|
+
"format": "eslint . --ext .js,.ts --fix"
|
|
51
|
+
}
|
|
52
|
+
}
|
package/src/chat.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import type { Client } from '@omujs/omu/client.js';
|
|
2
2
|
import { EndpointType } from '@omujs/omu/extension/endpoint/endpoint.js';
|
|
3
|
+
import type { Signal } from '@omujs/omu/extension/signal/signal.js';
|
|
4
|
+
import { SignalPermissions, SignalType } from '@omujs/omu/extension/signal/signal.js';
|
|
3
5
|
import type { Table } from '@omujs/omu/extension/table/index.js';
|
|
4
6
|
import { TableType } from '@omujs/omu/extension/table/index.js';
|
|
5
7
|
import { Serializer } from '@omujs/omu/serializer.js';
|
|
6
8
|
|
|
7
9
|
import { IDENTIFIER } from './const.js';
|
|
8
|
-
import {
|
|
10
|
+
import type { EventHandler, EventSource } from './event/event.js';
|
|
11
|
+
import { EventRegistry } from './event/event.js';
|
|
12
|
+
import { Author, Channel, Message, Provider, Reaction, Room, Vote } from './models/index.js';
|
|
9
13
|
import {
|
|
10
14
|
CHAT_CHANNEL_TREE_PERMISSION_ID,
|
|
11
15
|
CHAT_PERMISSION_ID,
|
|
@@ -58,33 +62,57 @@ const ROOM_TABLE_TYPE = TableType.createModel(IDENTIFIER, {
|
|
|
58
62
|
write: CHAT_WRITE_PERMISSION_ID,
|
|
59
63
|
},
|
|
60
64
|
});
|
|
65
|
+
const VOTE_TABLE_TYPE = TableType.createModel(IDENTIFIER, {
|
|
66
|
+
name: 'votes',
|
|
67
|
+
model: Vote,
|
|
68
|
+
permissions: {
|
|
69
|
+
all: CHAT_PERMISSION_ID,
|
|
70
|
+
read: CHAT_READ_PERMISSION_ID,
|
|
71
|
+
write: CHAT_WRITE_PERMISSION_ID,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
61
74
|
const CREATE_CHANNEL_TREE_ENDPOINT = EndpointType.createJson(IDENTIFIER, {
|
|
62
75
|
name: 'create_channel_tree',
|
|
63
76
|
requestSerializer: Serializer.noop<string>(),
|
|
64
77
|
responseSerializer: Serializer.model(Channel).toArray(),
|
|
65
78
|
permissionId: CHAT_CHANNEL_TREE_PERMISSION_ID,
|
|
66
79
|
});
|
|
80
|
+
const REACTION_SIGNAL = SignalType.createJson(IDENTIFIER, {
|
|
81
|
+
name: 'reaction',
|
|
82
|
+
serializer: Serializer.model(Reaction),
|
|
83
|
+
permissions: new SignalPermissions(CHAT_PERMISSION_ID),
|
|
84
|
+
});
|
|
67
85
|
|
|
68
86
|
export class Chat {
|
|
69
|
-
readonly messages: Table<Message>;
|
|
70
|
-
readonly authors: Table<Author>;
|
|
71
|
-
readonly channels: Table<Channel>;
|
|
72
|
-
readonly providers: Table<Provider>;
|
|
73
|
-
readonly rooms: Table<Room>;
|
|
87
|
+
public readonly messages: Table<Message>;
|
|
88
|
+
public readonly authors: Table<Author>;
|
|
89
|
+
public readonly channels: Table<Channel>;
|
|
90
|
+
public readonly providers: Table<Provider>;
|
|
91
|
+
public readonly rooms: Table<Room>;
|
|
92
|
+
public readonly votes: Table<Vote>;
|
|
93
|
+
public readonly reactionSignal: Signal<Reaction>;
|
|
94
|
+
private readonly eventRegistry: EventRegistry;
|
|
74
95
|
|
|
75
96
|
constructor(private readonly client: Client) {
|
|
76
97
|
client.server.require(IDENTIFIER);
|
|
77
98
|
client.permissions.require(CHAT_PERMISSION_ID);
|
|
99
|
+
this.eventRegistry = new EventRegistry(this);
|
|
78
100
|
this.messages = client.tables.get(MESSAGE_TABLE_TYPE);
|
|
79
101
|
this.authors = client.tables.get(AUTHOR_TABLE_TYPE);
|
|
80
102
|
this.channels = client.tables.get(CHANNEL_TABLE_TYPE);
|
|
81
103
|
this.providers = client.tables.get(PROVIDER_TABLE_TYPE);
|
|
82
104
|
this.rooms = client.tables.get(ROOM_TABLE_TYPE);
|
|
105
|
+
this.votes = client.tables.get(VOTE_TABLE_TYPE);
|
|
106
|
+
this.reactionSignal = client.signal.get(REACTION_SIGNAL);
|
|
83
107
|
this.messages.setCacheSize(1000);
|
|
84
108
|
this.authors.setCacheSize(500);
|
|
85
109
|
}
|
|
86
110
|
|
|
87
|
-
async createChannelTree(url: string): Promise<Channel[]> {
|
|
111
|
+
public async createChannelTree(url: string): Promise<Channel[]> {
|
|
88
112
|
return await this.client.endpoints.call(CREATE_CHANNEL_TREE_ENDPOINT, url);
|
|
89
113
|
}
|
|
114
|
+
|
|
115
|
+
public on<P extends Array<any>>(event: EventSource<P>, handler: EventHandler<P>): void {
|
|
116
|
+
this.eventRegistry.register(event, handler);
|
|
117
|
+
}
|
|
90
118
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TableEvent } from './event.js';
|
|
2
|
+
|
|
3
|
+
export const events = {
|
|
4
|
+
message: new TableEvent((chat) => chat.messages),
|
|
5
|
+
author: new TableEvent((chat) => chat.authors),
|
|
6
|
+
channel: new TableEvent((chat) => chat.channels),
|
|
7
|
+
provider: new TableEvent((chat) => chat.providers),
|
|
8
|
+
room: new TableEvent((chat) => chat.rooms),
|
|
9
|
+
vote: new TableEvent((chat) => chat.votes),
|
|
10
|
+
};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { Unlisten } from '@omujs/omu/event-emitter.js';
|
|
2
|
+
import { EventEmitter } from '@omujs/omu/event-emitter.js';
|
|
3
|
+
import type { Table } from '@omujs/omu/extension/table/table.js';
|
|
4
|
+
|
|
5
|
+
import type { Chat } from '../chat.js';
|
|
6
|
+
|
|
7
|
+
export type EventHandler<P extends Array<any>> = (...args: P) => Promise<void> | void;
|
|
8
|
+
|
|
9
|
+
export interface EventSource<P extends Array<any>> {
|
|
10
|
+
subscribe(handler: EventHandler<P>, chat: Chat): Unlisten;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class ListenerEvent<P extends Array<any>> implements EventSource<P> {
|
|
14
|
+
constructor(private readonly getListener: (chat: Chat) => EventEmitter<P>) {}
|
|
15
|
+
|
|
16
|
+
public subscribe(handler: EventHandler<P>, chat: Chat): Unlisten {
|
|
17
|
+
const listener = this.getListener(chat);
|
|
18
|
+
return listener.listen(handler);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export class TableEvent<T> extends ListenerEvent<[Map<string, T>]> {
|
|
23
|
+
public readonly addBatch: ListenerEvent<[Map<string, T>]>;
|
|
24
|
+
public readonly updateBatch: ListenerEvent<[Map<string, T>]>;
|
|
25
|
+
public readonly removeBatch: ListenerEvent<[Map<string, T>]>;
|
|
26
|
+
public readonly add: EventSource<[T]>;
|
|
27
|
+
public readonly update: EventSource<[T]>;
|
|
28
|
+
public readonly remove: EventSource<[T]>;
|
|
29
|
+
public readonly clear: EventSource<[]>;
|
|
30
|
+
public readonly wrappers: Record<string, Unlisten>;
|
|
31
|
+
|
|
32
|
+
constructor(private readonly getTable: (chat: Chat) => Table<T>) {
|
|
33
|
+
super((chat) => getTable(chat).event.cacheUpdate);
|
|
34
|
+
this.addBatch = new ListenerEvent((chat) => getTable(chat).event.add);
|
|
35
|
+
this.updateBatch = new ListenerEvent((chat) => getTable(chat).event.update);
|
|
36
|
+
this.removeBatch = new ListenerEvent((chat) => getTable(chat).event.remove);
|
|
37
|
+
this.add = this.createBatchSubscriber((table) => table.event.add);
|
|
38
|
+
this.update = this.createBatchSubscriber((table) => table.event.update);
|
|
39
|
+
this.remove = this.createBatchSubscriber((table) => table.event.remove);
|
|
40
|
+
this.clear = new ListenerEvent((client) => getTable(client).event.clear);
|
|
41
|
+
this.wrappers = {};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private static createBatchWrapper<T>(emit: EventHandler<[T]>): EventHandler<[Map<string, T>]> {
|
|
45
|
+
return async (items) => {
|
|
46
|
+
for (const item of items.values()) {
|
|
47
|
+
await emit(item);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
private createBatchSubscriber(
|
|
53
|
+
getListener: (table: Table<T>) => EventEmitter<[Map<string, T>]>,
|
|
54
|
+
): EventSource<[T]> {
|
|
55
|
+
let batchWrapper: EventHandler<[Map<string, T>]> | null = null;
|
|
56
|
+
|
|
57
|
+
const subscribe = (emit: EventHandler<[T]>, chat: Chat): Unlisten => {
|
|
58
|
+
const listener = getListener(this.getTable(chat));
|
|
59
|
+
batchWrapper = TableEvent.createBatchWrapper((item) => emit(item));
|
|
60
|
+
return listener.listen(batchWrapper);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
return {
|
|
64
|
+
subscribe,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
type Entry<P extends Array<any>> = {
|
|
70
|
+
source: EventSource<P>;
|
|
71
|
+
listeners: EventEmitter<P>;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export class EventRegistry {
|
|
75
|
+
private readonly chat: Chat;
|
|
76
|
+
private readonly events: Map<EventSource<any>, Entry<any>>;
|
|
77
|
+
|
|
78
|
+
constructor(chat: Chat) {
|
|
79
|
+
this.chat = chat;
|
|
80
|
+
this.events = new Map();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public register<P extends Array<any>>(event: EventSource<P>, handler: EventHandler<P>): void {
|
|
84
|
+
let entry = this.events.get(event) as Entry<P> | null;
|
|
85
|
+
if (!entry) {
|
|
86
|
+
const newEntry: Entry<P> = {
|
|
87
|
+
source: event,
|
|
88
|
+
listeners: new EventEmitter(),
|
|
89
|
+
};
|
|
90
|
+
entry = newEntry;
|
|
91
|
+
this.events.set(event, newEntry);
|
|
92
|
+
event.subscribe((...args) => newEntry.listeners.emit(...args), this.chat);
|
|
93
|
+
}
|
|
94
|
+
entry.listeners.listen((...args) => handler(...args));
|
|
95
|
+
}
|
|
96
|
+
}
|
package/src/index.ts
CHANGED
package/src/models/content.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { Identifier } from '@omujs/omu';
|
|
2
|
+
|
|
1
3
|
type Primitive =
|
|
2
4
|
| {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
+
[key: string]: Primitive | string | number | boolean | null;
|
|
6
|
+
}
|
|
5
7
|
| any[]
|
|
6
8
|
| string
|
|
7
9
|
| number
|
|
@@ -18,7 +20,7 @@ export interface Parent {
|
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
export abstract class Component<T extends string = string, D extends Primitive = Primitive> {
|
|
21
|
-
constructor(public type: T) {
|
|
23
|
+
constructor(public type: T) {}
|
|
22
24
|
|
|
23
25
|
abstract toJson(): D;
|
|
24
26
|
|
|
@@ -167,6 +169,22 @@ export class Image extends Component<'image', ImageData> {
|
|
|
167
169
|
}
|
|
168
170
|
}
|
|
169
171
|
|
|
172
|
+
export type AssetData = {
|
|
173
|
+
id: string;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
export class Asset extends Component<'asset', AssetData> {
|
|
177
|
+
constructor(public id: Identifier) {
|
|
178
|
+
super('asset');
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
toJson(): AssetData {
|
|
182
|
+
return {
|
|
183
|
+
id: this.id.key(),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
170
188
|
export type LinkData = {
|
|
171
189
|
url: string;
|
|
172
190
|
children: ComponentJson[];
|
|
@@ -200,8 +218,9 @@ export class System extends Component<'system', SystemData> implements Parent {
|
|
|
200
218
|
}
|
|
201
219
|
}
|
|
202
220
|
|
|
203
|
-
register('root', (
|
|
204
|
-
register('text', (
|
|
205
|
-
register('image', (
|
|
206
|
-
register('
|
|
207
|
-
register('
|
|
221
|
+
register('root', (data: RootData) => new Root(data.map(deserialize)));
|
|
222
|
+
register('text', (data: TextData) => new Text(data));
|
|
223
|
+
register('image', (data: ImageData) => new Image(data.url, data.id, data.name));
|
|
224
|
+
register('asset', (data: AssetData) => new Asset(Identifier.fromKey(data.id)));
|
|
225
|
+
register('link', (data: LinkData) => new Link(data.url, data.children.map(deserialize)));
|
|
226
|
+
register('system', (data: SystemData) => new System(data.map(deserialize)));
|
package/src/models/index.ts
CHANGED
|
@@ -4,7 +4,8 @@ export * as content from './content.js';
|
|
|
4
4
|
export { Gift } from './gift.js';
|
|
5
5
|
export { Message } from './message.js';
|
|
6
6
|
export { Paid } from './paid.js';
|
|
7
|
+
export { Reaction } from './reaction.js';
|
|
7
8
|
export { Provider } from './provider.js';
|
|
8
9
|
export { Role } from './role.js';
|
|
9
10
|
export { Room } from './room.js';
|
|
10
|
-
|
|
11
|
+
export { Vote, Choice } from './vote.js';
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Identifier } from '@omujs/omu';
|
|
2
|
+
import type { Model } from '@omujs/omu/model.js';
|
|
3
|
+
|
|
4
|
+
export type ReactionJson = {
|
|
5
|
+
room_id: string;
|
|
6
|
+
reactions: {
|
|
7
|
+
[key: string]: number;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export class Reaction implements Model<ReactionJson> {
|
|
12
|
+
public roomId: Identifier;
|
|
13
|
+
public reactions: {
|
|
14
|
+
[key: string]: number;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
constructor(options: {
|
|
18
|
+
roomId: Identifier;
|
|
19
|
+
reactions: {
|
|
20
|
+
[key: string]: number;
|
|
21
|
+
};
|
|
22
|
+
}) {
|
|
23
|
+
this.roomId = options.roomId;
|
|
24
|
+
this.reactions = options.reactions;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static fromJson(data: ReactionJson): Reaction {
|
|
28
|
+
return new Reaction({
|
|
29
|
+
roomId: Identifier.fromKey(data.room_id),
|
|
30
|
+
reactions: data.reactions,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
toJson(): ReactionJson {
|
|
35
|
+
return {
|
|
36
|
+
room_id: this.roomId.key(),
|
|
37
|
+
reactions: this.reactions,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|