@agora-sdk/secure-chat-core 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/cjs/content/builders.d.ts +40 -0
  2. package/dist/cjs/content/builders.js +85 -0
  3. package/dist/cjs/content/builders.js.map +1 -0
  4. package/dist/cjs/content/cbor.d.ts +48 -0
  5. package/dist/cjs/content/cbor.js +298 -0
  6. package/dist/cjs/content/cbor.js.map +1 -0
  7. package/dist/cjs/content/frame.d.ts +24 -0
  8. package/dist/cjs/content/frame.js +39 -0
  9. package/dist/cjs/content/frame.js.map +1 -0
  10. package/dist/cjs/content/mimi-content.d.ts +194 -0
  11. package/dist/cjs/content/mimi-content.js +289 -0
  12. package/dist/cjs/content/mimi-content.js.map +1 -0
  13. package/dist/cjs/hooks/message-fold.d.ts +91 -0
  14. package/dist/cjs/hooks/message-fold.js +218 -0
  15. package/dist/cjs/hooks/message-fold.js.map +1 -0
  16. package/dist/cjs/hooks/useSecureMessages.d.ts +30 -18
  17. package/dist/cjs/hooks/useSecureMessages.js +190 -238
  18. package/dist/cjs/hooks/useSecureMessages.js.map +1 -1
  19. package/dist/cjs/index.d.ts +7 -0
  20. package/dist/cjs/index.js +27 -1
  21. package/dist/cjs/index.js.map +1 -1
  22. package/dist/cjs/persistence/repository.d.ts +11 -11
  23. package/dist/cjs/persistence/repository.js +19 -19
  24. package/dist/cjs/persistence/repository.js.map +1 -1
  25. package/dist/cjs/version.d.ts +1 -1
  26. package/dist/cjs/version.js +1 -1
  27. package/dist/esm/content/builders.d.ts +40 -0
  28. package/dist/esm/content/builders.js +77 -0
  29. package/dist/esm/content/builders.js.map +1 -0
  30. package/dist/esm/content/cbor.d.ts +48 -0
  31. package/dist/esm/content/cbor.js +292 -0
  32. package/dist/esm/content/cbor.js.map +1 -0
  33. package/dist/esm/content/frame.d.ts +24 -0
  34. package/dist/esm/content/frame.js +34 -0
  35. package/dist/esm/content/frame.js.map +1 -0
  36. package/dist/esm/content/mimi-content.d.ts +194 -0
  37. package/dist/esm/content/mimi-content.js +283 -0
  38. package/dist/esm/content/mimi-content.js.map +1 -0
  39. package/dist/esm/hooks/message-fold.d.ts +91 -0
  40. package/dist/esm/hooks/message-fold.js +214 -0
  41. package/dist/esm/hooks/message-fold.js.map +1 -0
  42. package/dist/esm/hooks/useSecureMessages.d.ts +30 -18
  43. package/dist/esm/hooks/useSecureMessages.js +192 -240
  44. package/dist/esm/hooks/useSecureMessages.js.map +1 -1
  45. package/dist/esm/index.d.ts +7 -0
  46. package/dist/esm/index.js +6 -0
  47. package/dist/esm/index.js.map +1 -1
  48. package/dist/esm/persistence/repository.d.ts +11 -11
  49. package/dist/esm/persistence/repository.js +19 -19
  50. package/dist/esm/persistence/repository.js.map +1 -1
  51. package/dist/esm/version.d.ts +1 -1
  52. package/dist/esm/version.js +1 -1
  53. package/package.json +3 -2
@@ -1,23 +1,28 @@
1
1
  import { SecureMessageModel } from "../contract/index.js";
2
2
  import { GroupHandle, type SecureDecryptFailureReason } from "@agora-sdk/secure-chat-crypto";
3
+ import { type MimiContent } from "../content/mimi-content.js";
4
+ import { type RenderedContent } from "./message-fold.js";
3
5
  /**
4
6
  * Decryption outcome for a stored message:
5
- * - `ok` — decrypted + authenticated; `plaintext` is set.
6
- * - `pending` not decryptable yet (no group handle, or the message's epoch is ahead of ours); it will
7
- * be retried when the group advances. `plaintext` is null.
8
- * - `rejected` — fails closed: the MLS core rejected it (replay, over-window gap, bad auth, malformed,
9
- * too-old epoch). NEVER retried; `plaintext` is null and `rejectedReason` says why.
7
+ * - `ok` — decrypted + authenticated + decoded; `content`/`mimi`/`contentHash` are set (unless it is a
8
+ * folded mutation, which the list omits, or a reserved control frame, which is hidden).
9
+ * - `pending` — not decryptable yet (no handle, or epoch ahead). Retried when the group advances.
10
+ * - `rejected` — fails closed (replay/gap/bad-auth/malformed/too-old, or undecodable content). Never retried.
10
11
  */
11
12
  export type SecureMessageStatus = "ok" | "pending" | "rejected";
12
- /** A stored message paired with its decryption outcome. */
13
+ /** A stored message paired with its decoded, folded content. */
13
14
  export interface DecryptedSecureMessage {
14
15
  /** The raw message row from the server (still holds the base64 ciphertext). */
15
16
  model: SecureMessageModel;
16
- /** Decrypted text, or null when {@link DecryptedSecureMessage.status} is `pending` or `rejected`. */
17
- plaintext: string | null;
18
- /** Decryption outcome drives fail-closed handling and what the UI renders. */
17
+ /** The Tier-2 projection (body/replyTo/editedAt/deleted/reactions), or `null` when not `ok`. */
18
+ content: RenderedContent | null;
19
+ /** The raw decoded `MimiContent` (power users), or `null` when not `ok`. */
20
+ mimi: MimiContent | null;
21
+ /** SHA-256 content-hash — reference this to reply/react/edit/delete — or `null` when not `ok`. */
22
+ contentHash: Uint8Array | null;
23
+ /** Decryption outcome. */
19
24
  status: SecureMessageStatus;
20
- /** When `status` is `rejected`, why the MLS core refused the message. */
25
+ /** When `status` is `rejected`, why. */
21
26
  rejectedReason?: SecureDecryptFailureReason;
22
27
  }
23
28
  /** Options for {@link useSecureMessages}. */
@@ -29,7 +34,7 @@ export interface UseSecureMessagesOptions {
29
34
  }
30
35
  /** The state and actions returned by {@link useSecureMessages}. */
31
36
  export interface UseSecureMessagesValues {
32
- /** Loaded messages, newest first, each with decrypted text when possible. */
37
+ /** Rendered messages (post/reply rows with folded reactions/edits/deletes), newest first. */
33
38
  messages: DecryptedSecureMessage[];
34
39
  /** True while a page load or refresh is in flight. */
35
40
  loading: boolean;
@@ -41,15 +46,21 @@ export interface UseSecureMessagesValues {
41
46
  loadMore: () => Promise<void>;
42
47
  /** Reload from the newest message, replacing the current list. */
43
48
  refresh: () => Promise<void>;
44
- /** Encrypt + send a text message. Requires a resolvable group + sender device. */
49
+ /** Encrypt + send a text post. */
45
50
  sendMessage: (text: string) => Promise<void>;
51
+ /** Send a reply to the message with `targetHash` (its {@link DecryptedSecureMessage.contentHash}). */
52
+ reply: (targetHash: Uint8Array, text: string) => Promise<void>;
53
+ /** React to the message with `targetHash` using `token` (e.g. an emoji). */
54
+ react: (targetHash: Uint8Array, token: string) => Promise<void>;
55
+ /** Edit the message with `targetHash`, replacing its body with `text`. */
56
+ editMessage: (targetHash: Uint8Array, text: string) => Promise<void>;
57
+ /** Delete (tombstone) the message with `targetHash`. */
58
+ deleteMessage: (targetHash: Uint8Array) => Promise<void>;
59
+ /** Withdraw your reaction whose own content-hash is `reactionHash`. */
60
+ unreact: (reactionHash: Uint8Array) => Promise<void>;
46
61
  }
47
62
  /**
48
- * Load, decrypt, send, and live-receive messages in one secure conversation.
49
- *
50
- * Auto-resolves the MLS group handle (via `resolveGroup`) and the sender device id (from the
51
- * persisted device) unless overridden in `options`. Joins the conversation socket room for live
52
- * `secure:message` events.
63
+ * Load, decrypt, send, and live-receive MIMI-content messages in one secure conversation.
53
64
  *
54
65
  * @param conversationId - The conversation to read and send within.
55
66
  * @param options - {@link UseSecureMessagesOptions}.
@@ -57,8 +68,9 @@ export interface UseSecureMessagesValues {
57
68
  *
58
69
  * @example
59
70
  * ```tsx
60
- * const { messages, sendMessage } = useSecureMessages(conversationId);
71
+ * const { messages, sendMessage, react } = useSecureMessages(conversationId);
61
72
  * await sendMessage("hello 💜");
73
+ * await react(messages[0].contentHash!, "👍");
62
74
  * ```
63
75
  */
64
76
  export declare function useSecureMessages(conversationId: string, options?: UseSecureMessagesOptions): UseSecureMessagesValues;