@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.
- package/LICENSE +201 -0
- package/README.md +889 -0
- package/dist/config/secrets.d.ts +52 -0
- package/dist/config/secrets.d.ts.map +1 -0
- package/dist/config/secrets.js +63 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/repositories/EthoraSDKService.d.ts +142 -0
- package/dist/repositories/EthoraSDKService.d.ts.map +1 -0
- package/dist/repositories/EthoraSDKService.js +444 -0
- package/dist/repositories/EthoraSDKService.js.map +1 -0
- package/dist/types/index.d.ts +171 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/jwt.d.ts +34 -0
- package/dist/utils/jwt.d.ts.map +1 -0
- package/dist/utils/jwt.js +86 -0
- package/dist/utils/jwt.js.map +1 -0
- package/dist/utils/logger.d.ts +26 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +58 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +38 -0
|
@@ -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
|
+
}
|