hermes-chat-react 0.1.2 → 0.1.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/dist/{chunk-OMLFDWYU.js → chunk-6L73MEPH.js} +16 -2
- package/dist/chunk-6L73MEPH.js.map +1 -0
- package/dist/cli.cjs +87 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.cts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +64 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.cjs +15 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +1 -1
- package/dist/react.cjs +1763 -522
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +624 -22
- package/dist/react.d.ts +624 -22
- package/dist/react.js +1657 -463
- package/dist/react.js.map +1 -1
- package/package.json +13 -3
- package/dist/chunk-OMLFDWYU.js.map +0 -1
|
@@ -75,7 +75,7 @@ var HermesClient = class extends EventEmitter {
|
|
|
75
75
|
apiKey: cfg.apiKey,
|
|
76
76
|
secret: cfg.secret,
|
|
77
77
|
userId: cfg.userId,
|
|
78
|
-
displayName: cfg.displayName
|
|
78
|
+
displayName: cfg.displayName,
|
|
79
79
|
avatar: cfg.avatar,
|
|
80
80
|
email: cfg.email
|
|
81
81
|
})
|
|
@@ -186,6 +186,20 @@ var HermesClient = class extends EventEmitter {
|
|
|
186
186
|
const res = await this._emit("room:list");
|
|
187
187
|
return res.rooms;
|
|
188
188
|
}
|
|
189
|
+
async getUsers() {
|
|
190
|
+
if (!this.token) throw new Error("Not connected");
|
|
191
|
+
const res = await fetch(`${this.config.endpoint}/hermes/users`, {
|
|
192
|
+
headers: { Authorization: `Bearer ${this.token}` }
|
|
193
|
+
});
|
|
194
|
+
const data = await res.json();
|
|
195
|
+
if (!data.success) throw new Error(data.message || "Failed to fetch users");
|
|
196
|
+
return data.users.map((u) => ({
|
|
197
|
+
userId: u._id,
|
|
198
|
+
displayName: u.displayName,
|
|
199
|
+
avatar: u.avatar,
|
|
200
|
+
email: u.email
|
|
201
|
+
}));
|
|
202
|
+
}
|
|
189
203
|
async addMember(roomId, newMemberId) {
|
|
190
204
|
await this._emit("room:member:add", { roomId, newMemberId });
|
|
191
205
|
}
|
|
@@ -231,4 +245,4 @@ var HermesClient = class extends EventEmitter {
|
|
|
231
245
|
export {
|
|
232
246
|
HermesClient
|
|
233
247
|
};
|
|
234
|
-
//# sourceMappingURL=chunk-
|
|
248
|
+
//# sourceMappingURL=chunk-6L73MEPH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/HermesClient.ts","../src/core/EventEmitter.ts"],"sourcesContent":["import { io, Socket } from \"socket.io-client\";\nimport { EventEmitter } from \"./EventEmitter\";\nimport type {\n HermesConfig,\n HermesUser,\n ConnectionStatus,\n Message,\n Room,\n SendMessageInput,\n MessageHistoryResult,\n CreateDirectRoomInput,\n CreateGroupRoomInput,\n UploadResult,\n} from \"../types/index\";\n\ninterface ApiKeyConfig {\n endpoint: string;\n apiKey: string;\n secret: string;\n userId: string;\n displayName: string;\n avatar?: string;\n email?: string;\n}\n\nexport class HermesClient extends EventEmitter {\n private config: HermesConfig;\n private socket: Socket | null = null;\n private token: string | null = null;\n\n public user: HermesUser | null = null;\n public status: ConnectionStatus = \"idle\";\n\n constructor(config: HermesConfig) {\n super();\n this.config = config;\n if (\"token\" in config && typeof config.token === \"string\") {\n this.token = config.token;\n }\n }\n\n async connect(): Promise<HermesUser> {\n this.status = \"connecting\";\n try {\n if (this.token) {\n await this._connectSocket();\n return this.user!;\n }\n if (!(\"apiKey\" in this.config)) {\n throw new Error(\"Either token or (apiKey + secret + userId) must be provided\");\n }\n const cfg = this.config as unknown as ApiKeyConfig;\n const res = await fetch(`${cfg.endpoint}/hermes/connect`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n apiKey: cfg.apiKey,\n secret: cfg.secret,\n userId: cfg.userId,\n displayName: cfg.displayName,\n avatar: cfg.avatar,\n email: cfg.email,\n }),\n });\n const data = await res.json();\n if (!data.success) throw new Error(data.message || \"Auth failed\");\n this.token = data.token;\n this.user = {\n userId: data.user.hermesUserId,\n displayName: data.user.displayName,\n avatar: data.user.avatar,\n email: data.user.email,\n };\n await this._connectSocket();\n return this.user!;\n } catch (err) {\n this.status = \"error\";\n this.emit(\"error\", err as Error);\n throw err;\n }\n }\n\n private async _connectSocket(): Promise<void> {\n this.socket = io(`${this.config.endpoint}/hermes`, {\n auth: { token: this.token },\n transports: [\"websocket\"],\n reconnection: true,\n reconnectionAttempts: 5,\n reconnectionDelay: 1000,\n });\n this._wireSocketEvents();\n await new Promise<void>((resolve, reject) => {\n this.socket!.once(\"connect\", resolve);\n this.socket!.once(\"connect_error\", (err) => reject(err));\n });\n this.status = \"connected\";\n this.emit(\"connected\");\n }\n\n disconnect(): void {\n this.socket?.disconnect();\n this.socket = null;\n this.token = null;\n this.status = \"disconnected\";\n this.emit(\"disconnected\", \"manual\");\n }\n\n private _wireSocketEvents(): void {\n const s = this.socket!;\n s.on(\"disconnect\", (reason) => { this.status = \"disconnected\"; this.emit(\"disconnected\", reason); });\n s.on(\"connect_error\", (err) => { this.status = \"error\"; this.emit(\"error\", err); });\n s.on(\"message:receive\", (msg: Message) => this.emit(\"message:receive\", msg));\n s.on(\"message:deleted\", (data) => this.emit(\"message:deleted\", data));\n s.on(\"message:edited\", (msg: Message) => this.emit(\"message:edited\", msg));\n s.on(\"room:created\", (room: Room) => this.emit(\"room:created\", room));\n s.on(\"room:deleted\", (data) => this.emit(\"room:deleted\", data));\n s.on(\"room:member:joined\", (data) => this.emit(\"room:member:joined\", data));\n s.on(\"room:member:left\", (data) => this.emit(\"room:member:left\", data));\n s.on(\"user:online\", (event) => this.emit(\"user:online\", event));\n s.on(\"user:offline\", (event) => this.emit(\"user:offline\", event));\n s.on(\"typing:started\", (event) => this.emit(\"typing:started\", event));\n s.on(\"typing:stopped\", (event) => this.emit(\"typing:stopped\", event));\n s.on(\"receipt:updated\", (event) => this.emit(\"receipt:updated\", event));\n s.on(\"reaction:updated\", (event) => this.emit(\"reaction:updated\", event));\n }\n\n _emit<T = any>(event: string, data?: any): Promise<T> {\n return new Promise((resolve, reject) => {\n if (!this.socket?.connected) return reject(new Error(\"Not connected to Hermes engine\"));\n const timer = setTimeout(() => reject(new Error(`Timed out waiting for \"${event}\"`)), 5000);\n const callback = (response: any) => {\n clearTimeout(timer);\n if (response?.success === false) reject(new Error(response.error || \"Unknown error\"));\n else resolve(response);\n };\n if (data && Object.keys(data).length > 0) this.socket!.emit(event, data, callback);\n else this.socket!.emit(event, callback);\n });\n }\n\n async sendMessage(input: SendMessageInput): Promise<Message> {\n const res = await this._emit<{ message: Message }>(\"message:send\", input);\n return res.message;\n }\n async getHistory(roomId: string, before?: string, limit?: number): Promise<MessageHistoryResult> {\n return this._emit(\"message:history\", { roomId, before, limit });\n }\n async deleteMessage(messageId: string, roomId: string): Promise<void> {\n await this._emit(\"message:delete\", { messageId, roomId });\n }\n async editMessage(messageId: string, roomId: string, text: string): Promise<Message> {\n const res = await this._emit<{ message: Message }>(\"message:edit\", { messageId, roomId, text });\n return res.message;\n }\n async createDirectRoom(input: CreateDirectRoomInput): Promise<Room> {\n const res = await this._emit<{ room: Room }>(\"room:create:direct\", { targetHermesUserId: input.targetUserId });\n return res.room;\n }\n async createGroupRoom(input: CreateGroupRoomInput): Promise<Room> {\n const res = await this._emit<{ room: Room }>(\"room:create:group\", input);\n return res.room;\n }\n async deleteRoom(roomId: string): Promise<void> { await this._emit(\"room:delete\", { roomId }); }\n async getRooms(): Promise<Room[]> {\n const res = await this._emit<{ rooms: Room[] }>(\"room:list\");\n return res.rooms;\n }\n async getUsers(): Promise<HermesUser[]> {\n if (!this.token) throw new Error(\"Not connected\");\n const res = await fetch(`${this.config.endpoint}/hermes/users`, {\n headers: { Authorization: `Bearer ${this.token}` },\n });\n const data = await res.json();\n if (!data.success) throw new Error(data.message || \"Failed to fetch users\");\n return data.users.map((u: any) => ({\n userId: u._id,\n displayName: u.displayName,\n avatar: u.avatar,\n email: u.email\n }));\n }\n async addMember(roomId: string, newMemberId: string): Promise<void> { await this._emit(\"room:member:add\", { roomId, newMemberId }); }\n async removeMember(roomId: string, targetId: string): Promise<void> { await this._emit(\"room:member:remove\", { roomId, targetId }); }\n pingPresence(roomId: string): void { this.socket?.emit(\"presence:ping\", { roomId }); }\n startTyping(roomId: string): void { this.socket?.emit(\"typing:start\", { roomId }); }\n stopTyping(roomId: string): void { this.socket?.emit(\"typing:stop\", { roomId }); }\n async markSeen(roomId: string, lastMessageId: string): Promise<void> { await this._emit(\"receipt:seen\", { roomId, lastMessageId }); }\n async addReaction(messageId: string, roomId: string, emoji: string): Promise<void> { await this._emit(\"reaction:add\", { messageId, roomId, emoji }); }\n async uploadFile(file: File): Promise<UploadResult> {\n if (!this.token) throw new Error(\"Not connected\");\n const formData = new FormData();\n formData.append(\"file\", file);\n const res = await fetch(`${this.config.endpoint}/hermes/upload`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${this.token}` },\n body: formData,\n });\n const data = await res.json();\n if (!data.success) throw new Error(data.error || \"Upload failed\");\n return data as UploadResult;\n }\n get isConnected(): boolean { return this.status === \"connected\" && !!this.socket?.connected; }\n get currentUser(): HermesUser | null { return this.user; }\n}\n","import type { HermesEvents } from \"../types/index\";\n\ntype EventKey = keyof HermesEvents;\ntype EventCallback<K extends EventKey> = HermesEvents[K];\ntype ListenerMap = { [K in EventKey]?: EventCallback<K>[] };\n\nexport class EventEmitter {\n private listeners: ListenerMap = {};\n\n on<K extends EventKey>(event: K, callback: EventCallback<K>): this {\n if (!this.listeners[event]) {\n this.listeners[event] = [];\n }\n (this.listeners[event] as EventCallback<K>[]).push(callback);\n return this;\n }\n\n off<K extends EventKey>(event: K, callback: EventCallback<K>): void {\n if (!this.listeners[event]) return;\n this.listeners[event] = (\n this.listeners[event] as EventCallback<K>[]\n ).filter((cb) => cb !== callback) as any;\n }\n\n once<K extends EventKey>(event: K, callback: EventCallback<K>): this {\n const wrapper = ((...args: any[]) => {\n (callback as any)(...args);\n this.off(event, wrapper as any);\n }) as EventCallback<K>;\n return this.on(event, wrapper);\n }\n\n emit<K extends EventKey>(\n event: K,\n ...args: Parameters<EventCallback<K>>\n ): this {\n if (!this.listeners[event]) return this;\n (this.listeners[event] as EventCallback<K>[]).forEach((cb) =>\n (cb as any)(...args),\n );\n return this;\n }\n\n removeAllListeners<K extends EventKey>(event?: K): this {\n if (event) {\n delete this.listeners[event];\n } else {\n this.listeners = {};\n }\n return this;\n }\n\n listenerCount<K extends EventKey>(event: K): number {\n return this.listeners[event]?.length ?? 0;\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/cli.cjs
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
18
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
19
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
20
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
21
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
22
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
23
|
+
mod
|
|
24
|
+
));
|
|
25
|
+
|
|
26
|
+
// src/cli.ts
|
|
27
|
+
var import_fs = __toESM(require("fs"), 1);
|
|
28
|
+
var import_path = __toESM(require("path"), 1);
|
|
29
|
+
var import_promises = __toESM(require("readline/promises"), 1);
|
|
30
|
+
var args = process.argv.slice(2);
|
|
31
|
+
var command = args[0];
|
|
32
|
+
if (command !== "init") {
|
|
33
|
+
console.log(`
|
|
34
|
+
Hermes CLI Usage:
|
|
35
|
+
|
|
36
|
+
npx hermes init Creates a boilerplate hermes.config.ts file
|
|
37
|
+
`);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
var run = async () => {
|
|
41
|
+
console.log("Welcome to Hermes CLI! \u{1F680}");
|
|
42
|
+
console.log("Let's set up your hermes.config.ts.\\n");
|
|
43
|
+
console.log("Press Enter to skip any field and use a placeholder to paste later.\\n");
|
|
44
|
+
const rl = import_promises.default.createInterface({
|
|
45
|
+
input: process.stdin,
|
|
46
|
+
output: process.stdout
|
|
47
|
+
});
|
|
48
|
+
const endpoint = await rl.question("Hermes API Endpoint (e.g., http://localhost:8080): ");
|
|
49
|
+
const apiKey = await rl.question("API Key: ");
|
|
50
|
+
const secret = await rl.question("API Secret: ");
|
|
51
|
+
const userId = await rl.question("Your User ID (e.g., user-123): ");
|
|
52
|
+
const displayName = await rl.question("Your Display Name (e.g., Alice): ");
|
|
53
|
+
rl.close();
|
|
54
|
+
const configContent = `// Auto-generated Hermes Configuration
|
|
55
|
+
// Paste your credentials below to connect to the Hermes server.
|
|
56
|
+
export const hermesConfig = {
|
|
57
|
+
endpoint: "${endpoint || "http://localhost:8080"}",
|
|
58
|
+
apiKey: "${apiKey || "YOUR_API_KEY"}",
|
|
59
|
+
secret: "${secret || "YOUR_SECRET"}",
|
|
60
|
+
userId: "${userId || "user-123"}",
|
|
61
|
+
displayName: "${displayName || "User"}",
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
* Example Usage:
|
|
66
|
+
*
|
|
67
|
+
* import { hermesConfig } from './hermes.config';
|
|
68
|
+
* import { HermesClient } from 'hermes-chat-react';
|
|
69
|
+
*
|
|
70
|
+
* const client = new HermesClient(hermesConfig);
|
|
71
|
+
* await client.connect();
|
|
72
|
+
*/
|
|
73
|
+
`;
|
|
74
|
+
const configPath = import_path.default.join(process.cwd(), "hermes.config.ts");
|
|
75
|
+
if (import_fs.default.existsSync(configPath)) {
|
|
76
|
+
console.log("\\n\u26A0\uFE0F hermes.config.ts already exists in this directory. Aborting to avoid overwrite.");
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
import_fs.default.writeFileSync(configPath, configContent, "utf-8");
|
|
80
|
+
console.log(`\\n\u2705 Successfully created hermes.config.ts`);
|
|
81
|
+
console.log("You can now import this configuration into your application.");
|
|
82
|
+
};
|
|
83
|
+
run().catch((err) => {
|
|
84
|
+
console.error("An error occurred during initialization:", err);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=cli.cjs.map
|
package/dist/cli.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport fs from \"fs\";\nimport path from \"path\";\nimport readline from \"readline/promises\";\n\n// Basic CLI argument parsing\nconst args = process.argv.slice(2);\nconst command = args[0];\n\nif (command !== \"init\") {\n console.log(`\nHermes CLI Usage:\n\n npx hermes init Creates a boilerplate hermes.config.ts file\n`);\n process.exit(1);\n}\n\nconst run = async () => {\n console.log(\"Welcome to Hermes CLI! 🚀\");\n console.log(\"Let's set up your hermes.config.ts.\\\\n\");\n console.log(\"Press Enter to skip any field and use a placeholder to paste later.\\\\n\");\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const endpoint = await rl.question(\"Hermes API Endpoint (e.g., http://localhost:8080): \");\n const apiKey = await rl.question(\"API Key: \");\n const secret = await rl.question(\"API Secret: \");\n const userId = await rl.question(\"Your User ID (e.g., user-123): \");\n const displayName = await rl.question(\"Your Display Name (e.g., Alice): \");\n\n rl.close();\n\n const configContent = `// Auto-generated Hermes Configuration\n// Paste your credentials below to connect to the Hermes server.\nexport const hermesConfig = {\n endpoint: \"${endpoint || \"http://localhost:8080\"}\",\n apiKey: \"${apiKey || \"YOUR_API_KEY\"}\",\n secret: \"${secret || \"YOUR_SECRET\"}\",\n userId: \"${userId || \"user-123\"}\",\n displayName: \"${displayName || \"User\"}\",\n};\n\n/*\n * Example Usage:\n *\n * import { hermesConfig } from './hermes.config';\n * import { HermesClient } from 'hermes-chat-react';\n * \n * const client = new HermesClient(hermesConfig);\n * await client.connect();\n */\n`;\n\n const configPath = path.join(process.cwd(), \"hermes.config.ts\");\n \n if (fs.existsSync(configPath)) {\n console.log(\"\\\\n⚠️ hermes.config.ts already exists in this directory. Aborting to avoid overwrite.\");\n process.exit(1);\n }\n\n fs.writeFileSync(configPath, configContent, \"utf-8\");\n console.log(`\\\\n✅ Successfully created hermes.config.ts`);\n console.log(\"You can now import this configuration into your application.\");\n};\n\nrun().catch((err) => {\n console.error(\"An error occurred during initialization:\", err);\n process.exit(1);\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,gBAAe;AACf,kBAAiB;AACjB,sBAAqB;AAGrB,IAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,IAAM,UAAU,KAAK,CAAC;AAEtB,IAAI,YAAY,QAAQ;AACtB,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA,CAIb;AACC,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAM,MAAM,YAAY;AACtB,UAAQ,IAAI,kCAA2B;AACvC,UAAQ,IAAI,wCAAwC;AACpD,UAAQ,IAAI,wEAAwE;AAEpF,QAAM,KAAK,gBAAAA,QAAS,gBAAgB;AAAA,IAClC,OAAO,QAAQ;AAAA,IACf,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,QAAM,WAAW,MAAM,GAAG,SAAS,qDAAqD;AACxF,QAAM,SAAS,MAAM,GAAG,SAAS,WAAW;AAC5C,QAAM,SAAS,MAAM,GAAG,SAAS,cAAc;AAC/C,QAAM,SAAS,MAAM,GAAG,SAAS,iCAAiC;AAClE,QAAM,cAAc,MAAM,GAAG,SAAS,mCAAmC;AAEzE,KAAG,MAAM;AAET,QAAM,gBAAgB;AAAA;AAAA;AAAA,eAGT,YAAY,uBAAuB;AAAA,aACrC,UAAU,cAAc;AAAA,aACxB,UAAU,aAAa;AAAA,aACvB,UAAU,UAAU;AAAA,kBACf,eAAe,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcrC,QAAM,aAAa,YAAAC,QAAK,KAAK,QAAQ,IAAI,GAAG,kBAAkB;AAE9D,MAAI,UAAAC,QAAG,WAAW,UAAU,GAAG;AAC7B,YAAQ,IAAI,kGAAwF;AACpG,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,YAAAA,QAAG,cAAc,YAAY,eAAe,OAAO;AACnD,UAAQ,IAAI,iDAA4C;AACxD,UAAQ,IAAI,8DAA8D;AAC5E;AAEA,IAAI,EAAE,MAAM,CAAC,QAAQ;AACnB,UAAQ,MAAM,4CAA4C,GAAG;AAC7D,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":["readline","path","fs"]}
|
package/dist/cli.d.cts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/cli.ts
|
|
4
|
+
import fs from "fs";
|
|
5
|
+
import path from "path";
|
|
6
|
+
import readline from "readline/promises";
|
|
7
|
+
var args = process.argv.slice(2);
|
|
8
|
+
var command = args[0];
|
|
9
|
+
if (command !== "init") {
|
|
10
|
+
console.log(`
|
|
11
|
+
Hermes CLI Usage:
|
|
12
|
+
|
|
13
|
+
npx hermes init Creates a boilerplate hermes.config.ts file
|
|
14
|
+
`);
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
var run = async () => {
|
|
18
|
+
console.log("Welcome to Hermes CLI! \u{1F680}");
|
|
19
|
+
console.log("Let's set up your hermes.config.ts.\\n");
|
|
20
|
+
console.log("Press Enter to skip any field and use a placeholder to paste later.\\n");
|
|
21
|
+
const rl = readline.createInterface({
|
|
22
|
+
input: process.stdin,
|
|
23
|
+
output: process.stdout
|
|
24
|
+
});
|
|
25
|
+
const endpoint = await rl.question("Hermes API Endpoint (e.g., http://localhost:8080): ");
|
|
26
|
+
const apiKey = await rl.question("API Key: ");
|
|
27
|
+
const secret = await rl.question("API Secret: ");
|
|
28
|
+
const userId = await rl.question("Your User ID (e.g., user-123): ");
|
|
29
|
+
const displayName = await rl.question("Your Display Name (e.g., Alice): ");
|
|
30
|
+
rl.close();
|
|
31
|
+
const configContent = `// Auto-generated Hermes Configuration
|
|
32
|
+
// Paste your credentials below to connect to the Hermes server.
|
|
33
|
+
export const hermesConfig = {
|
|
34
|
+
endpoint: "${endpoint || "http://localhost:8080"}",
|
|
35
|
+
apiKey: "${apiKey || "YOUR_API_KEY"}",
|
|
36
|
+
secret: "${secret || "YOUR_SECRET"}",
|
|
37
|
+
userId: "${userId || "user-123"}",
|
|
38
|
+
displayName: "${displayName || "User"}",
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/*
|
|
42
|
+
* Example Usage:
|
|
43
|
+
*
|
|
44
|
+
* import { hermesConfig } from './hermes.config';
|
|
45
|
+
* import { HermesClient } from 'hermes-chat-react';
|
|
46
|
+
*
|
|
47
|
+
* const client = new HermesClient(hermesConfig);
|
|
48
|
+
* await client.connect();
|
|
49
|
+
*/
|
|
50
|
+
`;
|
|
51
|
+
const configPath = path.join(process.cwd(), "hermes.config.ts");
|
|
52
|
+
if (fs.existsSync(configPath)) {
|
|
53
|
+
console.log("\\n\u26A0\uFE0F hermes.config.ts already exists in this directory. Aborting to avoid overwrite.");
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
fs.writeFileSync(configPath, configContent, "utf-8");
|
|
57
|
+
console.log(`\\n\u2705 Successfully created hermes.config.ts`);
|
|
58
|
+
console.log("You can now import this configuration into your application.");
|
|
59
|
+
};
|
|
60
|
+
run().catch((err) => {
|
|
61
|
+
console.error("An error occurred during initialization:", err);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport fs from \"fs\";\nimport path from \"path\";\nimport readline from \"readline/promises\";\n\n// Basic CLI argument parsing\nconst args = process.argv.slice(2);\nconst command = args[0];\n\nif (command !== \"init\") {\n console.log(`\nHermes CLI Usage:\n\n npx hermes init Creates a boilerplate hermes.config.ts file\n`);\n process.exit(1);\n}\n\nconst run = async () => {\n console.log(\"Welcome to Hermes CLI! 🚀\");\n console.log(\"Let's set up your hermes.config.ts.\\\\n\");\n console.log(\"Press Enter to skip any field and use a placeholder to paste later.\\\\n\");\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const endpoint = await rl.question(\"Hermes API Endpoint (e.g., http://localhost:8080): \");\n const apiKey = await rl.question(\"API Key: \");\n const secret = await rl.question(\"API Secret: \");\n const userId = await rl.question(\"Your User ID (e.g., user-123): \");\n const displayName = await rl.question(\"Your Display Name (e.g., Alice): \");\n\n rl.close();\n\n const configContent = `// Auto-generated Hermes Configuration\n// Paste your credentials below to connect to the Hermes server.\nexport const hermesConfig = {\n endpoint: \"${endpoint || \"http://localhost:8080\"}\",\n apiKey: \"${apiKey || \"YOUR_API_KEY\"}\",\n secret: \"${secret || \"YOUR_SECRET\"}\",\n userId: \"${userId || \"user-123\"}\",\n displayName: \"${displayName || \"User\"}\",\n};\n\n/*\n * Example Usage:\n *\n * import { hermesConfig } from './hermes.config';\n * import { HermesClient } from 'hermes-chat-react';\n * \n * const client = new HermesClient(hermesConfig);\n * await client.connect();\n */\n`;\n\n const configPath = path.join(process.cwd(), \"hermes.config.ts\");\n \n if (fs.existsSync(configPath)) {\n console.log(\"\\\\n⚠️ hermes.config.ts already exists in this directory. Aborting to avoid overwrite.\");\n process.exit(1);\n }\n\n fs.writeFileSync(configPath, configContent, \"utf-8\");\n console.log(`\\\\n✅ Successfully created hermes.config.ts`);\n console.log(\"You can now import this configuration into your application.\");\n};\n\nrun().catch((err) => {\n console.error(\"An error occurred during initialization:\", err);\n process.exit(1);\n});\n"],"mappings":";;;AAEA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,cAAc;AAGrB,IAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,IAAM,UAAU,KAAK,CAAC;AAEtB,IAAI,YAAY,QAAQ;AACtB,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA,CAIb;AACC,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAM,MAAM,YAAY;AACtB,UAAQ,IAAI,kCAA2B;AACvC,UAAQ,IAAI,wCAAwC;AACpD,UAAQ,IAAI,wEAAwE;AAEpF,QAAM,KAAK,SAAS,gBAAgB;AAAA,IAClC,OAAO,QAAQ;AAAA,IACf,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,QAAM,WAAW,MAAM,GAAG,SAAS,qDAAqD;AACxF,QAAM,SAAS,MAAM,GAAG,SAAS,WAAW;AAC5C,QAAM,SAAS,MAAM,GAAG,SAAS,cAAc;AAC/C,QAAM,SAAS,MAAM,GAAG,SAAS,iCAAiC;AAClE,QAAM,cAAc,MAAM,GAAG,SAAS,mCAAmC;AAEzE,KAAG,MAAM;AAET,QAAM,gBAAgB;AAAA;AAAA;AAAA,eAGT,YAAY,uBAAuB;AAAA,aACrC,UAAU,cAAc;AAAA,aACxB,UAAU,aAAa;AAAA,aACvB,UAAU,UAAU;AAAA,kBACf,eAAe,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcrC,QAAM,aAAa,KAAK,KAAK,QAAQ,IAAI,GAAG,kBAAkB;AAE9D,MAAI,GAAG,WAAW,UAAU,GAAG;AAC7B,YAAQ,IAAI,kGAAwF;AACpG,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,KAAG,cAAc,YAAY,eAAe,OAAO;AACnD,UAAQ,IAAI,iDAA4C;AACxD,UAAQ,IAAI,8DAA8D;AAC5E;AAEA,IAAI,EAAE,MAAM,CAAC,QAAQ;AACnB,UAAQ,MAAM,4CAA4C,GAAG;AAC7D,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -101,7 +101,7 @@ var HermesClient = class extends EventEmitter {
|
|
|
101
101
|
apiKey: cfg.apiKey,
|
|
102
102
|
secret: cfg.secret,
|
|
103
103
|
userId: cfg.userId,
|
|
104
|
-
displayName: cfg.displayName
|
|
104
|
+
displayName: cfg.displayName,
|
|
105
105
|
avatar: cfg.avatar,
|
|
106
106
|
email: cfg.email
|
|
107
107
|
})
|
|
@@ -212,6 +212,20 @@ var HermesClient = class extends EventEmitter {
|
|
|
212
212
|
const res = await this._emit("room:list");
|
|
213
213
|
return res.rooms;
|
|
214
214
|
}
|
|
215
|
+
async getUsers() {
|
|
216
|
+
if (!this.token) throw new Error("Not connected");
|
|
217
|
+
const res = await fetch(`${this.config.endpoint}/hermes/users`, {
|
|
218
|
+
headers: { Authorization: `Bearer ${this.token}` }
|
|
219
|
+
});
|
|
220
|
+
const data = await res.json();
|
|
221
|
+
if (!data.success) throw new Error(data.message || "Failed to fetch users");
|
|
222
|
+
return data.users.map((u) => ({
|
|
223
|
+
userId: u._id,
|
|
224
|
+
displayName: u.displayName,
|
|
225
|
+
avatar: u.avatar,
|
|
226
|
+
email: u.email
|
|
227
|
+
}));
|
|
228
|
+
}
|
|
215
229
|
async addMember(roomId, newMemberId) {
|
|
216
230
|
await this._emit("room:member:add", { roomId, newMemberId });
|
|
217
231
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/core/HermesClient.ts","../src/core/EventEmitter.ts"],"sourcesContent":["export { HermesClient } from './core/HermesClient';\nexport * from './types/index';\n","import { io, Socket } from \"socket.io-client\";\nimport { EventEmitter } from \"./EventEmitter\";\nimport type {\n HermesConfig,\n HermesUser,\n ConnectionStatus,\n Message,\n Room,\n SendMessageInput,\n MessageHistoryResult,\n CreateDirectRoomInput,\n CreateGroupRoomInput,\n UploadResult,\n} from \"../types/index\";\n\n// Manual interface — avoids Extract<> returning never on discriminated union\ninterface ApiKeyConfig {\n endpoint: string;\n apiKey: string;\n secret: string;\n userId: string;\n displayName: string;\n avatar?: string;\n email?: string;\n}\n\nexport class HermesClient extends EventEmitter {\n private config: HermesConfig;\n private socket: Socket | null = null;\n private token: string | null = null;\n\n public user: HermesUser | null = null;\n public status: ConnectionStatus = \"idle\";\n\n constructor(config: HermesConfig) {\n super();\n this.config = config;\n if (\"token\" in config && typeof config.token === \"string\") {\n this.token = config.token;\n }\n }\n\n async connect(): Promise<HermesUser> {\n this.status = \"connecting\";\n try {\n if (this.token) {\n await this._connectSocket();\n return this.user!;\n }\n if (!(\"apiKey\" in this.config)) {\n throw new Error(\"Either token or (apiKey + secret + userId) must be provided\");\n }\n const cfg = this.config as unknown as ApiKeyConfig;\n const res = await fetch(`${cfg.endpoint}/hermes/connect`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n apiKey: cfg.apiKey,\n secret: cfg.secret,\n userId: cfg.userId,\n displayName: cfg.displayName ?? cfg.userId,\n avatar: cfg.avatar,\n email: cfg.email,\n }),\n });\n const data = await res.json();\n if (!data.success) throw new Error(data.message || \"Auth failed\");\n this.token = data.token;\n this.user = {\n userId: data.user.hermesUserId,\n displayName: data.user.displayName,\n avatar: data.user.avatar,\n email: data.user.email,\n };\n await this._connectSocket();\n return this.user!;\n } catch (err) {\n this.status = \"error\";\n this.emit(\"error\", err as Error);\n throw err;\n }\n }\n\n private async _connectSocket(): Promise<void> {\n this.socket = io(`${this.config.endpoint}/hermes`, {\n auth: { token: this.token },\n transports: [\"websocket\"],\n reconnection: true,\n reconnectionAttempts: 5,\n reconnectionDelay: 1000,\n });\n this._wireSocketEvents();\n await new Promise<void>((resolve, reject) => {\n this.socket!.once(\"connect\", resolve);\n this.socket!.once(\"connect_error\", (err) => reject(err));\n });\n this.status = \"connected\";\n this.emit(\"connected\");\n }\n\n disconnect(): void {\n this.socket?.disconnect();\n this.socket = null;\n this.token = null;\n this.status = \"disconnected\";\n this.emit(\"disconnected\", \"manual\");\n }\n\n private _wireSocketEvents(): void {\n const s = this.socket!;\n s.on(\"disconnect\", (reason) => { this.status = \"disconnected\"; this.emit(\"disconnected\", reason); });\n s.on(\"connect_error\", (err) => { this.status = \"error\"; this.emit(\"error\", err); });\n s.on(\"message:receive\", (msg: Message) => this.emit(\"message:receive\", msg));\n s.on(\"message:deleted\", (data) => this.emit(\"message:deleted\", data));\n s.on(\"message:edited\", (msg: Message) => this.emit(\"message:edited\", msg));\n s.on(\"room:created\", (room: Room) => this.emit(\"room:created\", room));\n s.on(\"room:deleted\", (data) => this.emit(\"room:deleted\", data));\n s.on(\"room:member:joined\", (data) => this.emit(\"room:member:joined\", data));\n s.on(\"room:member:left\", (data) => this.emit(\"room:member:left\", data));\n s.on(\"user:online\", (event) => this.emit(\"user:online\", event));\n s.on(\"user:offline\", (event) => this.emit(\"user:offline\", event));\n s.on(\"typing:started\", (event) => this.emit(\"typing:started\", event));\n s.on(\"typing:stopped\", (event) => this.emit(\"typing:stopped\", event));\n s.on(\"receipt:updated\", (event) => this.emit(\"receipt:updated\", event));\n s.on(\"reaction:updated\", (event) => this.emit(\"reaction:updated\", event));\n }\n\n _emit<T = any>(event: string, data?: any): Promise<T> {\n return new Promise((resolve, reject) => {\n if (!this.socket?.connected) return reject(new Error(\"Not connected to Hermes engine\"));\n const timer = setTimeout(() => reject(new Error(`Timed out waiting for \"${event}\"`)), 5000);\n const callback = (response: any) => {\n clearTimeout(timer);\n if (response?.success === false) reject(new Error(response.error || \"Unknown error\"));\n else resolve(response);\n };\n if (data && Object.keys(data).length > 0) this.socket!.emit(event, data, callback);\n else this.socket!.emit(event, callback);\n });\n }\n\n async sendMessage(input: SendMessageInput): Promise<Message> {\n const res = await this._emit<{ message: Message }>(\"message:send\", input);\n return res.message;\n }\n async getHistory(roomId: string, before?: string, limit?: number): Promise<MessageHistoryResult> {\n return this._emit(\"message:history\", { roomId, before, limit });\n }\n async deleteMessage(messageId: string, roomId: string): Promise<void> {\n await this._emit(\"message:delete\", { messageId, roomId });\n }\n async editMessage(messageId: string, roomId: string, text: string): Promise<Message> {\n const res = await this._emit<{ message: Message }>(\"message:edit\", { messageId, roomId, text });\n return res.message;\n }\n async createDirectRoom(input: CreateDirectRoomInput): Promise<Room> {\n const res = await this._emit<{ room: Room }>(\"room:create:direct\", { targetHermesUserId: input.targetUserId });\n return res.room;\n }\n async createGroupRoom(input: CreateGroupRoomInput): Promise<Room> {\n const res = await this._emit<{ room: Room }>(\"room:create:group\", input);\n return res.room;\n }\n async deleteRoom(roomId: string): Promise<void> { await this._emit(\"room:delete\", { roomId }); }\n async getRooms(): Promise<Room[]> {\n const res = await this._emit<{ rooms: Room[] }>(\"room:list\");\n return res.rooms;\n }\n async addMember(roomId: string, newMemberId: string): Promise<void> { await this._emit(\"room:member:add\", { roomId, newMemberId }); }\n async removeMember(roomId: string, targetId: string): Promise<void> { await this._emit(\"room:member:remove\", { roomId, targetId }); }\n pingPresence(roomId: string): void { this.socket?.emit(\"presence:ping\", { roomId }); }\n startTyping(roomId: string): void { this.socket?.emit(\"typing:start\", { roomId }); }\n stopTyping(roomId: string): void { this.socket?.emit(\"typing:stop\", { roomId }); }\n async markSeen(roomId: string, lastMessageId: string): Promise<void> { await this._emit(\"receipt:seen\", { roomId, lastMessageId }); }\n async addReaction(messageId: string, roomId: string, emoji: string): Promise<void> { await this._emit(\"reaction:add\", { messageId, roomId, emoji }); }\n async uploadFile(file: File): Promise<UploadResult> {\n if (!this.token) throw new Error(\"Not connected\");\n const formData = new FormData();\n formData.append(\"file\", file);\n const res = await fetch(`${this.config.endpoint}/hermes/upload`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${this.token}` },\n body: formData,\n });\n const data = await res.json();\n if (!data.success) throw new Error(data.error || \"Upload failed\");\n return data as UploadResult;\n }\n get isConnected(): boolean { return this.status === \"connected\" && !!this.socket?.connected; }\n get currentUser(): HermesUser | null { return this.user; }\n}\n","import type { HermesEvents } from \"../types/index\";\n\ntype EventKey = keyof HermesEvents;\ntype EventCallback<K extends EventKey> = HermesEvents[K];\ntype ListenerMap = { [K in EventKey]?: EventCallback<K>[] };\n\nexport class EventEmitter {\n private listeners: ListenerMap = {};\n\n on<K extends EventKey>(event: K, callback: EventCallback<K>): this {\n if (!this.listeners[event]) {\n this.listeners[event] = [];\n }\n (this.listeners[event] as EventCallback<K>[]).push(callback);\n return this;\n }\n\n off<K extends EventKey>(event: K, callback: EventCallback<K>): void {\n if (!this.listeners[event]) return;\n this.listeners[event] = (\n this.listeners[event] as EventCallback<K>[]\n ).filter((cb) => cb !== callback) as any;\n }\n\n once<K extends EventKey>(event: K, callback: EventCallback<K>): this {\n const wrapper = ((...args: any[]) => {\n (callback as any)(...args);\n this.off(event, wrapper as any);\n }) as EventCallback<K>;\n return this.on(event, wrapper);\n }\n\n emit<K extends EventKey>(\n event: K,\n ...args: Parameters<EventCallback<K>>\n ): this {\n if (!this.listeners[event]) return this;\n (this.listeners[event] as EventCallback<K>[]).forEach((cb) =>\n (cb as any)(...args),\n );\n return this;\n }\n\n removeAllListeners<K extends EventKey>(event?: K): this {\n if (event) {\n delete this.listeners[event];\n } else {\n this.listeners = {};\n }\n return this;\n }\n\n listenerCount<K extends EventKey>(event: K): number {\n return this.listeners[event]?.length ?? 0;\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/core/HermesClient.ts","../src/core/EventEmitter.ts"],"sourcesContent":["export { HermesClient } from './core/HermesClient';\nexport * from './types/index';\n","import { io, Socket } from \"socket.io-client\";\nimport { EventEmitter } from \"./EventEmitter\";\nimport type {\n HermesConfig,\n HermesUser,\n ConnectionStatus,\n Message,\n Room,\n SendMessageInput,\n MessageHistoryResult,\n CreateDirectRoomInput,\n CreateGroupRoomInput,\n UploadResult,\n} from \"../types/index\";\n\ninterface ApiKeyConfig {\n endpoint: string;\n apiKey: string;\n secret: string;\n userId: string;\n displayName: string;\n avatar?: string;\n email?: string;\n}\n\nexport class HermesClient extends EventEmitter {\n private config: HermesConfig;\n private socket: Socket | null = null;\n private token: string | null = null;\n\n public user: HermesUser | null = null;\n public status: ConnectionStatus = \"idle\";\n\n constructor(config: HermesConfig) {\n super();\n this.config = config;\n if (\"token\" in config && typeof config.token === \"string\") {\n this.token = config.token;\n }\n }\n\n async connect(): Promise<HermesUser> {\n this.status = \"connecting\";\n try {\n if (this.token) {\n await this._connectSocket();\n return this.user!;\n }\n if (!(\"apiKey\" in this.config)) {\n throw new Error(\"Either token or (apiKey + secret + userId) must be provided\");\n }\n const cfg = this.config as unknown as ApiKeyConfig;\n const res = await fetch(`${cfg.endpoint}/hermes/connect`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n apiKey: cfg.apiKey,\n secret: cfg.secret,\n userId: cfg.userId,\n displayName: cfg.displayName,\n avatar: cfg.avatar,\n email: cfg.email,\n }),\n });\n const data = await res.json();\n if (!data.success) throw new Error(data.message || \"Auth failed\");\n this.token = data.token;\n this.user = {\n userId: data.user.hermesUserId,\n displayName: data.user.displayName,\n avatar: data.user.avatar,\n email: data.user.email,\n };\n await this._connectSocket();\n return this.user!;\n } catch (err) {\n this.status = \"error\";\n this.emit(\"error\", err as Error);\n throw err;\n }\n }\n\n private async _connectSocket(): Promise<void> {\n this.socket = io(`${this.config.endpoint}/hermes`, {\n auth: { token: this.token },\n transports: [\"websocket\"],\n reconnection: true,\n reconnectionAttempts: 5,\n reconnectionDelay: 1000,\n });\n this._wireSocketEvents();\n await new Promise<void>((resolve, reject) => {\n this.socket!.once(\"connect\", resolve);\n this.socket!.once(\"connect_error\", (err) => reject(err));\n });\n this.status = \"connected\";\n this.emit(\"connected\");\n }\n\n disconnect(): void {\n this.socket?.disconnect();\n this.socket = null;\n this.token = null;\n this.status = \"disconnected\";\n this.emit(\"disconnected\", \"manual\");\n }\n\n private _wireSocketEvents(): void {\n const s = this.socket!;\n s.on(\"disconnect\", (reason) => { this.status = \"disconnected\"; this.emit(\"disconnected\", reason); });\n s.on(\"connect_error\", (err) => { this.status = \"error\"; this.emit(\"error\", err); });\n s.on(\"message:receive\", (msg: Message) => this.emit(\"message:receive\", msg));\n s.on(\"message:deleted\", (data) => this.emit(\"message:deleted\", data));\n s.on(\"message:edited\", (msg: Message) => this.emit(\"message:edited\", msg));\n s.on(\"room:created\", (room: Room) => this.emit(\"room:created\", room));\n s.on(\"room:deleted\", (data) => this.emit(\"room:deleted\", data));\n s.on(\"room:member:joined\", (data) => this.emit(\"room:member:joined\", data));\n s.on(\"room:member:left\", (data) => this.emit(\"room:member:left\", data));\n s.on(\"user:online\", (event) => this.emit(\"user:online\", event));\n s.on(\"user:offline\", (event) => this.emit(\"user:offline\", event));\n s.on(\"typing:started\", (event) => this.emit(\"typing:started\", event));\n s.on(\"typing:stopped\", (event) => this.emit(\"typing:stopped\", event));\n s.on(\"receipt:updated\", (event) => this.emit(\"receipt:updated\", event));\n s.on(\"reaction:updated\", (event) => this.emit(\"reaction:updated\", event));\n }\n\n _emit<T = any>(event: string, data?: any): Promise<T> {\n return new Promise((resolve, reject) => {\n if (!this.socket?.connected) return reject(new Error(\"Not connected to Hermes engine\"));\n const timer = setTimeout(() => reject(new Error(`Timed out waiting for \"${event}\"`)), 5000);\n const callback = (response: any) => {\n clearTimeout(timer);\n if (response?.success === false) reject(new Error(response.error || \"Unknown error\"));\n else resolve(response);\n };\n if (data && Object.keys(data).length > 0) this.socket!.emit(event, data, callback);\n else this.socket!.emit(event, callback);\n });\n }\n\n async sendMessage(input: SendMessageInput): Promise<Message> {\n const res = await this._emit<{ message: Message }>(\"message:send\", input);\n return res.message;\n }\n async getHistory(roomId: string, before?: string, limit?: number): Promise<MessageHistoryResult> {\n return this._emit(\"message:history\", { roomId, before, limit });\n }\n async deleteMessage(messageId: string, roomId: string): Promise<void> {\n await this._emit(\"message:delete\", { messageId, roomId });\n }\n async editMessage(messageId: string, roomId: string, text: string): Promise<Message> {\n const res = await this._emit<{ message: Message }>(\"message:edit\", { messageId, roomId, text });\n return res.message;\n }\n async createDirectRoom(input: CreateDirectRoomInput): Promise<Room> {\n const res = await this._emit<{ room: Room }>(\"room:create:direct\", { targetHermesUserId: input.targetUserId });\n return res.room;\n }\n async createGroupRoom(input: CreateGroupRoomInput): Promise<Room> {\n const res = await this._emit<{ room: Room }>(\"room:create:group\", input);\n return res.room;\n }\n async deleteRoom(roomId: string): Promise<void> { await this._emit(\"room:delete\", { roomId }); }\n async getRooms(): Promise<Room[]> {\n const res = await this._emit<{ rooms: Room[] }>(\"room:list\");\n return res.rooms;\n }\n async getUsers(): Promise<HermesUser[]> {\n if (!this.token) throw new Error(\"Not connected\");\n const res = await fetch(`${this.config.endpoint}/hermes/users`, {\n headers: { Authorization: `Bearer ${this.token}` },\n });\n const data = await res.json();\n if (!data.success) throw new Error(data.message || \"Failed to fetch users\");\n return data.users.map((u: any) => ({\n userId: u._id,\n displayName: u.displayName,\n avatar: u.avatar,\n email: u.email\n }));\n }\n async addMember(roomId: string, newMemberId: string): Promise<void> { await this._emit(\"room:member:add\", { roomId, newMemberId }); }\n async removeMember(roomId: string, targetId: string): Promise<void> { await this._emit(\"room:member:remove\", { roomId, targetId }); }\n pingPresence(roomId: string): void { this.socket?.emit(\"presence:ping\", { roomId }); }\n startTyping(roomId: string): void { this.socket?.emit(\"typing:start\", { roomId }); }\n stopTyping(roomId: string): void { this.socket?.emit(\"typing:stop\", { roomId }); }\n async markSeen(roomId: string, lastMessageId: string): Promise<void> { await this._emit(\"receipt:seen\", { roomId, lastMessageId }); }\n async addReaction(messageId: string, roomId: string, emoji: string): Promise<void> { await this._emit(\"reaction:add\", { messageId, roomId, emoji }); }\n async uploadFile(file: File): Promise<UploadResult> {\n if (!this.token) throw new Error(\"Not connected\");\n const formData = new FormData();\n formData.append(\"file\", file);\n const res = await fetch(`${this.config.endpoint}/hermes/upload`, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${this.token}` },\n body: formData,\n });\n const data = await res.json();\n if (!data.success) throw new Error(data.error || \"Upload failed\");\n return data as UploadResult;\n }\n get isConnected(): boolean { return this.status === \"connected\" && !!this.socket?.connected; }\n get currentUser(): HermesUser | null { return this.user; }\n}\n","import type { HermesEvents } from \"../types/index\";\n\ntype EventKey = keyof HermesEvents;\ntype EventCallback<K extends EventKey> = HermesEvents[K];\ntype ListenerMap = { [K in EventKey]?: EventCallback<K>[] };\n\nexport class EventEmitter {\n private listeners: ListenerMap = {};\n\n on<K extends EventKey>(event: K, callback: EventCallback<K>): this {\n if (!this.listeners[event]) {\n this.listeners[event] = [];\n }\n (this.listeners[event] as EventCallback<K>[]).push(callback);\n return this;\n }\n\n off<K extends EventKey>(event: K, callback: EventCallback<K>): void {\n if (!this.listeners[event]) return;\n this.listeners[event] = (\n this.listeners[event] as EventCallback<K>[]\n ).filter((cb) => cb !== callback) as any;\n }\n\n once<K extends EventKey>(event: K, callback: EventCallback<K>): this {\n const wrapper = ((...args: any[]) => {\n (callback as any)(...args);\n this.off(event, wrapper as any);\n }) as EventCallback<K>;\n return this.on(event, wrapper);\n }\n\n emit<K extends EventKey>(\n event: K,\n ...args: Parameters<EventCallback<K>>\n ): this {\n if (!this.listeners[event]) return this;\n (this.listeners[event] as EventCallback<K>[]).forEach((cb) =>\n (cb as any)(...args),\n );\n return this;\n }\n\n removeAllListeners<K extends EventKey>(event?: K): this {\n if (event) {\n delete this.listeners[event];\n } else {\n this.listeners = {};\n }\n return this;\n }\n\n listenerCount<K extends EventKey>(event: K): number {\n return this.listeners[event]?.length ?? 0;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAA2B;;;ACMpB,IAAM,eAAN,MAAmB;AAAA,EAAnB;AACL,SAAQ,YAAyB,CAAC;AAAA;AAAA,EAElC,GAAuB,OAAU,UAAkC;AACjE,QAAI,CAAC,KAAK,UAAU,KAAK,GAAG;AAC1B,WAAK,UAAU,KAAK,IAAI,CAAC;AAAA,IAC3B;AACA,IAAC,KAAK,UAAU,KAAK,EAAyB,KAAK,QAAQ;AAC3D,WAAO;AAAA,EACT;AAAA,EAEA,IAAwB,OAAU,UAAkC;AAClE,QAAI,CAAC,KAAK,UAAU,KAAK,EAAG;AAC5B,SAAK,UAAU,KAAK,IAClB,KAAK,UAAU,KAAK,EACpB,OAAO,CAAC,OAAO,OAAO,QAAQ;AAAA,EAClC;AAAA,EAEA,KAAyB,OAAU,UAAkC;AACnE,UAAM,WAAW,IAAI,SAAgB;AACnC,MAAC,SAAiB,GAAG,IAAI;AACzB,WAAK,IAAI,OAAO,OAAc;AAAA,IAChC;AACA,WAAO,KAAK,GAAG,OAAO,OAAO;AAAA,EAC/B;AAAA,EAEA,KACE,UACG,MACG;AACN,QAAI,CAAC,KAAK,UAAU,KAAK,EAAG,QAAO;AACnC,IAAC,KAAK,UAAU,KAAK,EAAyB;AAAA,MAAQ,CAAC,OACpD,GAAW,GAAG,IAAI;AAAA,IACrB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,mBAAuC,OAAiB;AACtD,QAAI,OAAO;AACT,aAAO,KAAK,UAAU,KAAK;AAAA,IAC7B,OAAO;AACL,WAAK,YAAY,CAAC;AAAA,IACpB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,cAAkC,OAAkB;AAClD,WAAO,KAAK,UAAU,KAAK,GAAG,UAAU;AAAA,EAC1C;AACF;;;AD9BO,IAAM,eAAN,cAA2B,aAAa;AAAA,EAQ7C,YAAY,QAAsB;AAChC,UAAM;AAPR,SAAQ,SAAwB;AAChC,SAAQ,QAAuB;AAE/B,SAAO,OAA0B;AACjC,SAAO,SAA2B;AAIhC,SAAK,SAAS;AACd,QAAI,WAAW,UAAU,OAAO,OAAO,UAAU,UAAU;AACzD,WAAK,QAAQ,OAAO;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAM,UAA+B;AACnC,SAAK,SAAS;AACd,QAAI;AACF,UAAI,KAAK,OAAO;AACd,cAAM,KAAK,eAAe;AAC1B,eAAO,KAAK;AAAA,MACd;AACA,UAAI,EAAE,YAAY,KAAK,SAAS;AAC9B,cAAM,IAAI,MAAM,6DAA6D;AAAA,MAC/E;AACA,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,MAAM,MAAM,GAAG,IAAI,QAAQ,mBAAmB;AAAA,QACxD,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM,KAAK,UAAU;AAAA,UACnB,QAAQ,IAAI;AAAA,UACZ,QAAQ,IAAI;AAAA,UACZ,QAAQ,IAAI;AAAA,UACZ,aAAa,IAAI;AAAA,UACjB,QAAQ,IAAI;AAAA,UACZ,OAAO,IAAI;AAAA,QACb,CAAC;AAAA,MACH,CAAC;AACD,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAI,CAAC,KAAK,QAAS,OAAM,IAAI,MAAM,KAAK,WAAW,aAAa;AAChE,WAAK,QAAQ,KAAK;AAClB,WAAK,OAAO;AAAA,QACV,QAAQ,KAAK,KAAK;AAAA,QAClB,aAAa,KAAK,KAAK;AAAA,QACvB,QAAQ,KAAK,KAAK;AAAA,QAClB,OAAO,KAAK,KAAK;AAAA,MACnB;AACA,YAAM,KAAK,eAAe;AAC1B,aAAO,KAAK;AAAA,IACd,SAAS,KAAK;AACZ,WAAK,SAAS;AACd,WAAK,KAAK,SAAS,GAAY;AAC/B,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,iBAAgC;AAC5C,SAAK,aAAS,kBAAG,GAAG,KAAK,OAAO,QAAQ,WAAW;AAAA,MACjD,MAAM,EAAE,OAAO,KAAK,MAAM;AAAA,MAC1B,YAAY,CAAC,WAAW;AAAA,MACxB,cAAc;AAAA,MACd,sBAAsB;AAAA,MACtB,mBAAmB;AAAA,IACrB,CAAC;AACD,SAAK,kBAAkB;AACvB,UAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,WAAK,OAAQ,KAAK,WAAW,OAAO;AACpC,WAAK,OAAQ,KAAK,iBAAiB,CAAC,QAAQ,OAAO,GAAG,CAAC;AAAA,IACzD,CAAC;AACD,SAAK,SAAS;AACd,SAAK,KAAK,WAAW;AAAA,EACvB;AAAA,EAEA,aAAmB;AACjB,SAAK,QAAQ,WAAW;AACxB,SAAK,SAAS;AACd,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,KAAK,gBAAgB,QAAQ;AAAA,EACpC;AAAA,EAEQ,oBAA0B;AAChC,UAAM,IAAI,KAAK;AACf,MAAE,GAAG,cAAc,CAAC,WAAW;AAAE,WAAK,SAAS;AAAgB,WAAK,KAAK,gBAAgB,MAAM;AAAA,IAAG,CAAC;AACnG,MAAE,GAAG,iBAAiB,CAAC,QAAQ;AAAE,WAAK,SAAS;AAAS,WAAK,KAAK,SAAS,GAAG;AAAA,IAAG,CAAC;AAClF,MAAE,GAAG,mBAAmB,CAAC,QAAiB,KAAK,KAAK,mBAAmB,GAAG,CAAC;AAC3E,MAAE,GAAG,mBAAmB,CAAC,SAAS,KAAK,KAAK,mBAAmB,IAAI,CAAC;AACpE,MAAE,GAAG,kBAAkB,CAAC,QAAiB,KAAK,KAAK,kBAAkB,GAAG,CAAC;AACzE,MAAE,GAAG,gBAAgB,CAAC,SAAe,KAAK,KAAK,gBAAgB,IAAI,CAAC;AACpE,MAAE,GAAG,gBAAgB,CAAC,SAAS,KAAK,KAAK,gBAAgB,IAAI,CAAC;AAC9D,MAAE,GAAG,sBAAsB,CAAC,SAAS,KAAK,KAAK,sBAAsB,IAAI,CAAC;AAC1E,MAAE,GAAG,oBAAoB,CAAC,SAAS,KAAK,KAAK,oBAAoB,IAAI,CAAC;AACtE,MAAE,GAAG,eAAe,CAAC,UAAU,KAAK,KAAK,eAAe,KAAK,CAAC;AAC9D,MAAE,GAAG,gBAAgB,CAAC,UAAU,KAAK,KAAK,gBAAgB,KAAK,CAAC;AAChE,MAAE,GAAG,kBAAkB,CAAC,UAAU,KAAK,KAAK,kBAAkB,KAAK,CAAC;AACpE,MAAE,GAAG,kBAAkB,CAAC,UAAU,KAAK,KAAK,kBAAkB,KAAK,CAAC;AACpE,MAAE,GAAG,mBAAmB,CAAC,UAAU,KAAK,KAAK,mBAAmB,KAAK,CAAC;AACtE,MAAE,GAAG,oBAAoB,CAAC,UAAU,KAAK,KAAK,oBAAoB,KAAK,CAAC;AAAA,EAC1E;AAAA,EAEA,MAAe,OAAe,MAAwB;AACpD,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAI,CAAC,KAAK,QAAQ,UAAW,QAAO,OAAO,IAAI,MAAM,gCAAgC,CAAC;AACtF,YAAM,QAAQ,WAAW,MAAM,OAAO,IAAI,MAAM,0BAA0B,KAAK,GAAG,CAAC,GAAG,GAAI;AAC1F,YAAM,WAAW,CAAC,aAAkB;AAClC,qBAAa,KAAK;AAClB,YAAI,UAAU,YAAY,MAAO,QAAO,IAAI,MAAM,SAAS,SAAS,eAAe,CAAC;AAAA,YAC/E,SAAQ,QAAQ;AAAA,MACvB;AACA,UAAI,QAAQ,OAAO,KAAK,IAAI,EAAE,SAAS,EAAG,MAAK,OAAQ,KAAK,OAAO,MAAM,QAAQ;AAAA,UAC5E,MAAK,OAAQ,KAAK,OAAO,QAAQ;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,OAA2C;AAC3D,UAAM,MAAM,MAAM,KAAK,MAA4B,gBAAgB,KAAK;AACxE,WAAO,IAAI;AAAA,EACb;AAAA,EACA,MAAM,WAAW,QAAgB,QAAiB,OAA+C;AAC/F,WAAO,KAAK,MAAM,mBAAmB,EAAE,QAAQ,QAAQ,MAAM,CAAC;AAAA,EAChE;AAAA,EACA,MAAM,cAAc,WAAmB,QAA+B;AACpE,UAAM,KAAK,MAAM,kBAAkB,EAAE,WAAW,OAAO,CAAC;AAAA,EAC1D;AAAA,EACA,MAAM,YAAY,WAAmB,QAAgB,MAAgC;AACnF,UAAM,MAAM,MAAM,KAAK,MAA4B,gBAAgB,EAAE,WAAW,QAAQ,KAAK,CAAC;AAC9F,WAAO,IAAI;AAAA,EACb;AAAA,EACA,MAAM,iBAAiB,OAA6C;AAClE,UAAM,MAAM,MAAM,KAAK,MAAsB,sBAAsB,EAAE,oBAAoB,MAAM,aAAa,CAAC;AAC7G,WAAO,IAAI;AAAA,EACb;AAAA,EACA,MAAM,gBAAgB,OAA4C;AAChE,UAAM,MAAM,MAAM,KAAK,MAAsB,qBAAqB,KAAK;AACvE,WAAO,IAAI;AAAA,EACb;AAAA,EACA,MAAM,WAAW,QAA+B;AAAE,UAAM,KAAK,MAAM,eAAe,EAAE,OAAO,CAAC;AAAA,EAAG;AAAA,EAC/F,MAAM,WAA4B;AAChC,UAAM,MAAM,MAAM,KAAK,MAAyB,WAAW;AAC3D,WAAO,IAAI;AAAA,EACb;AAAA,EACA,MAAM,WAAkC;AACtC,QAAI,CAAC,KAAK,MAAO,OAAM,IAAI,MAAM,eAAe;AAChD,UAAM,MAAM,MAAM,MAAM,GAAG,KAAK,OAAO,QAAQ,iBAAiB;AAAA,MAC9D,SAAS,EAAE,eAAe,UAAU,KAAK,KAAK,GAAG;AAAA,IACnD,CAAC;AACD,UAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,QAAI,CAAC,KAAK,QAAS,OAAM,IAAI,MAAM,KAAK,WAAW,uBAAuB;AAC1E,WAAO,KAAK,MAAM,IAAI,CAAC,OAAY;AAAA,MACjC,QAAQ,EAAE;AAAA,MACV,aAAa,EAAE;AAAA,MACf,QAAQ,EAAE;AAAA,MACV,OAAO,EAAE;AAAA,IACX,EAAE;AAAA,EACJ;AAAA,EACA,MAAM,UAAU,QAAgB,aAAoC;AAAE,UAAM,KAAK,MAAM,mBAAmB,EAAE,QAAQ,YAAY,CAAC;AAAA,EAAG;AAAA,EACpI,MAAM,aAAa,QAAgB,UAAiC;AAAE,UAAM,KAAK,MAAM,sBAAsB,EAAE,QAAQ,SAAS,CAAC;AAAA,EAAG;AAAA,EACpI,aAAa,QAAsB;AAAE,SAAK,QAAQ,KAAK,iBAAiB,EAAE,OAAO,CAAC;AAAA,EAAG;AAAA,EACrF,YAAY,QAAsB;AAAE,SAAK,QAAQ,KAAK,gBAAgB,EAAE,OAAO,CAAC;AAAA,EAAG;AAAA,EACnF,WAAW,QAAsB;AAAE,SAAK,QAAQ,KAAK,eAAe,EAAE,OAAO,CAAC;AAAA,EAAG;AAAA,EACjF,MAAM,SAAS,QAAgB,eAAsC;AAAE,UAAM,KAAK,MAAM,gBAAgB,EAAE,QAAQ,cAAc,CAAC;AAAA,EAAG;AAAA,EACpI,MAAM,YAAY,WAAmB,QAAgB,OAA8B;AAAE,UAAM,KAAK,MAAM,gBAAgB,EAAE,WAAW,QAAQ,MAAM,CAAC;AAAA,EAAG;AAAA,EACrJ,MAAM,WAAW,MAAmC;AAClD,QAAI,CAAC,KAAK,MAAO,OAAM,IAAI,MAAM,eAAe;AAChD,UAAM,WAAW,IAAI,SAAS;AAC9B,aAAS,OAAO,QAAQ,IAAI;AAC5B,UAAM,MAAM,MAAM,MAAM,GAAG,KAAK,OAAO,QAAQ,kBAAkB;AAAA,MAC/D,QAAQ;AAAA,MACR,SAAS,EAAE,eAAe,UAAU,KAAK,KAAK,GAAG;AAAA,MACjD,MAAM;AAAA,IACR,CAAC;AACD,UAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,QAAI,CAAC,KAAK,QAAS,OAAM,IAAI,MAAM,KAAK,SAAS,eAAe;AAChE,WAAO;AAAA,EACT;AAAA,EACA,IAAI,cAAuB;AAAE,WAAO,KAAK,WAAW,eAAe,CAAC,CAAC,KAAK,QAAQ;AAAA,EAAW;AAAA,EAC7F,IAAI,cAAiC;AAAE,WAAO,KAAK;AAAA,EAAM;AAC3D;","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -3,6 +3,9 @@ interface HermesConfig {
|
|
|
3
3
|
apiKey: string;
|
|
4
4
|
secret: string;
|
|
5
5
|
userId: string;
|
|
6
|
+
displayName?: string;
|
|
7
|
+
avatar?: string;
|
|
8
|
+
email?: string;
|
|
6
9
|
}
|
|
7
10
|
interface HermesUser {
|
|
8
11
|
userId: string;
|
|
@@ -60,6 +63,10 @@ interface Message {
|
|
|
60
63
|
mimeType?: string;
|
|
61
64
|
thumbnail?: string;
|
|
62
65
|
replyTo?: string;
|
|
66
|
+
threadParentId?: string;
|
|
67
|
+
replyCount?: number;
|
|
68
|
+
pinnedAt?: string;
|
|
69
|
+
pinnedBy?: string;
|
|
63
70
|
reactions: Reaction[];
|
|
64
71
|
deliveryStatus: DeliveryStatus;
|
|
65
72
|
seenBy: string[];
|
|
@@ -180,6 +187,7 @@ declare class HermesClient extends EventEmitter {
|
|
|
180
187
|
createGroupRoom(input: CreateGroupRoomInput): Promise<Room>;
|
|
181
188
|
deleteRoom(roomId: string): Promise<void>;
|
|
182
189
|
getRooms(): Promise<Room[]>;
|
|
190
|
+
getUsers(): Promise<HermesUser[]>;
|
|
183
191
|
addMember(roomId: string, newMemberId: string): Promise<void>;
|
|
184
192
|
removeMember(roomId: string, targetId: string): Promise<void>;
|
|
185
193
|
pingPresence(roomId: string): void;
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,9 @@ interface HermesConfig {
|
|
|
3
3
|
apiKey: string;
|
|
4
4
|
secret: string;
|
|
5
5
|
userId: string;
|
|
6
|
+
displayName?: string;
|
|
7
|
+
avatar?: string;
|
|
8
|
+
email?: string;
|
|
6
9
|
}
|
|
7
10
|
interface HermesUser {
|
|
8
11
|
userId: string;
|
|
@@ -60,6 +63,10 @@ interface Message {
|
|
|
60
63
|
mimeType?: string;
|
|
61
64
|
thumbnail?: string;
|
|
62
65
|
replyTo?: string;
|
|
66
|
+
threadParentId?: string;
|
|
67
|
+
replyCount?: number;
|
|
68
|
+
pinnedAt?: string;
|
|
69
|
+
pinnedBy?: string;
|
|
63
70
|
reactions: Reaction[];
|
|
64
71
|
deliveryStatus: DeliveryStatus;
|
|
65
72
|
seenBy: string[];
|
|
@@ -180,6 +187,7 @@ declare class HermesClient extends EventEmitter {
|
|
|
180
187
|
createGroupRoom(input: CreateGroupRoomInput): Promise<Room>;
|
|
181
188
|
deleteRoom(roomId: string): Promise<void>;
|
|
182
189
|
getRooms(): Promise<Room[]>;
|
|
190
|
+
getUsers(): Promise<HermesUser[]>;
|
|
183
191
|
addMember(roomId: string, newMemberId: string): Promise<void>;
|
|
184
192
|
removeMember(roomId: string, targetId: string): Promise<void>;
|
|
185
193
|
pingPresence(roomId: string): void;
|