@omujs/chat 0.1.22

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.
Files changed (94) hide show
  1. package/.eslintignore +13 -0
  2. package/.eslintrc.cjs +6 -0
  3. package/.prettierignore +1 -0
  4. package/CHANGELOG.md +262 -0
  5. package/LICENSE +21 -0
  6. package/README.md +1 -0
  7. package/built/dts/chat.d.ts +14 -0
  8. package/built/dts/chat.d.ts.map +1 -0
  9. package/built/dts/client.d.ts +24 -0
  10. package/built/dts/client.d.ts.map +1 -0
  11. package/built/dts/const.d.ts +3 -0
  12. package/built/dts/const.d.ts.map +1 -0
  13. package/built/dts/event/event-registry.d.ts +12 -0
  14. package/built/dts/event/event-registry.d.ts.map +1 -0
  15. package/built/dts/event/event.d.ts +26 -0
  16. package/built/dts/event/event.d.ts.map +1 -0
  17. package/built/dts/event/index.d.ts +3 -0
  18. package/built/dts/event/index.d.ts.map +1 -0
  19. package/built/dts/index.d.ts +4 -0
  20. package/built/dts/index.d.ts.map +1 -0
  21. package/built/dts/models/author.d.ts +40 -0
  22. package/built/dts/models/author.d.ts.map +1 -0
  23. package/built/dts/models/channel.d.ts +34 -0
  24. package/built/dts/models/channel.d.ts.map +1 -0
  25. package/built/dts/models/content.d.ts +76 -0
  26. package/built/dts/models/content.d.ts.map +1 -0
  27. package/built/dts/models/gift.d.ts +25 -0
  28. package/built/dts/models/gift.d.ts.map +1 -0
  29. package/built/dts/models/index.d.ts +10 -0
  30. package/built/dts/models/index.d.ts.map +1 -0
  31. package/built/dts/models/message.d.ts +40 -0
  32. package/built/dts/models/message.d.ts.map +1 -0
  33. package/built/dts/models/paid.d.ts +13 -0
  34. package/built/dts/models/paid.d.ts.map +1 -0
  35. package/built/dts/models/provider.d.ts +37 -0
  36. package/built/dts/models/provider.d.ts.map +1 -0
  37. package/built/dts/models/role.d.ts +28 -0
  38. package/built/dts/models/role.d.ts.map +1 -0
  39. package/built/dts/models/room.d.ts +45 -0
  40. package/built/dts/models/room.d.ts.map +1 -0
  41. package/built/dts/permissions.d.ts +6 -0
  42. package/built/dts/permissions.d.ts.map +1 -0
  43. package/built/esm/chat.js +81 -0
  44. package/built/esm/chat.js.map +1 -0
  45. package/built/esm/client.js +44 -0
  46. package/built/esm/client.js.map +1 -0
  47. package/built/esm/const.js +3 -0
  48. package/built/esm/const.js.map +1 -0
  49. package/built/esm/event/event-registry.js +35 -0
  50. package/built/esm/event/event-registry.js.map +1 -0
  51. package/built/esm/event/event.js +40 -0
  52. package/built/esm/event/event.js.map +1 -0
  53. package/built/esm/event/index.js +3 -0
  54. package/built/esm/event/index.js.map +1 -0
  55. package/built/esm/index.js +4 -0
  56. package/built/esm/index.js.map +1 -0
  57. package/built/esm/models/author.js +42 -0
  58. package/built/esm/models/author.js.map +1 -0
  59. package/built/esm/models/channel.js +45 -0
  60. package/built/esm/models/channel.js.map +1 -0
  61. package/built/esm/models/content.js +154 -0
  62. package/built/esm/models/content.js.map +1 -0
  63. package/built/esm/models/gift.js +33 -0
  64. package/built/esm/models/gift.js.map +1 -0
  65. package/built/esm/models/index.js +10 -0
  66. package/built/esm/models/index.js.map +1 -0
  67. package/built/esm/models/message.js +57 -0
  68. package/built/esm/models/message.js.map +1 -0
  69. package/built/esm/models/paid.js +18 -0
  70. package/built/esm/models/paid.js.map +1 -0
  71. package/built/esm/models/provider.js +49 -0
  72. package/built/esm/models/provider.js.map +1 -0
  73. package/built/esm/models/role.js +37 -0
  74. package/built/esm/models/role.js.map +1 -0
  75. package/built/esm/models/room.js +45 -0
  76. package/built/esm/models/room.js.map +1 -0
  77. package/built/esm/permissions.js +7 -0
  78. package/built/esm/permissions.js.map +1 -0
  79. package/package.json +53 -0
  80. package/src/chat.ts +90 -0
  81. package/src/const.ts +3 -0
  82. package/src/index.ts +3 -0
  83. package/src/models/author.ts +74 -0
  84. package/src/models/channel.ts +69 -0
  85. package/src/models/content.ts +207 -0
  86. package/src/models/gift.ts +51 -0
  87. package/src/models/index.ts +10 -0
  88. package/src/models/message.ts +85 -0
  89. package/src/models/paid.ts +24 -0
  90. package/src/models/provider.ts +75 -0
  91. package/src/models/role.ts +57 -0
  92. package/src/models/room.ts +82 -0
  93. package/src/permissions.ts +7 -0
  94. package/tsconfig.json +12 -0
@@ -0,0 +1,154 @@
1
+ export class Component {
2
+ type;
3
+ constructor(type) {
4
+ this.type = type;
5
+ }
6
+ isParent() {
7
+ return 'children' in this;
8
+ }
9
+ walk(cb) {
10
+ const stack = [this];
11
+ while (stack.length) {
12
+ const component = stack.pop();
13
+ if (!component) {
14
+ continue;
15
+ }
16
+ cb(component);
17
+ if (component.isParent()) {
18
+ stack.push(...component.children);
19
+ }
20
+ }
21
+ }
22
+ *iter() {
23
+ const stack = [this];
24
+ while (stack.length) {
25
+ const component = stack.pop();
26
+ if (!component) {
27
+ continue;
28
+ }
29
+ yield component;
30
+ if (component.isParent()) {
31
+ stack.push(...component.children);
32
+ }
33
+ }
34
+ }
35
+ toString() {
36
+ const parts = [];
37
+ for (const component of this.iter()) {
38
+ if (component instanceof Text) {
39
+ parts.push(component.text);
40
+ }
41
+ }
42
+ return parts.join('');
43
+ }
44
+ }
45
+ const componentTypes = {};
46
+ export function deserialize(json) {
47
+ const type = componentTypes[json.type];
48
+ if (!type) {
49
+ throw new Error(`Unknown component type: ${json.type}`);
50
+ }
51
+ return type.fromJson(json.data);
52
+ }
53
+ export function serialize(component) {
54
+ return {
55
+ type: component.type,
56
+ data: component.toJson(),
57
+ };
58
+ }
59
+ export function register(type, deserialize) {
60
+ if (componentTypes[type]) {
61
+ throw new Error(`Component type already registered: ${type}`);
62
+ }
63
+ componentTypes[type] = {
64
+ type,
65
+ fromJson: deserialize,
66
+ };
67
+ }
68
+ export class Root extends Component {
69
+ children;
70
+ constructor(children) {
71
+ super('root');
72
+ this.children = children;
73
+ }
74
+ toJson() {
75
+ return this.children.map(serialize);
76
+ }
77
+ add(component) {
78
+ this.children.push(component);
79
+ }
80
+ text() {
81
+ const parts = [];
82
+ for (const component of this.iter()) {
83
+ if (component instanceof Text) {
84
+ parts.push(component.text);
85
+ }
86
+ }
87
+ return parts.join('');
88
+ }
89
+ }
90
+ export class Text extends Component {
91
+ text;
92
+ constructor(text) {
93
+ super('text');
94
+ this.text = text;
95
+ }
96
+ toJson() {
97
+ return this.text;
98
+ }
99
+ static of(text) {
100
+ return new Text(text);
101
+ }
102
+ }
103
+ export class Image extends Component {
104
+ url;
105
+ id;
106
+ name;
107
+ constructor(url, id, name = undefined) {
108
+ super('image');
109
+ this.url = url;
110
+ this.id = id;
111
+ this.name = name;
112
+ }
113
+ toJson() {
114
+ return {
115
+ url: this.url,
116
+ id: this.id,
117
+ name: this.name,
118
+ };
119
+ }
120
+ static of({ url, id, name }) {
121
+ return new Image(url, id, name);
122
+ }
123
+ }
124
+ export class Link extends Component {
125
+ url;
126
+ children;
127
+ constructor(url, children) {
128
+ super('link');
129
+ this.url = url;
130
+ this.children = children;
131
+ }
132
+ toJson() {
133
+ return {
134
+ url: this.url,
135
+ children: this.children.map(serialize),
136
+ };
137
+ }
138
+ }
139
+ export class System extends Component {
140
+ children;
141
+ constructor(children) {
142
+ super('system');
143
+ this.children = children;
144
+ }
145
+ toJson() {
146
+ return this.children.map(serialize);
147
+ }
148
+ }
149
+ register('root', (json) => new Root(json.map(deserialize)));
150
+ register('text', (json) => new Text(json));
151
+ register('image', (json) => new Image(json.url, json.id, json.name));
152
+ register('link', (json) => new Link(json.url, json.children.map(deserialize)));
153
+ register('system', (json) => new System(json.map(deserialize)));
154
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/models/content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export class Gift {
2
+ id;
3
+ name;
4
+ amount;
5
+ isPaid;
6
+ imageUrl;
7
+ constructor(options) {
8
+ this.id = options.id;
9
+ this.name = options.name;
10
+ this.amount = options.amount;
11
+ this.isPaid = options.isPaid;
12
+ this.imageUrl = options.imageUrl;
13
+ }
14
+ static fromJson(options) {
15
+ return new Gift({
16
+ id: options.id,
17
+ name: options.name,
18
+ amount: options.amount,
19
+ isPaid: options.is_paid,
20
+ imageUrl: options.image_url,
21
+ });
22
+ }
23
+ toJson() {
24
+ return {
25
+ id: this.id,
26
+ name: this.name,
27
+ amount: this.amount,
28
+ is_paid: this.isPaid,
29
+ image_url: this.imageUrl,
30
+ };
31
+ }
32
+ }
33
+ //# sourceMappingURL=gift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gift.js","sourceRoot":"","sources":["../../../src/models/gift.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,IAAI;IACb,EAAE,CAAS;IACX,IAAI,CAAU;IACd,MAAM,CAAU;IAChB,MAAM,CAAW;IACjB,QAAQ,CAAU;IAElB,YAAY,OAMX;QACG,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,OAAiB;QAC7B,OAAO,IAAI,IAAI,CAAC;YACZ,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,OAAO;YACvB,QAAQ,EAAE,OAAO,CAAC,SAAS;SAC9B,CAAC,CAAC;IACP,CAAC;IAED,MAAM;QACF,OAAO;YACH,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,MAAM;YACpB,SAAS,EAAE,IAAI,CAAC,QAAQ;SAC3B,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,10 @@
1
+ export { Author } from './author.js';
2
+ export { Channel } from './channel.js';
3
+ export * as content from './content.js';
4
+ export { Gift } from './gift.js';
5
+ export { Message } from './message.js';
6
+ export { Paid } from './paid.js';
7
+ export { Provider } from './provider.js';
8
+ export { Role } from './role.js';
9
+ export { Room } from './room.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,57 @@
1
+ import { Identifier } from '@omujs/omu/identifier.js';
2
+ import * as content from './content.js';
3
+ import { Gift } from './gift.js';
4
+ import { Paid } from './paid.js';
5
+ export class Message {
6
+ roomId;
7
+ id;
8
+ authorId;
9
+ content;
10
+ paid;
11
+ gifts;
12
+ createdAt;
13
+ constructor(options) {
14
+ if (!(options.createdAt instanceof Date)) {
15
+ throw new Error('created_at must be a Date');
16
+ }
17
+ this.roomId = options.roomId;
18
+ this.id = options.id;
19
+ this.authorId = options.authorId;
20
+ this.content = options.content;
21
+ this.paid = options.paid;
22
+ this.gifts = options.gifts;
23
+ this.createdAt = options.createdAt;
24
+ }
25
+ static fromJson(info) {
26
+ return new Message({
27
+ roomId: Identifier.fromKey(info.room_id),
28
+ id: Identifier.fromKey(info.id),
29
+ authorId: info.author_id ? Identifier.fromKey(info.author_id) : undefined,
30
+ content: info.content && content.deserialize(info.content),
31
+ paid: info.paid && Paid.fromJson(info.paid),
32
+ gifts: info.gifts?.map((gift) => Gift.fromJson(gift)),
33
+ createdAt: new Date(info.created_at),
34
+ });
35
+ }
36
+ get text() {
37
+ if (!this.content) {
38
+ return '';
39
+ }
40
+ return this.content.toString();
41
+ }
42
+ key() {
43
+ return this.id.key();
44
+ }
45
+ toJson() {
46
+ return {
47
+ room_id: this.roomId.key(),
48
+ id: this.id.key(),
49
+ author_id: this.authorId?.key(),
50
+ created_at: this.createdAt.toISOString(),
51
+ content: this.content && content.serialize(this.content),
52
+ paid: this.paid?.toJson(),
53
+ gifts: this.gifts?.map((gift) => gift.toJson()),
54
+ };
55
+ }
56
+ }
57
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/models/message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export class Paid {
2
+ amount;
3
+ currency;
4
+ constructor(amount, currency) {
5
+ this.amount = amount;
6
+ this.currency = currency;
7
+ }
8
+ static fromJson(options) {
9
+ return new Paid(options.amount, options.currency);
10
+ }
11
+ toJson() {
12
+ return {
13
+ amount: this.amount,
14
+ currency: this.currency,
15
+ };
16
+ }
17
+ }
18
+ //# sourceMappingURL=paid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paid.js","sourceRoot":"","sources":["../../../src/models/paid.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,IAAI;IAEF;IACA;IAFX,YACW,MAAc,EACd,QAAgB;QADhB,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAQ;IACvB,CAAC;IAEL,MAAM,CAAC,QAAQ,CAAC,OAAiB;QAC7B,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,MAAM;QACF,OAAO;YACH,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SAC1B,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,49 @@
1
+ import { Identifier } from '@omujs/omu/identifier.js';
2
+ export class Provider {
3
+ id;
4
+ url;
5
+ name;
6
+ version;
7
+ repositoryUrl;
8
+ imageUrl;
9
+ description;
10
+ regex;
11
+ constructor(options) {
12
+ this.id = options.id;
13
+ this.url = options.url;
14
+ this.name = options.name;
15
+ this.version = options.version;
16
+ this.repositoryUrl = options.repository_url;
17
+ this.imageUrl = options.image_url;
18
+ this.description = options.description;
19
+ this.regex = options.regex;
20
+ }
21
+ static fromJson(data) {
22
+ return new Provider({
23
+ id: Identifier.fromKey(data.id),
24
+ url: data.url,
25
+ name: data.name,
26
+ version: data.version,
27
+ repository_url: data.repository_url,
28
+ image_url: data.image_url,
29
+ description: data.description,
30
+ regex: data.regex,
31
+ });
32
+ }
33
+ toJson() {
34
+ return {
35
+ id: this.id.key(),
36
+ url: this.url,
37
+ name: this.name,
38
+ version: this.version,
39
+ repository_url: this.repositoryUrl,
40
+ image_url: this.imageUrl,
41
+ description: this.description,
42
+ regex: this.regex,
43
+ };
44
+ }
45
+ key() {
46
+ return this.id.key();
47
+ }
48
+ }
49
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/models/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAetD,MAAM,OAAO,QAAQ;IACV,EAAE,CAAa;IACf,GAAG,CAAS;IACZ,IAAI,CAAS;IACb,OAAO,CAAS;IAChB,aAAa,CAAS;IACtB,QAAQ,CAAU;IAClB,WAAW,CAAS;IACpB,KAAK,CAAS;IAErB,YAAY,OASX;QACG,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAkB;QAC9B,OAAO,IAAI,QAAQ,CAAC;YAChB,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;SACpB,CAAC,CAAC;IACP,CAAC;IAED,MAAM;QACF,OAAO;YACH,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,cAAc,EAAE,IAAI,CAAC,aAAa;YAClC,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;SACpB,CAAC;IACN,CAAC;IAED,GAAG;QACC,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IACzB,CAAC;CACJ"}
@@ -0,0 +1,37 @@
1
+ export class Role {
2
+ id;
3
+ name;
4
+ isOwner;
5
+ isModerator;
6
+ iconUrl;
7
+ color;
8
+ constructor(options) {
9
+ this.id = options.id;
10
+ this.name = options.name;
11
+ this.isOwner = options.isOwner;
12
+ this.isModerator = options.isModerator;
13
+ this.iconUrl = options.iconUrl;
14
+ this.color = options.color;
15
+ }
16
+ static fromJson(json) {
17
+ return new Role({
18
+ id: json.id,
19
+ name: json.name,
20
+ isOwner: json.is_owner,
21
+ isModerator: json.is_moderator,
22
+ iconUrl: json.icon_url,
23
+ color: json.color,
24
+ });
25
+ }
26
+ toJson() {
27
+ return {
28
+ id: this.id,
29
+ name: this.name,
30
+ color: this.color,
31
+ icon_url: this.iconUrl,
32
+ is_owner: this.isOwner,
33
+ is_moderator: this.isModerator,
34
+ };
35
+ }
36
+ }
37
+ //# sourceMappingURL=role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.js","sourceRoot":"","sources":["../../../src/models/role.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,IAAI;IACb,EAAE,CAAU;IACZ,IAAI,CAAS;IACb,OAAO,CAAU;IACjB,WAAW,CAAU;IACrB,OAAO,CAAU;IACjB,KAAK,CAAU;IAEf,YAAY,OAOX;QACG,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAc;QAC1B,OAAO,IAAI,IAAI,CAAC;YACZ,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK;SACpB,CAAC,CAAC;IACP,CAAC;IAED,MAAM;QACF,OAAO;YACH,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,YAAY,EAAE,IAAI,CAAC,WAAW;SACjC,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,45 @@
1
+ import { Identifier } from '@omujs/omu/identifier.js';
2
+ export class Room {
3
+ id;
4
+ providerId;
5
+ connected;
6
+ status;
7
+ metadata;
8
+ channelId;
9
+ createdAt;
10
+ constructor(options) {
11
+ this.id = options.id;
12
+ this.providerId = options.providerId;
13
+ this.connected = options.connected;
14
+ this.status = options.status;
15
+ this.metadata = options.metadata;
16
+ this.channelId = options.channelId;
17
+ this.createdAt = options.createdAt;
18
+ }
19
+ static fromJson(options) {
20
+ return new Room({
21
+ id: Identifier.fromKey(options.id),
22
+ providerId: Identifier.fromKey(options.provider_id),
23
+ connected: options.connected,
24
+ status: options.status,
25
+ metadata: options.metadata,
26
+ channelId: options.channel_id,
27
+ createdAt: new Date(options.created_at),
28
+ });
29
+ }
30
+ toJson() {
31
+ return {
32
+ id: this.id.key(),
33
+ provider_id: this.providerId.key(),
34
+ connected: this.connected,
35
+ status: this.status,
36
+ metadata: this.metadata,
37
+ channel_id: this.channelId,
38
+ created_at: this.createdAt.toISOString(),
39
+ };
40
+ }
41
+ key() {
42
+ return this.id.key();
43
+ }
44
+ }
45
+ //# sourceMappingURL=room.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room.js","sourceRoot":"","sources":["../../../src/models/room.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AA2BtD,MAAM,OAAO,IAAI;IACN,EAAE,CAAa;IACf,UAAU,CAAa;IACvB,SAAS,CAAU;IACnB,MAAM,CAAS;IACf,QAAQ,CAAgB;IACxB,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,7 @@
1
+ import { IDENTIFIER } from './const.js';
2
+ export const CHAT_PERMISSION_ID = IDENTIFIER;
3
+ export const CHAT_READ_PERMISSION_ID = IDENTIFIER.join('chat', 'read');
4
+ export const CHAT_WRITE_PERMISSION_ID = IDENTIFIER.join('chat', 'write');
5
+ export const CHAT_SEND_PERMISSION_ID = IDENTIFIER.join('chat', 'send');
6
+ export const CHAT_CHANNEL_TREE_PERMISSION_ID = IDENTIFIER.join('create_channel_tree');
7
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "type": "module",
3
+ "name": "@omujs/chat",
4
+ "version": "0.1.22",
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"
13
+ },
14
+ "./*": {
15
+ "import": "./built/esm/*",
16
+ "types": "./built/dts/*"
17
+ }
18
+ },
19
+ "devDependencies": {
20
+ "@types/node": "^20.12.12",
21
+ "@types/websocket": "1.0.10",
22
+ "@types/ws": "8.5.10",
23
+ "@typescript-eslint/eslint-plugin": "^7.9.0",
24
+ "@typescript-eslint/parser": "^7.9.0",
25
+ "axios": "^1.6.8",
26
+ "eslint": "^8.57.0",
27
+ "eslint-config-prettier": "^9.1.0",
28
+ "eslint-plugin-import": "^2.29.1",
29
+ "eslint-plugin-prettier": "^5.1.3",
30
+ "eslint-plugin-svelte": "^2.39.0",
31
+ "eslint-plugin-unused-imports": "^3.2.0",
32
+ "nodemon": "^3.1.0",
33
+ "ts-node": "10.9.2",
34
+ "typescript": "^5.4.5",
35
+ "websocket": "1.0.34",
36
+ "ws": "8.16.0",
37
+ "@omujs/omu": "0.1.22"
38
+ },
39
+ "dependencies": {
40
+ "@omujs/omu": "0.1.22"
41
+ },
42
+ "gitHead": "04559d5aec52117d707e0d554ee429b858da522a",
43
+ "scripts": {
44
+ "ts": "pnpm run ts-esm && pnpm run ts-dts",
45
+ "ts-esm": "tsc --outDir built/esm",
46
+ "ts-dts": "tsc --outDir built/dts --declaration true --emitDeclarationOnly true --declarationMap true",
47
+ "watch": "nodemon -w src -e ts,json --exec \"pnpm run ts\"",
48
+ "dev": "pnpm run watch",
49
+ "build": "pnpm run ts",
50
+ "lint": "eslint . --ext .js,.ts",
51
+ "format": "eslint . --ext .js,.ts --fix"
52
+ }
53
+ }
package/src/chat.ts ADDED
@@ -0,0 +1,90 @@
1
+ import type { Client } from '@omujs/omu/client.js';
2
+ import { EndpointType } from '@omujs/omu/extension/endpoint/endpoint.js';
3
+ import type { Table } from '@omujs/omu/extension/table/index.js';
4
+ import { TableType } from '@omujs/omu/extension/table/index.js';
5
+ import { Serializer } from '@omujs/omu/serializer.js';
6
+
7
+ import { IDENTIFIER } from './const.js';
8
+ import { Author, Channel, Message, Provider, Room } from './models/index.js';
9
+ import {
10
+ CHAT_CHANNEL_TREE_PERMISSION_ID,
11
+ CHAT_PERMISSION_ID,
12
+ CHAT_READ_PERMISSION_ID,
13
+ CHAT_WRITE_PERMISSION_ID,
14
+ } from './permissions.js';
15
+
16
+ const MESSAGE_TABLE_TYPE = TableType.createModel(IDENTIFIER, {
17
+ name: 'messages',
18
+ model: Message,
19
+ permissions: {
20
+ all: CHAT_PERMISSION_ID,
21
+ read: CHAT_READ_PERMISSION_ID,
22
+ write: CHAT_WRITE_PERMISSION_ID,
23
+ },
24
+ });
25
+ const AUTHOR_TABLE_TYPE = TableType.createModel(IDENTIFIER, {
26
+ name: 'authors',
27
+ model: Author,
28
+ permissions: {
29
+ all: CHAT_PERMISSION_ID,
30
+ read: CHAT_READ_PERMISSION_ID,
31
+ write: CHAT_WRITE_PERMISSION_ID,
32
+ },
33
+ });
34
+ const CHANNEL_TABLE_TYPE = TableType.createModel(IDENTIFIER, {
35
+ name: 'channels',
36
+ model: Channel,
37
+ permissions: {
38
+ all: CHAT_PERMISSION_ID,
39
+ read: CHAT_READ_PERMISSION_ID,
40
+ write: CHAT_WRITE_PERMISSION_ID,
41
+ },
42
+ });
43
+ const PROVIDER_TABLE_TYPE = TableType.createModel(IDENTIFIER, {
44
+ name: 'providers',
45
+ model: Provider,
46
+ permissions: {
47
+ all: CHAT_PERMISSION_ID,
48
+ read: CHAT_READ_PERMISSION_ID,
49
+ write: CHAT_WRITE_PERMISSION_ID,
50
+ },
51
+ });
52
+ const ROOM_TABLE_TYPE = TableType.createModel(IDENTIFIER, {
53
+ name: 'rooms',
54
+ model: Room,
55
+ permissions: {
56
+ all: CHAT_PERMISSION_ID,
57
+ read: CHAT_READ_PERMISSION_ID,
58
+ write: CHAT_WRITE_PERMISSION_ID,
59
+ },
60
+ });
61
+ const CREATE_CHANNEL_TREE_ENDPOINT = EndpointType.createJson(IDENTIFIER, {
62
+ name: 'create_channel_tree',
63
+ requestSerializer: Serializer.noop<string>(),
64
+ responseSerializer: Serializer.model(Channel).toArray(),
65
+ permissionId: CHAT_CHANNEL_TREE_PERMISSION_ID,
66
+ });
67
+
68
+ 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>;
74
+
75
+ constructor(private readonly client: Client) {
76
+ client.server.require(IDENTIFIER);
77
+ client.permissions.require(CHAT_PERMISSION_ID);
78
+ this.messages = client.tables.get(MESSAGE_TABLE_TYPE);
79
+ this.authors = client.tables.get(AUTHOR_TABLE_TYPE);
80
+ this.channels = client.tables.get(CHANNEL_TABLE_TYPE);
81
+ this.providers = client.tables.get(PROVIDER_TABLE_TYPE);
82
+ this.rooms = client.tables.get(ROOM_TABLE_TYPE);
83
+ this.messages.setCacheSize(1000);
84
+ this.authors.setCacheSize(500);
85
+ }
86
+
87
+ async createChannelTree(url: string): Promise<Channel[]> {
88
+ return await this.client.endpoints.call(CREATE_CHANNEL_TREE_ENDPOINT, url);
89
+ }
90
+ }
package/src/const.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { Identifier } from '@omujs/omu/identifier.js';
2
+
3
+ export const IDENTIFIER = new Identifier('com.omuapps', 'chat');
package/src/index.ts ADDED
@@ -0,0 +1,3 @@
1
+ export { Chat } from './chat.js';
2
+ export * as models from './models/index.js';
3
+ export * as permissions from './permissions.js';