@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.
- package/dist/cjs/content/builders.d.ts +40 -0
- package/dist/cjs/content/builders.js +85 -0
- package/dist/cjs/content/builders.js.map +1 -0
- package/dist/cjs/content/cbor.d.ts +48 -0
- package/dist/cjs/content/cbor.js +298 -0
- package/dist/cjs/content/cbor.js.map +1 -0
- package/dist/cjs/content/frame.d.ts +24 -0
- package/dist/cjs/content/frame.js +39 -0
- package/dist/cjs/content/frame.js.map +1 -0
- package/dist/cjs/content/mimi-content.d.ts +194 -0
- package/dist/cjs/content/mimi-content.js +289 -0
- package/dist/cjs/content/mimi-content.js.map +1 -0
- package/dist/cjs/hooks/message-fold.d.ts +91 -0
- package/dist/cjs/hooks/message-fold.js +218 -0
- package/dist/cjs/hooks/message-fold.js.map +1 -0
- package/dist/cjs/hooks/useSecureMessages.d.ts +30 -18
- package/dist/cjs/hooks/useSecureMessages.js +190 -238
- package/dist/cjs/hooks/useSecureMessages.js.map +1 -1
- package/dist/cjs/index.d.ts +7 -0
- package/dist/cjs/index.js +27 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/persistence/repository.d.ts +11 -11
- package/dist/cjs/persistence/repository.js +19 -19
- package/dist/cjs/persistence/repository.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/content/builders.d.ts +40 -0
- package/dist/esm/content/builders.js +77 -0
- package/dist/esm/content/builders.js.map +1 -0
- package/dist/esm/content/cbor.d.ts +48 -0
- package/dist/esm/content/cbor.js +292 -0
- package/dist/esm/content/cbor.js.map +1 -0
- package/dist/esm/content/frame.d.ts +24 -0
- package/dist/esm/content/frame.js +34 -0
- package/dist/esm/content/frame.js.map +1 -0
- package/dist/esm/content/mimi-content.d.ts +194 -0
- package/dist/esm/content/mimi-content.js +283 -0
- package/dist/esm/content/mimi-content.js.map +1 -0
- package/dist/esm/hooks/message-fold.d.ts +91 -0
- package/dist/esm/hooks/message-fold.js +214 -0
- package/dist/esm/hooks/message-fold.js.map +1 -0
- package/dist/esm/hooks/useSecureMessages.d.ts +30 -18
- package/dist/esm/hooks/useSecureMessages.js +192 -240
- package/dist/esm/hooks/useSecureMessages.js.map +1 -1
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/persistence/repository.d.ts +11 -11
- package/dist/esm/persistence/repository.js +19 -19
- package/dist/esm/persistence/repository.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- 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; `
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* - `rejected` — fails closed
|
|
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
|
|
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
|
-
/**
|
|
17
|
-
|
|
18
|
-
/**
|
|
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
|
|
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
|
-
/**
|
|
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
|
|
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;
|