@agora-sdk/secure-chat-core 0.6.0 → 0.6.3

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 (35) hide show
  1. package/dist/cjs/hooks/useSecureDevice.js +17 -1
  2. package/dist/cjs/hooks/useSecureDevice.js.map +1 -1
  3. package/dist/cjs/hooks/useSecureHandshakes.js +62 -4
  4. package/dist/cjs/hooks/useSecureHandshakes.js.map +1 -1
  5. package/dist/cjs/hooks/useSecureMessages.js +48 -2
  6. package/dist/cjs/hooks/useSecureMessages.js.map +1 -1
  7. package/dist/cjs/index.d.ts +2 -0
  8. package/dist/cjs/index.js +5 -1
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/transport/rest.d.ts +1 -0
  11. package/dist/cjs/transport/rest.js +40 -0
  12. package/dist/cjs/transport/rest.js.map +1 -1
  13. package/dist/cjs/transport/socket.js +16 -1
  14. package/dist/cjs/transport/socket.js.map +1 -1
  15. package/dist/cjs/util/debug.d.ts +52 -0
  16. package/dist/cjs/util/debug.js +111 -0
  17. package/dist/cjs/util/debug.js.map +1 -0
  18. package/dist/esm/hooks/useSecureDevice.js +17 -1
  19. package/dist/esm/hooks/useSecureDevice.js.map +1 -1
  20. package/dist/esm/hooks/useSecureHandshakes.js +62 -4
  21. package/dist/esm/hooks/useSecureHandshakes.js.map +1 -1
  22. package/dist/esm/hooks/useSecureMessages.js +48 -2
  23. package/dist/esm/hooks/useSecureMessages.js.map +1 -1
  24. package/dist/esm/index.d.ts +2 -0
  25. package/dist/esm/index.js +2 -0
  26. package/dist/esm/index.js.map +1 -1
  27. package/dist/esm/transport/rest.d.ts +1 -0
  28. package/dist/esm/transport/rest.js +40 -0
  29. package/dist/esm/transport/rest.js.map +1 -1
  30. package/dist/esm/transport/socket.js +16 -1
  31. package/dist/esm/transport/socket.js.map +1 -1
  32. package/dist/esm/util/debug.d.ts +52 -0
  33. package/dist/esm/util/debug.js +106 -0
  34. package/dist/esm/util/debug.js.map +1 -0
  35. package/package.json +2 -2
@@ -5,6 +5,7 @@
5
5
  // refresh or a late-set baseUrl always wins. All binary is base64 on the wire; this client never
6
6
  // inspects payloads.
7
7
  import axios from "axios";
8
+ import { createDebugLogger } from "../util/debug.js";
8
9
  /**
9
10
  * Typed REST client for the secure-chat blind Delivery Service.
10
11
  *
@@ -30,6 +31,7 @@ import axios from "axios";
30
31
  export class SecureChatRestClient {
31
32
  constructor(config) {
32
33
  this.config = config;
34
+ this.log = createDebugLogger("rest");
33
35
  this.http = axios.create();
34
36
  this.http.interceptors.request.use((req) => {
35
37
  const base = config.getBaseUrl().replace(/\/$/, "");
@@ -37,8 +39,30 @@ export class SecureChatRestClient {
37
39
  const token = config.getAccessToken();
38
40
  if (token)
39
41
  req.headers.set("Authorization", `Bearer ${token}`);
42
+ // One trace site for every endpoint: line = method + path + query; body at trace level only
43
+ // (request bodies carry base64 KeyPackages/Welcomes/ciphertext — fine for a dev-only switch).
44
+ const where = `${req.method?.toUpperCase()} ${req.url}`;
45
+ this.log.debug(`→ ${where}`, req.params);
46
+ this.log.trace(`→ ${where} body`, req.data);
40
47
  return req;
41
48
  });
49
+ this.http.interceptors.response.use((res) => {
50
+ const where = `${res.config.method?.toUpperCase()} ${res.config.url}`;
51
+ this.log.debug(`← ${res.status} ${where}`, summarizeBody(res.data));
52
+ this.log.trace(`← ${where} body`, res.data);
53
+ return res;
54
+ }, (err) => {
55
+ // Errors are surfaced to callers as-is; this only narrates them. 404 on getKeyBackup and the
56
+ // 409 conflict paths are expected control flow, not bugs — the status makes that legible.
57
+ if (axios.isAxiosError(err)) {
58
+ const where = `${err.config?.method?.toUpperCase()} ${err.config?.url}`;
59
+ this.log.debug(`✗ ${err.response?.status ?? "network-error"} ${where}`, {
60
+ code: err.response?.data?.code,
61
+ message: err.message,
62
+ });
63
+ }
64
+ return Promise.reject(err);
65
+ });
42
66
  }
43
67
  // ── Devices ────────────────────────────────────────────────────────────────
44
68
  /**
@@ -198,4 +222,20 @@ export class SecureChatRestClient {
198
222
  }
199
223
  }
200
224
  }
225
+ /**
226
+ * Condense a response body into a greppable one-liner for the `debug`-level line — array lengths and
227
+ * paging flags instead of the full (often base64-heavy) payload, which is left to the `trace` line.
228
+ *
229
+ * @param data - The axios response body.
230
+ * @returns A small summary object (counts + `hasMore`), or the value itself when it isn't an object.
231
+ */
232
+ function summarizeBody(data) {
233
+ if (data == null || typeof data !== "object")
234
+ return data;
235
+ const out = {};
236
+ for (const [k, v] of Object.entries(data)) {
237
+ out[k] = Array.isArray(v) ? `[${v.length}]` : v;
238
+ }
239
+ return out;
240
+ }
201
241
  //# sourceMappingURL=rest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../src/transport/rest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../src/transport/rest.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@
5
5
  // `listMessages` endpoints remain the durable source of truth for offline catch-up. All event
6
6
  // payloads carry ciphertext only.
7
7
  import { io } from "socket.io-client";
8
+ import { createDebugLogger } from "../util/debug.js";
9
+ const log = createDebugLogger("socket");
8
10
  /**
9
11
  * Thin wrapper around the `/secure` namespace connection. Devices the user owns are auto-joined to
10
12
  * their `secure:device:{id}` rooms on connect (server-side), so targeted Welcomes arrive without an
@@ -23,13 +25,24 @@ export class SecureChatSocketClient {
23
25
  connect() {
24
26
  if (this.socket?.connected)
25
27
  return this.socket;
26
- const origin = this.config.getSocketUrl().replace(/\/$/, "");
28
+ // socket.io derives the NAMESPACE from the URL's path, so the origin handed to io() must be bare.
29
+ // getSocketUrl() returns the REST base (e.g. `http://host/v7`); `io(`${base}/secure`)` would
30
+ // request namespace `/v7/secure`, which the server (`io.of("/secure")`) rejects as
31
+ // "Invalid namespace" — 5× connect_error, zero realtime. Strip to the origin (scheme://host:port)
32
+ // so the namespace is exactly `/secure`, correct-by-construction: no caller can re-leak the path.
33
+ const origin = new URL(this.config.getSocketUrl()).origin;
34
+ log.debug("connecting /secure namespace", { origin, projectId: this.config.projectId });
27
35
  this.socket = io(`${origin}/secure`, {
28
36
  auth: { token: this.config.getAccessToken() },
29
37
  query: { projectId: this.config.projectId },
30
38
  transports: ["websocket"],
31
39
  autoConnect: true,
32
40
  });
41
+ // Lifecycle narration — the realtime layer is a notification optimization (REST cursors are the
42
+ // source of truth), so a flapping socket shows up here while the durable path keeps working.
43
+ this.socket.on("connect", () => log.debug("socket connected", { id: this.socket?.id }));
44
+ this.socket.on("disconnect", (reason) => log.debug("socket disconnected", { reason }));
45
+ this.socket.on("connect_error", (err) => log.debug("socket connect_error", { message: err.message }));
33
46
  return this.socket;
34
47
  }
35
48
  /** Tear down the connection and drop the cached socket (e.g. on provider unmount or sign-out). */
@@ -45,10 +58,12 @@ export class SecureChatSocketClient {
45
58
  joinConversation(conversationId) {
46
59
  // Object payload — the server destructures `{ conversationId }`; a bare string would arrive as
47
60
  // `undefined` and the join would silently no-op (see SecureClientEvents).
61
+ log.trace("join conversation room", { conversationId });
48
62
  this.connect().emit("join:secure-conversation", { conversationId });
49
63
  }
50
64
  /** Explicitly join a device room (ownership-verified). Owned devices auto-join on connect. */
51
65
  joinDevice(deviceId) {
66
+ log.trace("join device room", { deviceId });
52
67
  this.connect().emit("join:secure-device", { deviceId });
53
68
  }
54
69
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../src/transport/socket.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,EAAE;AACF,iGAAiG;AACjG,kGAAkG;AAClG,8FAA8F;AAC9F,kCAAkC;AAElC,OAAO,EAAE,EAAE,EAAU,MAAM,kBAAkB,CAAC;AA6C9C;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IAGjC,YAA6B,MAA8B;QAA9B,WAAM,GAAN,MAAM,CAAwB;QAFnD,WAAM,GAAwB,IAAI,CAAC;IAEmB,CAAC;IAE/D;;;;OAIG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,MAAM,EAAE,SAAS;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,MAAM,SAAS,EAAE;YACnC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE;YAC7C,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAC3C,UAAU,EAAE,CAAC,WAAW,CAAC;YACzB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,kGAAkG;IAClG,UAAU;QACR,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,kGAAkG;IAClG,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,yFAAyF;IACzF,gBAAgB,CAAC,cAAsB;QACrC,+FAA+F;QAC/F,0EAA0E;QAC1E,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,8FAA8F;IAC9F,UAAU,CAAC,QAAgB;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;OAMG;IACH,EAAE,CAAqC,KAAQ,EAAE,OAA8B;QAC7E,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,4FAA4F;QAC5F,CAAC,CAAC,EAAE,CAAC,KAAc,EAAE,OAAgB,CAAC,CAAC;QACvC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAc,EAAE,OAAgB,CAAC,CAAC;IACvD,CAAC;CACF"}
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../src/transport/socket.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,EAAE;AACF,iGAAiG;AACjG,kGAAkG;AAClG,8FAA8F;AAC9F,kCAAkC;AAElC,OAAO,EAAE,EAAE,EAAU,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,GAAG,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AA4CxC;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IAGjC,YAA6B,MAA8B;QAA9B,WAAM,GAAN,MAAM,CAAwB;QAFnD,WAAM,GAAwB,IAAI,CAAC;IAEmB,CAAC;IAE/D;;;;OAIG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,MAAM,EAAE,SAAS;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QAC/C,kGAAkG;QAClG,6FAA6F;QAC7F,mFAAmF;QACnF,kGAAkG;QAClG,kGAAkG;QAClG,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;QAC1D,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,MAAM,SAAS,EAAE;YACnC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE;YAC7C,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAC3C,UAAU,EAAE,CAAC,WAAW,CAAC;YACzB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,gGAAgG;QAChG,6FAA6F;QAC7F,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACvF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtG,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,kGAAkG;IAClG,UAAU;QACR,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,kGAAkG;IAClG,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,yFAAyF;IACzF,gBAAgB,CAAC,cAAsB;QACrC,+FAA+F;QAC/F,0EAA0E;QAC1E,GAAG,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,8FAA8F;IAC9F,UAAU,CAAC,QAAgB;QACzB,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;OAMG;IACH,EAAE,CAAqC,KAAQ,EAAE,OAA8B;QAC7E,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,4FAA4F;QAC5F,CAAC,CAAC,EAAE,CAAC,KAAc,EAAE,OAAgB,CAAC,CAAC;QACvC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAc,EAAE,OAAgB,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -0,0 +1,52 @@
1
+ /** Severity of a {@link SecureChatDebugLogger} line. `trace` is the noisiest (full payloads). */
2
+ export type SecureChatDebugLevel = "trace" | "debug";
3
+ /**
4
+ * Turn secure-chat dev logging on or off at runtime (overrides the env default). Off is the default;
5
+ * leave it off in production.
6
+ *
7
+ * @param on - `true` to emit logs, `false` to silence every logger (back to the zero-cost no-op).
8
+ * @param level - Minimum level to emit when on: `"trace"` (default) shows everything; `"debug"` mutes
9
+ * the noisier full-payload `trace` lines.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import { setSecureChatDebug } from "@agora-sdk/secure-chat-core";
14
+ * setSecureChatDebug(true); // everything, while debugging a sync issue
15
+ * setSecureChatDebug(true, "debug"); // status lines only, no raw payload dumps
16
+ * setSecureChatDebug(false); // back to silent
17
+ * ```
18
+ */
19
+ export declare function setSecureChatDebug(on: boolean, level?: SecureChatDebugLevel): void;
20
+ /**
21
+ * Whether secure-chat dev logging is currently emitting.
22
+ *
23
+ * @returns `true` if logs are on. Useful to guard building an expensive debug-only payload so the work
24
+ * is skipped when logging is off.
25
+ */
26
+ export declare function isSecureChatDebugEnabled(): boolean;
27
+ /**
28
+ * A namespaced dev logger. Both methods take a human-readable message and an optional raw data blob
29
+ * that is printed verbatim (objects expand in the console). Every call is a no-op when logging is off.
30
+ */
31
+ export interface SecureChatDebugLogger {
32
+ /** Noisiest level — full payloads, decoded shapes, per-item detail. */
33
+ trace(message: string, data?: unknown): void;
34
+ /** Status-line level — what happened, with summarizing scalars (ids, counts, seq, status). */
35
+ debug(message: string, data?: unknown): void;
36
+ }
37
+ /**
38
+ * Create a logger tagged with a subsystem name (e.g. `"handshakes"`, `"rest"`, `"messages"`). Lines
39
+ * print as `[secure-chat:<namespace>] <level> <message>` followed by the data blob, so output is easy
40
+ * to grep and filter by subsystem.
41
+ *
42
+ * @param namespace - Short subsystem tag included in every line from this logger.
43
+ * @returns A {@link SecureChatDebugLogger}; its calls are no-ops while logging is disabled.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * const log = createDebugLogger("handshakes");
48
+ * log.debug("catch-up start", { deviceId, fromCursor });
49
+ * log.trace("dispatch handshake", handshake);
50
+ * ```
51
+ */
52
+ export declare function createDebugLogger(namespace: string): SecureChatDebugLogger;
@@ -0,0 +1,106 @@
1
+ // debug — dev-only trace/debug logging for secure-chat's sync internals.
2
+ //
3
+ // THIS IS A DEVELOPMENT AID, NOT PRODUCTION OBSERVABILITY. It is OFF by default and every call
4
+ // short-circuits on a single boolean check the instant logging is disabled, so a shipped build with
5
+ // debug off does nothing and costs nothing — no message is formatted, no data is touched, nothing
6
+ // reaches the console. Because it only ever runs while a developer has explicitly switched it on, it
7
+ // deliberately logs RAW data (epochs, ids, cursors, decoded handshake shapes, counts, even payload
8
+ // bodies) next to a plain-English message, so the blind-server handshake / catch-up / decrypt flow is
9
+ // legible while iterating.
10
+ //
11
+ // It makes NO redaction guarantees and is NOT safe to leave on in a real deployment: when enabled it
12
+ // can and will print plaintext-adjacent material. Keep it off in production (the default). The
13
+ // engineering-standards rule in CLAUDE.md §1 ("never log plaintext/keys") is about what the SHIPPED,
14
+ // always-on code path may emit — this opt-in, off-by-default dev switch is the explicit escape hatch
15
+ // for diagnosing the sync machinery on a developer's own machine.
16
+ /** Numeric ordering so a configured minimum level can filter out quieter lines. */
17
+ const LEVEL_RANK = { trace: 10, debug: 20 };
18
+ /**
19
+ * Read the initial on/off state from the environment so a developer can enable logging without a code
20
+ * change — `globalThis.__AGORA_SECURE_CHAT_DEBUG__ = true` (any runtime) or the
21
+ * `AGORA_SECURE_CHAT_DEBUG` env var (Node; `""`/`"0"`/`"false"` count as off). Wrapped in try/catch so
22
+ * a locked-down environment that throws on `process`/`globalThis` access can never break import.
23
+ */
24
+ function resolveInitialEnabled() {
25
+ try {
26
+ const flag = globalThis.__AGORA_SECURE_CHAT_DEBUG__;
27
+ if (typeof flag === "boolean")
28
+ return flag;
29
+ if (typeof process !== "undefined" && process.env) {
30
+ const v = process.env.AGORA_SECURE_CHAT_DEBUG;
31
+ if (v != null)
32
+ return v !== "" && v !== "0" && v !== "false";
33
+ }
34
+ }
35
+ catch {
36
+ // Inaccessible global/process — treat as off.
37
+ }
38
+ return false;
39
+ }
40
+ // Module-level switch shared by every logger this module hands out. A single flag (not per-logger
41
+ // state) so one `setSecureChatDebug(true)` lights up the whole SDK at once.
42
+ let enabled = resolveInitialEnabled();
43
+ let minLevel = "trace";
44
+ /**
45
+ * Turn secure-chat dev logging on or off at runtime (overrides the env default). Off is the default;
46
+ * leave it off in production.
47
+ *
48
+ * @param on - `true` to emit logs, `false` to silence every logger (back to the zero-cost no-op).
49
+ * @param level - Minimum level to emit when on: `"trace"` (default) shows everything; `"debug"` mutes
50
+ * the noisier full-payload `trace` lines.
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * import { setSecureChatDebug } from "@agora-sdk/secure-chat-core";
55
+ * setSecureChatDebug(true); // everything, while debugging a sync issue
56
+ * setSecureChatDebug(true, "debug"); // status lines only, no raw payload dumps
57
+ * setSecureChatDebug(false); // back to silent
58
+ * ```
59
+ */
60
+ export function setSecureChatDebug(on, level = "trace") {
61
+ enabled = on;
62
+ minLevel = level;
63
+ }
64
+ /**
65
+ * Whether secure-chat dev logging is currently emitting.
66
+ *
67
+ * @returns `true` if logs are on. Useful to guard building an expensive debug-only payload so the work
68
+ * is skipped when logging is off.
69
+ */
70
+ export function isSecureChatDebugEnabled() {
71
+ return enabled;
72
+ }
73
+ /**
74
+ * Create a logger tagged with a subsystem name (e.g. `"handshakes"`, `"rest"`, `"messages"`). Lines
75
+ * print as `[secure-chat:<namespace>] <level> <message>` followed by the data blob, so output is easy
76
+ * to grep and filter by subsystem.
77
+ *
78
+ * @param namespace - Short subsystem tag included in every line from this logger.
79
+ * @returns A {@link SecureChatDebugLogger}; its calls are no-ops while logging is disabled.
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * const log = createDebugLogger("handshakes");
84
+ * log.debug("catch-up start", { deviceId, fromCursor });
85
+ * log.trace("dispatch handshake", handshake);
86
+ * ```
87
+ */
88
+ export function createDebugLogger(namespace) {
89
+ const tag = `[secure-chat:${namespace}]`;
90
+ const emit = (level, message, data) => {
91
+ // The hot path: one boolean + one integer compare, then bail. Nothing below runs when off.
92
+ if (!enabled || LEVEL_RANK[level] < LEVEL_RANK[minLevel])
93
+ return;
94
+ const line = `${tag} ${level} ${message}`;
95
+ // Use console.debug (not console.trace, which would attach a noisy stack to every line).
96
+ if (data === undefined)
97
+ console.debug(line);
98
+ else
99
+ console.debug(line, data);
100
+ };
101
+ return {
102
+ trace: (message, data) => emit("trace", message, data),
103
+ debug: (message, data) => emit("debug", message, data),
104
+ };
105
+ }
106
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../src/util/debug.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,+FAA+F;AAC/F,oGAAoG;AACpG,kGAAkG;AAClG,qGAAqG;AACrG,mGAAmG;AACnG,sGAAsG;AACtG,2BAA2B;AAC3B,EAAE;AACF,qGAAqG;AACrG,+FAA+F;AAC/F,qGAAqG;AACrG,qGAAqG;AACrG,kEAAkE;AAKlE,mFAAmF;AACnF,MAAM,UAAU,GAAyC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAElF;;;;;GAKG;AACH,SAAS,qBAAqB;IAC5B,IAAI,CAAC;QACH,MAAM,IAAI,GAAI,UAAwD,CAAC,2BAA2B,CAAC;QACnG,IAAI,OAAO,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAC3C,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAClD,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC9C,IAAI,CAAC,IAAI,IAAI;gBAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,OAAO,CAAC;QAC/D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kGAAkG;AAClG,4EAA4E;AAC5E,IAAI,OAAO,GAAG,qBAAqB,EAAE,CAAC;AACtC,IAAI,QAAQ,GAAyB,OAAO,CAAC;AAE7C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAW,EAAE,QAA8B,OAAO;IACnF,OAAO,GAAG,EAAE,CAAC;IACb,QAAQ,GAAG,KAAK,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,OAAO,CAAC;AACjB,CAAC;AAaD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,MAAM,GAAG,GAAG,gBAAgB,SAAS,GAAG,CAAC;IACzC,MAAM,IAAI,GAAG,CAAC,KAA2B,EAAE,OAAe,EAAE,IAAc,EAAQ,EAAE;QAClF,2FAA2F;QAC3F,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO;QACjE,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1C,yFAAyF;QACzF,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;YACvC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC;IACF,OAAO;QACL,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;QACtD,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;KACvD,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agora-sdk/secure-chat-core",
3
- "version": "0.6.0",
3
+ "version": "0.6.3",
4
4
  "private": false,
5
5
  "license": "Apache-2.0",
6
6
  "author": "Agora SDK Plus, maintained by Jenova Marie",
@@ -38,7 +38,7 @@
38
38
  "@agora-server/contract": "^0.9.3",
39
39
  "axios": "^1.4.0",
40
40
  "socket.io-client": "^4.8.1",
41
- "@agora-sdk/secure-chat-crypto": "0.6.0"
41
+ "@agora-sdk/secure-chat-crypto": "0.6.3"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "@agora-sdk/core": "^1.2.2",