@ethora/sdk-backend 25.1.1

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.
@@ -0,0 +1,34 @@
1
+ /**
2
+ * JWT token utilities for Ethora SDK
3
+ */
4
+ import jwt from "jsonwebtoken";
5
+ import type { ServerTokenPayload, ClientTokenPayload } from "../types";
6
+ /**
7
+ * Creates a JWT token from the given payload using the chat application's secret
8
+ *
9
+ * @param payload - The payload to be encoded in the JWT
10
+ * @returns The encoded JWT token
11
+ */
12
+ export declare function createJwtToken(payload: ServerTokenPayload | ClientTokenPayload): string;
13
+ /**
14
+ * Creates a server-to-server JWT token
15
+ *
16
+ * @returns The encoded JWT token for server authentication
17
+ */
18
+ export declare function createServerToken(): string;
19
+ /**
20
+ * Creates a client-side JWT token for a specific user ID
21
+ *
22
+ * @param userId - The unique identifier of the user
23
+ * @returns The encoded JWT token for client-side authentication
24
+ */
25
+ export declare function createClientToken(userId: string): string;
26
+ /**
27
+ * Verifies a JWT token
28
+ *
29
+ * @param token - The JWT token to verify
30
+ * @returns The decoded token payload
31
+ * @throws Error if token is invalid
32
+ */
33
+ export declare function verifyJwtToken(token: string): jwt.JwtPayload;
34
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/utils/jwt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAMvE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,MAAM,CAWvF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAY1C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAexD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,UAAU,CAY5D"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * JWT token utilities for Ethora SDK
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.createJwtToken = createJwtToken;
10
+ exports.createServerToken = createServerToken;
11
+ exports.createClientToken = createClientToken;
12
+ exports.verifyJwtToken = verifyJwtToken;
13
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
14
+ const secrets_1 = require("../config/secrets");
15
+ const logger_1 = require("./logger");
16
+ const logger = (0, logger_1.getLogger)("jwt-utils");
17
+ /**
18
+ * Creates a JWT token from the given payload using the chat application's secret
19
+ *
20
+ * @param payload - The payload to be encoded in the JWT
21
+ * @returns The encoded JWT token
22
+ */
23
+ function createJwtToken(payload) {
24
+ logger.debug("Creating a new JWT token");
25
+ const secrets = (0, secrets_1.getSecrets)();
26
+ return jsonwebtoken_1.default.sign(payload, secrets.chatAppSecret, {
27
+ algorithm: "HS256",
28
+ });
29
+ }
30
+ /**
31
+ * Creates a server-to-server JWT token
32
+ *
33
+ * @returns The encoded JWT token for server authentication
34
+ */
35
+ function createServerToken() {
36
+ logger.debug("Creating server-to-server JWT token");
37
+ const secrets = (0, secrets_1.getSecrets)();
38
+ const payload = {
39
+ data: {
40
+ appId: secrets.chatAppId,
41
+ type: "server",
42
+ },
43
+ };
44
+ return createJwtToken(payload);
45
+ }
46
+ /**
47
+ * Creates a client-side JWT token for a specific user ID
48
+ *
49
+ * @param userId - The unique identifier of the user
50
+ * @returns The encoded JWT token for client-side authentication
51
+ */
52
+ function createClientToken(userId) {
53
+ logger.debug(`Creating a client-side JWT token for user ID: ${userId}`);
54
+ const secrets = (0, secrets_1.getSecrets)();
55
+ const payload = {
56
+ data: {
57
+ type: "client",
58
+ userId: String(userId),
59
+ appId: secrets.chatAppId,
60
+ },
61
+ };
62
+ const token = createJwtToken(payload);
63
+ logger.info(`Client JWT token created for user ID: ${userId}`);
64
+ return token;
65
+ }
66
+ /**
67
+ * Verifies a JWT token
68
+ *
69
+ * @param token - The JWT token to verify
70
+ * @returns The decoded token payload
71
+ * @throws Error if token is invalid
72
+ */
73
+ function verifyJwtToken(token) {
74
+ logger.debug("Verifying JWT token");
75
+ const secrets = (0, secrets_1.getSecrets)();
76
+ try {
77
+ return jsonwebtoken_1.default.verify(token, secrets.chatAppSecret, {
78
+ algorithms: ["HS256"],
79
+ });
80
+ }
81
+ catch (error) {
82
+ logger.error("JWT token verification failed", error);
83
+ throw new Error("Invalid JWT token");
84
+ }
85
+ }
86
+ //# sourceMappingURL=jwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/utils/jwt.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAeH,wCAWC;AAOD,8CAYC;AAQD,8CAeC;AASD,wCAYC;AAvFD,gEAA+B;AAE/B,+CAA+C;AAC/C,qCAAqC;AAErC,MAAM,MAAM,GAAG,IAAA,kBAAS,EAAC,WAAW,CAAC,CAAC;AAEtC;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,OAAgD;IAC7E,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAA,oBAAU,GAAE,CAAC;IAE7B,OAAO,sBAAG,CAAC,IAAI,CACb,OAAO,EACP,OAAO,CAAC,aAAa,EACrB;QACE,SAAS,EAAE,OAAO;KACnB,CACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAA,oBAAU,GAAE,CAAC;IAE7B,MAAM,OAAO,GAAuB;QAClC,IAAI,EAAE;YACJ,KAAK,EAAE,OAAO,CAAC,SAAS;YACxB,IAAI,EAAE,QAAQ;SACf;KACF,CAAC;IAEF,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,MAAc;IAC9C,MAAM,CAAC,KAAK,CAAC,iDAAiD,MAAM,EAAE,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,IAAA,oBAAU,GAAE,CAAC;IAE7B,MAAM,OAAO,GAAuB;QAClC,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACtB,KAAK,EAAE,OAAO,CAAC,SAAS;SACzB;KACF,CAAC;IAEF,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,CAAC,IAAI,CAAC,yCAAyC,MAAM,EAAE,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,cAAc,CAAC,KAAa;IAC1C,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAA,oBAAU,GAAE,CAAC;IAE7B,IAAI,CAAC;QACH,OAAO,sBAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE;YAC9C,UAAU,EAAE,CAAC,OAAO,CAAC;SACtB,CAAmB,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Logger utility for the Ethora SDK
3
+ */
4
+ export declare enum LogLevel {
5
+ DEBUG = "debug",
6
+ INFO = "info",
7
+ WARN = "warn",
8
+ ERROR = "error"
9
+ }
10
+ /**
11
+ * Logger interface
12
+ */
13
+ export interface Logger {
14
+ debug(message: string, ...args: unknown[]): void;
15
+ info(message: string, ...args: unknown[]): void;
16
+ warn(message: string, ...args: unknown[]): void;
17
+ error(message: string, error?: Error | unknown, ...args: unknown[]): void;
18
+ }
19
+ /**
20
+ * Gets a logger instance for the given context
21
+ *
22
+ * @param context - The context/name for the logger (typically the module name)
23
+ * @returns Logger instance
24
+ */
25
+ export declare function getLogger(context: string): Logger;
26
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC3E;AA8CD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKjD"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * Logger utility for the Ethora SDK
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LogLevel = void 0;
7
+ exports.getLogger = getLogger;
8
+ var LogLevel;
9
+ (function (LogLevel) {
10
+ LogLevel["DEBUG"] = "debug";
11
+ LogLevel["INFO"] = "info";
12
+ LogLevel["WARN"] = "warn";
13
+ LogLevel["ERROR"] = "error";
14
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
15
+ /**
16
+ * Simple console logger implementation
17
+ */
18
+ class ConsoleLogger {
19
+ constructor(context) {
20
+ this.context = context;
21
+ }
22
+ formatMessage(level, message) {
23
+ const timestamp = new Date().toISOString();
24
+ return `[${timestamp}] [${level.toUpperCase()}] [${this.context}] ${message}`;
25
+ }
26
+ debug(message, ...args) {
27
+ if (process.env.NODE_ENV !== "production") {
28
+ console.debug(this.formatMessage(LogLevel.DEBUG, message), ...args);
29
+ }
30
+ }
31
+ info(message, ...args) {
32
+ console.info(this.formatMessage(LogLevel.INFO, message), ...args);
33
+ }
34
+ warn(message, ...args) {
35
+ console.warn(this.formatMessage(LogLevel.WARN, message), ...args);
36
+ }
37
+ error(message, error, ...args) {
38
+ const errorInfo = error instanceof Error ? error.stack : error;
39
+ console.error(this.formatMessage(LogLevel.ERROR, message), errorInfo || "", ...args);
40
+ }
41
+ }
42
+ /**
43
+ * Logger cache to reuse logger instances
44
+ */
45
+ const loggerCache = new Map();
46
+ /**
47
+ * Gets a logger instance for the given context
48
+ *
49
+ * @param context - The context/name for the logger (typically the module name)
50
+ * @returns Logger instance
51
+ */
52
+ function getLogger(context) {
53
+ if (!loggerCache.has(context)) {
54
+ loggerCache.set(context, new ConsoleLogger(context));
55
+ }
56
+ return loggerCache.get(context);
57
+ }
58
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAqEH,8BAKC;AAxED,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,2BAAe,CAAA;AACjB,CAAC,EALW,QAAQ,wBAAR,QAAQ,QAKnB;AAYD;;GAEG;AACH,MAAM,aAAa;IAGjB,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEO,aAAa,CAAC,KAAe,EAAE,OAAe;QACpD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,OAAO,IAAI,SAAS,MAAM,KAAK,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAuB,EAAE,GAAG,IAAe;QAChE,MAAM,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/D,OAAO,CAAC,KAAK,CACX,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAC3C,SAAS,IAAI,EAAE,EACf,GAAG,IAAI,CACR,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE9C;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;AACnC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@ethora/sdk-backend",
3
+ "version": "25.01.01",
4
+ "description": "TypeScript SDK for integrating with Ethora chat service backend API",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "README.md"
10
+ ],
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "build:watch": "tsc --watch",
14
+ "clean": "rm -rf dist",
15
+ "prepublishOnly": "npm run build"
16
+ },
17
+ "keywords": [
18
+ "ethora",
19
+ "chat",
20
+ "sdk",
21
+ "typescript",
22
+ "backend"
23
+ ],
24
+ "author": "Ethora",
25
+ "license": "MIT",
26
+ "dependencies": {
27
+ "axios": "^1.6.0",
28
+ "jsonwebtoken": "^9.0.2"
29
+ },
30
+ "devDependencies": {
31
+ "@types/jsonwebtoken": "^9.0.6",
32
+ "@types/node": "^20.10.0",
33
+ "typescript": "^5.3.3"
34
+ },
35
+ "peerDependencies": {
36
+ "axios": "^1.6.0"
37
+ }
38
+ }