@teincfood/chat-client 0.1.0

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 (78) hide show
  1. package/README.md +437 -0
  2. package/dist/api/auth.d.ts +13 -0
  3. package/dist/api/auth.d.ts.map +1 -0
  4. package/dist/api/auth.js +27 -0
  5. package/dist/api/auth.js.map +1 -0
  6. package/dist/api/contacts.d.ts +6 -0
  7. package/dist/api/contacts.d.ts.map +1 -0
  8. package/dist/api/contacts.js +21 -0
  9. package/dist/api/contacts.js.map +1 -0
  10. package/dist/api/conversations.d.ts +21 -0
  11. package/dist/api/conversations.d.ts.map +1 -0
  12. package/dist/api/conversations.js +24 -0
  13. package/dist/api/conversations.js.map +1 -0
  14. package/dist/api/messages.d.ts +11 -0
  15. package/dist/api/messages.d.ts.map +1 -0
  16. package/dist/api/messages.js +21 -0
  17. package/dist/api/messages.js.map +1 -0
  18. package/dist/api/notifications.d.ts +15 -0
  19. package/dist/api/notifications.d.ts.map +1 -0
  20. package/dist/api/notifications.js +12 -0
  21. package/dist/api/notifications.js.map +1 -0
  22. package/dist/api/upload.d.ts +6 -0
  23. package/dist/api/upload.d.ts.map +1 -0
  24. package/dist/api/upload.js +15 -0
  25. package/dist/api/upload.js.map +1 -0
  26. package/dist/client.d.ts +98 -0
  27. package/dist/client.d.ts.map +1 -0
  28. package/dist/client.js +277 -0
  29. package/dist/client.js.map +1 -0
  30. package/dist/events.d.ts +9 -0
  31. package/dist/events.d.ts.map +1 -0
  32. package/dist/events.js +28 -0
  33. package/dist/events.js.map +1 -0
  34. package/dist/formatters.d.ts +4 -0
  35. package/dist/formatters.d.ts.map +1 -0
  36. package/dist/formatters.js +32 -0
  37. package/dist/formatters.js.map +1 -0
  38. package/dist/http.d.ts +25 -0
  39. package/dist/http.d.ts.map +1 -0
  40. package/dist/http.js +90 -0
  41. package/dist/http.js.map +1 -0
  42. package/dist/index.d.ts +13 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +25 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/integration.test.d.ts +10 -0
  47. package/dist/integration.test.d.ts.map +1 -0
  48. package/dist/integration.test.js +184 -0
  49. package/dist/integration.test.js.map +1 -0
  50. package/dist/optimistic.d.ts +26 -0
  51. package/dist/optimistic.d.ts.map +1 -0
  52. package/dist/optimistic.js +85 -0
  53. package/dist/optimistic.js.map +1 -0
  54. package/dist/react.d.ts +26 -0
  55. package/dist/react.d.ts.map +1 -0
  56. package/dist/react.js +208 -0
  57. package/dist/react.js.map +1 -0
  58. package/dist/retry.d.ts +7 -0
  59. package/dist/retry.d.ts.map +1 -0
  60. package/dist/retry.js +27 -0
  61. package/dist/retry.js.map +1 -0
  62. package/dist/socket.d.ts +83 -0
  63. package/dist/socket.d.ts.map +1 -0
  64. package/dist/socket.js +615 -0
  65. package/dist/socket.js.map +1 -0
  66. package/dist/store.d.ts +36 -0
  67. package/dist/store.d.ts.map +1 -0
  68. package/dist/store.js +185 -0
  69. package/dist/store.js.map +1 -0
  70. package/dist/types.d.ts +229 -0
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +22 -0
  73. package/dist/types.js.map +1 -0
  74. package/dist/unit.test.d.ts +8 -0
  75. package/dist/unit.test.d.ts.map +1 -0
  76. package/dist/unit.test.js +425 -0
  77. package/dist/unit.test.js.map +1 -0
  78. package/package.json +31 -0
@@ -0,0 +1,425 @@
1
+ "use strict";
2
+ /**
3
+ * Unit tests for the chat client library.
4
+ *
5
+ * Tests store mutations, events channel handling, auto-mark-read,
6
+ * and push notification handling without a live server.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const vitest_1 = require("vitest");
10
+ const store_1 = require("./store");
11
+ const events_1 = require("./events");
12
+ const optimistic_1 = require("./optimistic");
13
+ const socket_1 = require("./socket");
14
+ const client_1 = require("./client");
15
+ // ─── Mock storage ──────────────────────────────────────────
16
+ class MapStorage {
17
+ constructor() {
18
+ this.map = new Map();
19
+ }
20
+ async getItem(key) {
21
+ const v = this.map.get(key);
22
+ return v ? JSON.parse(v) : null;
23
+ }
24
+ async setItem(key, value) {
25
+ this.map.set(key, JSON.stringify(value));
26
+ }
27
+ async removeItem(key) {
28
+ this.map.delete(key);
29
+ }
30
+ async clear() {
31
+ this.map.clear();
32
+ }
33
+ }
34
+ // ─── Helpers ───────────────────────────────────────────────
35
+ function makeMsg(overrides = {}) {
36
+ return {
37
+ id: "msg-1",
38
+ content: "Hello",
39
+ sender_id: "user-a",
40
+ conversation_id: "conv-1",
41
+ direction: "inbound",
42
+ channel: "app",
43
+ message_type: "text",
44
+ status: "sent",
45
+ external_id: null,
46
+ metadata: null,
47
+ replied_by_id: null,
48
+ read: false,
49
+ sent_at: "2026-01-01T00:00:00Z",
50
+ inserted_at: "2026-01-01T00:00:00Z",
51
+ ...overrides,
52
+ };
53
+ }
54
+ function makeConv(overrides = {}) {
55
+ return {
56
+ id: "conv-1",
57
+ status: "active",
58
+ order_id: null,
59
+ business_id: null,
60
+ business: null,
61
+ participants: [],
62
+ messages: [],
63
+ inserted_at: "2026-01-01T00:00:00Z",
64
+ updated_at: "2026-01-01T00:00:00Z",
65
+ ...overrides,
66
+ };
67
+ }
68
+ // ─── Store tests ───────────────────────────────────────────
69
+ (0, vitest_1.describe)("ChatStore", () => {
70
+ let store;
71
+ (0, vitest_1.beforeEach)(() => {
72
+ store = new store_1.ChatStore(new MapStorage());
73
+ });
74
+ (0, vitest_1.it)("upsertConversation adds a new conversation", () => {
75
+ const conv = makeConv();
76
+ store.upsertConversation(conv);
77
+ (0, vitest_1.expect)(store.getConversation("conv-1")).toBeDefined();
78
+ (0, vitest_1.expect)(store.getConversations()).toHaveLength(1);
79
+ });
80
+ (0, vitest_1.it)("upsertConversation updates an existing conversation", () => {
81
+ const conv = makeConv({ status: "active" });
82
+ store.upsertConversation(conv);
83
+ const updated = makeConv({ status: "closed" });
84
+ store.upsertConversation(updated);
85
+ (0, vitest_1.expect)(store.getConversation("conv-1")?.status).toBe("closed");
86
+ });
87
+ (0, vitest_1.it)("markConversationRead marks messages as read for non-reader", () => {
88
+ const msg = makeMsg({ sender_id: "user-a", status: "sent", read: false });
89
+ store.upsertMessage("conv-1", msg);
90
+ store.markConversationRead("conv-1", "user-b");
91
+ const msgs = store.getMessages("conv-1");
92
+ (0, vitest_1.expect)(msgs[0].read).toBe(true);
93
+ (0, vitest_1.expect)(msgs[0].status).toBe("read");
94
+ });
95
+ (0, vitest_1.it)("markConversationRead does not modify sender's own messages", () => {
96
+ const msg = makeMsg({ sender_id: "user-a", status: "sent", read: false });
97
+ store.upsertMessage("conv-1", msg);
98
+ store.markConversationRead("conv-1", "user-a");
99
+ const msgs = store.getMessages("conv-1");
100
+ (0, vitest_1.expect)(msgs[0].read).toBe(false);
101
+ (0, vitest_1.expect)(msgs[0].status).toBe("sent");
102
+ });
103
+ (0, vitest_1.it)("setUnreadCount sets unread_count on an existing conversation", () => {
104
+ const conv = makeConv();
105
+ store.upsertConversation(conv);
106
+ store.setUnreadCount("conv-1", 5);
107
+ (0, vitest_1.expect)(store.getConversation("conv-1").unread_count).toBe(5);
108
+ });
109
+ (0, vitest_1.it)("removeConversation removes conversation and its messages", () => {
110
+ store.upsertConversation(makeConv());
111
+ store.upsertMessage("conv-1", makeMsg());
112
+ store.removeConversation("conv-1");
113
+ (0, vitest_1.expect)(store.getConversation("conv-1")).toBeUndefined();
114
+ (0, vitest_1.expect)(store.getMessages("conv-1")).toHaveLength(0);
115
+ });
116
+ });
117
+ // ─── Events channel unit tests ─────────────────────────────
118
+ (0, vitest_1.describe)("PhoenixChatSocket — events channel", () => {
119
+ const WS_URL = "ws://localhost:4000/ws";
120
+ let emitter;
121
+ let optimistic;
122
+ let store;
123
+ let socket;
124
+ (0, vitest_1.beforeEach)(() => {
125
+ emitter = new events_1.TypedEventEmitter();
126
+ store = new store_1.ChatStore(new MapStorage());
127
+ optimistic = new optimistic_1.OptimisticEngine(emitter);
128
+ socket = new socket_1.PhoenixChatSocket(WS_URL, emitter, optimistic, store);
129
+ });
130
+ (0, vitest_1.it)("has no last sequence initially", () => {
131
+ (0, vitest_1.expect)(socket.getLastSequence()).toBe(0);
132
+ });
133
+ (0, vitest_1.it)("setLastSequence updates the tracked sequence", () => {
134
+ socket.setLastSequence(42);
135
+ (0, vitest_1.expect)(socket.getLastSequence()).toBe(42);
136
+ });
137
+ (0, vitest_1.it)("setLastSequence does not decrease sequence", () => {
138
+ socket.setLastSequence(42);
139
+ socket.setLastSequence(10);
140
+ (0, vitest_1.expect)(socket.getLastSequence()).toBe(42);
141
+ });
142
+ (0, vitest_1.it)("isEventsJoined returns false before joining", () => {
143
+ (0, vitest_1.expect)(socket.isEventsJoined()).toBe(false);
144
+ });
145
+ (0, vitest_1.it)("leaveEventsChannel is safe when not joined", () => {
146
+ (0, vitest_1.expect)(() => socket.leaveEventsChannel()).not.toThrow();
147
+ });
148
+ (0, vitest_1.it)("toMessage parses a raw message payload", () => {
149
+ const raw = {
150
+ id: "m1",
151
+ content: "test",
152
+ sender_id: "u1",
153
+ conversation_id: "c1",
154
+ direction: "inbound",
155
+ channel: "app",
156
+ message_type: "text",
157
+ status: "sent",
158
+ external_id: null,
159
+ metadata: null,
160
+ replied_by_id: null,
161
+ read: false,
162
+ sent_at: "2026-01-01T00:00:00Z",
163
+ inserted_at: "2026-01-01T00:00:00Z",
164
+ };
165
+ const msg = (0, socket_1.toMessage)(raw);
166
+ (0, vitest_1.expect)(msg.id).toBe("m1");
167
+ (0, vitest_1.expect)(msg.content).toBe("test");
168
+ (0, vitest_1.expect)(msg.sender_id).toBe("u1");
169
+ });
170
+ (0, vitest_1.it)("toConversation parses a raw conversation payload", () => {
171
+ const raw = {
172
+ id: "c1",
173
+ status: "active",
174
+ order_id: null,
175
+ business_id: null,
176
+ business: null,
177
+ participants: [],
178
+ messages: [],
179
+ inserted_at: "2026-01-01T00:00:00Z",
180
+ updated_at: "2026-01-01T00:00:00Z",
181
+ };
182
+ const conv = (0, socket_1.toConversation)(raw);
183
+ (0, vitest_1.expect)(conv.id).toBe("c1");
184
+ (0, vitest_1.expect)(conv.status).toBe("active");
185
+ });
186
+ });
187
+ // ─── handlePushPayload tests ───────────────────────────────
188
+ (0, vitest_1.describe)("ChatClient — handlePushPayload", () => {
189
+ let client;
190
+ (0, vitest_1.beforeEach)(() => {
191
+ client = new client_1.ChatClient({
192
+ baseUrl: "http://localhost:4000/api/v1",
193
+ wsUrl: "ws://localhost:4000/ws",
194
+ storage: new MapStorage(),
195
+ });
196
+ client.setCurrentUserId("user-1");
197
+ });
198
+ (0, vitest_1.it)("returns handled:false for unknown event type", () => {
199
+ const result = client.handlePushPayload({ event: "unknown_event" });
200
+ (0, vitest_1.expect)(result.handled).toBe(false);
201
+ });
202
+ (0, vitest_1.it)("returns handled:false for payload without event field", () => {
203
+ const result = client.handlePushPayload({ foo: "bar" });
204
+ (0, vitest_1.expect)(result.handled).toBe(false);
205
+ });
206
+ (0, vitest_1.it)("handles new_message event and emits message:received", () => {
207
+ const events = [];
208
+ client.on("message:received", () => events.push("message:received"));
209
+ const result = client.handlePushPayload({
210
+ event: "new_message",
211
+ message: {
212
+ id: "m1",
213
+ content: "push test",
214
+ sender_id: "u2",
215
+ conversation_id: "conv-1",
216
+ direction: "inbound",
217
+ channel: "app",
218
+ message_type: "text",
219
+ status: "sent",
220
+ external_id: null,
221
+ metadata: null,
222
+ replied_by_id: null,
223
+ read: false,
224
+ sent_at: "2026-01-01T00:00:00Z",
225
+ inserted_at: "2026-01-01T00:00:00Z",
226
+ },
227
+ _sequence: 1,
228
+ });
229
+ (0, vitest_1.expect)(result.handled).toBe(true);
230
+ (0, vitest_1.expect)(result.event).toBe("message:received");
231
+ (0, vitest_1.expect)(result.sequence).toBe(1);
232
+ (0, vitest_1.expect)(events).toContain("message:received");
233
+ (0, vitest_1.expect)(client.store.getMessages("conv-1")).toHaveLength(1);
234
+ });
235
+ (0, vitest_1.it)("handles conversation:created event", () => {
236
+ const events = [];
237
+ client.on("conversation:created", () => events.push("conversation:created"));
238
+ const result = client.handlePushPayload({
239
+ event: "conversation:created",
240
+ conversation: makeConv(),
241
+ });
242
+ (0, vitest_1.expect)(result.handled).toBe(true);
243
+ (0, vitest_1.expect)(result.event).toBe("conversation:created");
244
+ (0, vitest_1.expect)(events).toContain("conversation:created");
245
+ (0, vitest_1.expect)(client.store.getConversation("conv-1")).toBeDefined();
246
+ });
247
+ (0, vitest_1.it)("handles conversation:updated event", () => {
248
+ const events = [];
249
+ client.on("conversation:updated", () => events.push("conversation:updated"));
250
+ const result = client.handlePushPayload({
251
+ event: "conversation:updated",
252
+ conversation: makeConv({ status: "closed" }),
253
+ });
254
+ (0, vitest_1.expect)(result.handled).toBe(true);
255
+ (0, vitest_1.expect)(result.event).toBe("conversation:updated");
256
+ (0, vitest_1.expect)(events).toContain("conversation:updated");
257
+ (0, vitest_1.expect)(client.store.getConversation("conv-1")?.status).toBe("closed");
258
+ });
259
+ (0, vitest_1.it)("handles messages_read event", () => {
260
+ // First add a message
261
+ client.store.upsertMessage("conv-1", makeMsg({ sender_id: "u2" }));
262
+ const events = [];
263
+ client.on("messages_read", () => events.push("messages_read"));
264
+ const result = client.handlePushPayload({
265
+ event: "messages_read",
266
+ conversation_id: "conv-1",
267
+ reader_id: "user-1",
268
+ read_at: "2026-01-01T00:01:00Z",
269
+ });
270
+ (0, vitest_1.expect)(result.handled).toBe(true);
271
+ (0, vitest_1.expect)(result.event).toBe("messages_read");
272
+ (0, vitest_1.expect)(events).toContain("messages_read");
273
+ const msgs = client.store.getMessages("conv-1");
274
+ (0, vitest_1.expect)(msgs[0].read).toBe(true);
275
+ });
276
+ (0, vitest_1.it)("handles unread_count event", () => {
277
+ client.store.upsertConversation(makeConv());
278
+ const events = [];
279
+ client.on("unread_count", () => events.push("unread_count"));
280
+ const result = client.handlePushPayload({
281
+ event: "unread_count",
282
+ conversation_id: "conv-1",
283
+ unread_count: 3,
284
+ });
285
+ (0, vitest_1.expect)(result.handled).toBe(true);
286
+ (0, vitest_1.expect)(result.event).toBe("unread_count");
287
+ (0, vitest_1.expect)(events).toContain("unread_count");
288
+ });
289
+ (0, vitest_1.it)("handles messages_delivered event", () => {
290
+ const events = [];
291
+ client.on("messages_delivered", () => events.push("messages_delivered"));
292
+ const result = client.handlePushPayload({
293
+ event: "messages_delivered",
294
+ conversation_id: "conv-1",
295
+ user_id: "u2",
296
+ });
297
+ (0, vitest_1.expect)(result.handled).toBe(true);
298
+ (0, vitest_1.expect)(result.event).toBe("messages_delivered");
299
+ (0, vitest_1.expect)(events).toContain("messages_delivered");
300
+ });
301
+ (0, vitest_1.it)("tracks sequence number on socket", () => {
302
+ const spy = vitest_1.vi.spyOn(client.socket, "setLastSequence");
303
+ const result = client.handlePushPayload({
304
+ event: "new_message",
305
+ message: makeMsg(),
306
+ _sequence: 42,
307
+ });
308
+ (0, vitest_1.expect)(spy).toHaveBeenCalledWith(42);
309
+ (0, vitest_1.expect)(result.sequence).toBe(42);
310
+ });
311
+ });
312
+ // ─── OptimisticEngine unit tests ───────────────────────────
313
+ (0, vitest_1.describe)("OptimisticEngine", () => {
314
+ let emitter;
315
+ let optimistic;
316
+ (0, vitest_1.beforeEach)(() => {
317
+ emitter = new events_1.TypedEventEmitter();
318
+ optimistic = new optimistic_1.OptimisticEngine(emitter);
319
+ });
320
+ (0, vitest_1.it)("creates an optimistic message with a client ID", () => {
321
+ const temp = optimistic.create("conv-1", "user-a", "Hello");
322
+ (0, vitest_1.expect)(temp._clientId).toBeTruthy();
323
+ (0, vitest_1.expect)(temp.content).toBe("Hello");
324
+ (0, vitest_1.expect)(temp.status).toBe("sending");
325
+ (0, vitest_1.expect)(temp.conversation_id).toBe("conv-1");
326
+ });
327
+ (0, vitest_1.it)("sets status to sending for initial creation", () => {
328
+ const temp = optimistic.create("conv-1", "user-a", "Hi");
329
+ (0, vitest_1.expect)(temp.status).toBe("sending");
330
+ });
331
+ (0, vitest_1.it)("getPending returns messages for a conversation", () => {
332
+ optimistic.create("conv-1", "user-a", "Msg 1");
333
+ optimistic.create("conv-1", "user-a", "Msg 2");
334
+ (0, vitest_1.expect)(optimistic.getPending("conv-1")).toHaveLength(2);
335
+ (0, vitest_1.expect)(optimistic.getPending("conv-2")).toHaveLength(0);
336
+ });
337
+ (0, vitest_1.it)("reconcile matches by content and conversation within 10s window", () => {
338
+ const temp = optimistic.create("conv-1", "user-a", "Match me");
339
+ const serverMsg = {
340
+ id: "server-1",
341
+ content: "Match me",
342
+ sender_id: "user-a",
343
+ conversation_id: "conv-1",
344
+ direction: "outbound",
345
+ channel: "app",
346
+ message_type: "text",
347
+ status: "sent",
348
+ external_id: null,
349
+ metadata: null,
350
+ replied_by_id: null,
351
+ read: false,
352
+ sent_at: new Date().toISOString(),
353
+ inserted_at: new Date().toISOString(),
354
+ };
355
+ const clientId = optimistic.reconcile(serverMsg);
356
+ (0, vitest_1.expect)(clientId).toBe(temp._clientId);
357
+ (0, vitest_1.expect)(optimistic.getPending("conv-1")).toHaveLength(0);
358
+ });
359
+ (0, vitest_1.it)("reconcile returns null for non-matching messages", () => {
360
+ optimistic.create("conv-1", "user-a", "Original");
361
+ const serverMsg = {
362
+ id: "server-1",
363
+ content: "Different content",
364
+ sender_id: "user-a",
365
+ conversation_id: "conv-1",
366
+ direction: "outbound",
367
+ channel: "app",
368
+ message_type: "text",
369
+ status: "sent",
370
+ external_id: null,
371
+ metadata: null,
372
+ replied_by_id: null,
373
+ read: false,
374
+ sent_at: new Date().toISOString(),
375
+ inserted_at: new Date().toISOString(),
376
+ };
377
+ const clientId = optimistic.reconcile(serverMsg);
378
+ (0, vitest_1.expect)(clientId).toBeNull();
379
+ (0, vitest_1.expect)(optimistic.getPending("conv-1")).toHaveLength(1);
380
+ });
381
+ });
382
+ // ─── TypedEventEmitter tests ───────────────────────────────
383
+ (0, vitest_1.describe)("TypedEventEmitter", () => {
384
+ let emitter;
385
+ (0, vitest_1.beforeEach)(() => {
386
+ emitter = new events_1.TypedEventEmitter();
387
+ });
388
+ (0, vitest_1.it)("on registers a listener and returns an unsubscribe function", () => {
389
+ const fn = vitest_1.vi.fn();
390
+ const unsub = emitter.on("message:received", fn);
391
+ (0, vitest_1.expect)(unsub).toBeTypeOf("function");
392
+ });
393
+ (0, vitest_1.it)("emit invokes registered listeners", () => {
394
+ const fn = vitest_1.vi.fn();
395
+ emitter.on("message:received", fn);
396
+ emitter.emit("message:received", { id: "m1" });
397
+ (0, vitest_1.expect)(fn).toHaveBeenCalledWith({ id: "m1" });
398
+ });
399
+ (0, vitest_1.it)("unsub removes the listener", () => {
400
+ const fn = vitest_1.vi.fn();
401
+ const unsub = emitter.on("message:received", fn);
402
+ unsub();
403
+ emitter.emit("message:received", { id: "m1" });
404
+ (0, vitest_1.expect)(fn).not.toHaveBeenCalled();
405
+ });
406
+ (0, vitest_1.it)("removeAllListeners clears all listeners", () => {
407
+ const fn1 = vitest_1.vi.fn();
408
+ const fn2 = vitest_1.vi.fn();
409
+ emitter.on("message:received", fn1);
410
+ emitter.on("message:sent", fn2);
411
+ emitter.removeAllListeners();
412
+ emitter.emit("message:received", { id: "m1" });
413
+ emitter.emit("message:sent", { id: "m2" });
414
+ (0, vitest_1.expect)(fn1).not.toHaveBeenCalled();
415
+ (0, vitest_1.expect)(fn2).not.toHaveBeenCalled();
416
+ });
417
+ (0, vitest_1.it)("off removes a specific listener", () => {
418
+ const fn = vitest_1.vi.fn();
419
+ emitter.on("message:received", fn);
420
+ emitter.off("message:received", fn);
421
+ emitter.emit("message:received", { id: "m1" });
422
+ (0, vitest_1.expect)(fn).not.toHaveBeenCalled();
423
+ });
424
+ });
425
+ //# sourceMappingURL=unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unit.test.js","sourceRoot":"","sources":["../src/unit.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@teincfood/chat-client",
3
+ "version": "0.1.0",
4
+ "description": "Headless chat client library for TeincFood — handles auth, WebSocket, optimistic sends, and reactive React/RN bindings out of the box.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "prepublishOnly": "npm run build",
13
+ "test": "vitest run",
14
+ "test:watch": "vitest"
15
+ },
16
+ "dependencies": {},
17
+ "peerDependencies": {
18
+ "react": "^18.0.0 || ^19.0.0"
19
+ },
20
+ "peerDependenciesMeta": {
21
+ "react": {
22
+ "optional": true
23
+ }
24
+ },
25
+ "devDependencies": {
26
+ "@types/react": "^19.0.0",
27
+ "typescript": "^5.8.0",
28
+ "vitest": "^3.1.0"
29
+ },
30
+ "license": "MIT"
31
+ }