@robono/messaging-react-native 0.1.0 → 0.2.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/CHANGELOG.md +14 -0
- package/README.md +79 -4
- package/SBOM.spdx.json +832 -112
- package/dist/calling.js +2 -2
- package/dist/expo-download.d.ts +3 -0
- package/dist/expo-download.js +43 -0
- package/dist/expo-media.js +23 -0
- package/dist/expo-outbox.d.ts +13 -0
- package/dist/expo-outbox.js +81 -0
- package/dist/expo-saved.d.ts +24 -0
- package/dist/expo-saved.js +76 -0
- package/dist/expo-social.d.ts +3 -0
- package/dist/expo-social.js +21 -0
- package/dist/expo-thumbnails.d.ts +9 -0
- package/dist/expo-thumbnails.js +68 -0
- package/dist/expo.d.ts +9 -3
- package/dist/expo.js +143 -23
- package/dist/forward.d.ts +13 -0
- package/dist/forward.js +61 -0
- package/dist/icons.d.ts +1 -1
- package/dist/inbox.d.ts +16 -0
- package/dist/inbox.js +48 -0
- package/dist/index.d.ts +45 -2
- package/dist/index.js +376 -113
- package/dist/media-controller.d.ts +18 -0
- package/dist/media-controller.js +118 -3
- package/dist/media-readiness.d.ts +1 -1
- package/dist/media-ui.d.ts +16 -5
- package/dist/media-ui.js +15 -11
- package/dist/message-links.d.ts +5 -0
- package/dist/message-links.js +30 -0
- package/dist/message-order.d.ts +4 -0
- package/dist/message-order.js +17 -0
- package/dist/native-outbox.d.ts +49 -0
- package/dist/native-outbox.js +51 -0
- package/dist/pollVoteQueue.d.ts +3 -0
- package/dist/pollVoteQueue.js +29 -0
- package/dist/polls.d.ts +6 -2
- package/dist/polls.js +85 -18
- package/dist/popup.d.ts +9 -0
- package/dist/popup.js +7 -0
- package/dist/recent-media.js +1 -0
- package/dist/safety.d.ts +2 -1
- package/dist/safety.js +11 -5
- package/dist/saved.d.ts +10 -0
- package/dist/saved.js +46 -0
- package/dist/search.d.ts +9 -0
- package/dist/search.js +41 -0
- package/dist/social.d.ts +19 -0
- package/dist/social.js +35 -0
- package/dist/visual/RobonoIcon.js +2 -1
- package/dist/voice-composer.js +2 -2
- package/package.json +20 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
Use the compact Messenger media toolbar, autoplay video after audio setup, and offer native full-screen playback. Dismiss iOS menus before presenting Saved media, Forward/Delete/Report or Search; keep native pickers free of a competing modal. Reserve the actual timestamp width so edited messages do not overlap it.
|
|
6
|
+
|
|
7
|
+
Add shared Edit/Delete actions, draft-preserving composer editing, delete confirmation and search/quote navigation. Media adapters report opening/playback independently of bubble visibility. Media replacement/removal, authorized forwarding, persistent Saved copies and native outgoing draft recovery are implemented. Physical iPhone checks cover selected flows; physical Android acceptance remains outstanding.
|
|
8
|
+
|
|
9
|
+
Add text/voice translation to text or voice, shared translation popup, browser/Expo spoken playback and expiring-result cleanup. Add optional viewer downloads (off by default): device photo library, iPhone Save to Files sheet and bounded Android folder export. Streamed video exports an authorized local copy without replacing playback. Requires expo-file-system >=55.0.5. iPhone checks cover playback, Saved files, restart recovery and popup transitions. Android device acceptance and physical export-sheet checks remain pending.
|
|
10
|
+
|
|
11
|
+
Add `MessagingInbox`, the shared search popup and optional expiring typing/online labels in the existing header. Clear private unread counts independently of public read receipts. Closed polls disable their controls on both native and web renderers. Requires the matching 0.2.0 core release; iPhone fixture acceptance is recorded separately from Android acceptance.
|
|
12
|
+
|
|
13
|
+
Render unfinished sends as ordinary chat bubbles with compact status icons and in-place retry. Keep the composer available during attachment sends. Stage browser and Expo attachments locally until Send; add native thumbnails and preview without consuming the draft.
|
|
14
|
+
|
|
15
|
+
Use the server-provided total member count for large groups instead of counting a partial member page.
|
|
16
|
+
|
|
3
17
|
## 0.1.0
|
|
4
18
|
|
|
5
19
|
Optional messaging screens and media controls, attachment composer, recording, playback, quoting, reactions, polls, translation, transcription, block and report flows. Expo adapters and optional calling integration.
|
package/README.md
CHANGED
|
@@ -54,9 +54,15 @@ This entry targets Expo SDK 55–56; the core components do not require Expo. Co
|
|
|
54
54
|
```tsx
|
|
55
55
|
import {
|
|
56
56
|
ExpoMessagingScreen, createExpoMessagingStorage,
|
|
57
|
-
createExpoMessagingAudioSession,
|
|
57
|
+
createExpoMessagingAudioSession, createExpoMessagingClient,
|
|
58
58
|
} from '@robono/messaging-react-native/expo';
|
|
59
59
|
|
|
60
|
+
const messagingClient = createExpoMessagingClient({
|
|
61
|
+
url: appConfig.messagingEndpoint,
|
|
62
|
+
userId: session.userId,
|
|
63
|
+
getAccessToken: () => sessions.accessToken(),
|
|
64
|
+
});
|
|
65
|
+
|
|
60
66
|
const storage = createExpoMessagingStorage({
|
|
61
67
|
url: appConfig.messagingMediaEndpoint,
|
|
62
68
|
getAccessToken: () => sessions.accessToken(),
|
|
@@ -136,13 +142,13 @@ The website preview renders the same bubbles, inline voice controls, full-screen
|
|
|
136
142
|
|
|
137
143
|
The standard chat uses compact grouped bubbles, timestamps at the lower right, inline voice controls and an expandable attachment tray below the composer. Attach dismisses the keyboard; tap it again to return to typing. Android Back closes the tray first. The microphone remains available beside the text field, including while text is typed; Send is enabled when there is text or a finished voice recording. Camera remains available when capture is enabled, including with typed text or a reviewed voice recording. Captures join the existing pending attachments. New designs start with a light chat palette; existing saved colors remain unchanged. The builder’s “Use classic chat colors” action applies the default palette to the draft without changing enabled features.
|
|
138
144
|
|
|
139
|
-
Voice-only conversations use Robono Messenger’s compact composer: the duration-limit placeholder, embedded microphone and adjacent Send control. The Expo adapter records and reviews audio inline, with elapsed time, microphone metering, playback and removal before sending. The builder uses the same controls with a local browser microphone recording; no audio is uploaded from the preview. When texting is enabled, tap the microphone to record in the composer and tap it again to stop. Each completed recording becomes a separate playable attachment in the shared horizontal row, and the microphone is available for another recording. Typed text is preserved; Send
|
|
145
|
+
Voice-only conversations use Robono Messenger’s compact composer: the duration-limit placeholder, embedded microphone and adjacent Send control. The Expo adapter records and reviews audio inline, with elapsed time, microphone metering, playback and removal before sending. The builder uses the same controls with a local browser microphone recording; no audio is uploaded from the preview. When texting is enabled, tap the microphone to record in the composer and tap it again to stop. Each completed recording becomes a separate playable attachment in the shared horizontal row, and the microphone is available for another recording. Typed text is preserved; Send puts accompanying text on the last attachment as its caption. Custom media adapters can use `components.VoiceComposer`, `VoiceMessageComposer` and `VoiceDraftPlayback`; `renderTextComposer` restores the text controls alongside the reviewed recording.
|
|
140
146
|
|
|
141
147
|
Recent attachments can appear directly beneath the attachment buttons. Photos, Videos and Document filter this strip; tapping the selected category again shows all enabled types. Tapping a thumbnail adds it above the composer as a pending attachment; its magnifying-glass button opens a preview instead. Remove unwanted attachments or press Send to submit the selection with any typed text. Camera starts capture. When no recent-media source is supplied, the category buttons open the device picker. Supply `attachmentChoices` with an ID, kind, name, and optional thumbnail URI/duration. Only enabled attachment types appear. With `MessagingScreen`, selecting a tile calls `pickAttachment` with `options.attachmentId`; use `options.intent` to distinguish selection (`send`, retained for adapter compatibility) from preview. Returning photo, video or document media stages it in the composer; returning null cancels without selecting it. Voice recordings also become pending attachments after recording stops. With `ExpoMessagingScreen`, supply `resolveAttachmentChoice(id, signal)` to return an authorized cache copy; the standard preview, validation, send and cleanup flow handles the rest. Keep originals in the user's library untouched. The host controls library access and which recent items it supplies.
|
|
142
148
|
|
|
143
149
|
Camera capture and library selection are separate controls. `appearance.showPhotoLibrary` and `showVideoLibrary` hide library choices without removing the corresponding message-type permission needed for camera captures. Both default to true for existing integrations. The builder manages these together with Camera, so enabling capture does not select Photos/Videos or insert example media. Parent and network message-type permissions remain enforced.
|
|
144
150
|
|
|
145
|
-
The Expo adapter
|
|
151
|
+
The Expo adapter keeps selected and recorded attachments locally until Send. Recording stops into a playable draft without uploading. Send immediately queues the bubbles, then uploads the selected files. A caption belongs to the final attachment; a quote belongs to the first. The batch preserves selection order when uploads finish out of order. Custom adapters can supply components.VoiceAttachment for draft playback and releaseAttachment for local cleanup.
|
|
146
152
|
|
|
147
153
|
|
|
148
154
|
## Group conversations, reactions and polls
|
|
@@ -163,4 +169,73 @@ The default header’s three-dot menu provides Block/Unblock and Report when the
|
|
|
163
169
|
|
|
164
170
|
Blocking retains history and stops direct messages and calls for that pair in your app. Shared group messages remain visible. Reporting is separate: it shares the selected message, or up to five recent incoming messages, and the reason with your app’s moderators. It confirms success only after storage acknowledges the report. The SDK reuses the request ID on retry. Owners and administrators review reports in the Messaging workspace; private media is reviewed through your app’s authorized storage tools.
|
|
165
171
|
|
|
166
|
-
Enable Reactions to show an emoji ribbon beside the long-pressed bubble, or the hover smile icon on desktop. Selected reactions stay attached below the message. Polls are interactive chat messages created from the attachment menu. Transcript and Translate
|
|
172
|
+
Enable Reactions to show an emoji ribbon beside the long-pressed bubble, or the hover smile icon on desktop. Selected reactions stay attached below the message. Polls are interactive chat messages created from the attachment menu. Transcript shows readable text under a voice message. Translate opens the shared compact popup with **Translate to text** and **Translate to voice**. Both text and voice messages support either output. The Expo screen supplies the spoken-result player and uses the normal audio session, so recordings and other playback do not overlap. The original message and timestamp stay in place. Provide `language` for the viewer’s target language and connect `MessagingClient.transformRequest` to the authenticated `createMessagingTransformBackendAdapter` on your server.
|
|
173
|
+
|
|
174
|
+
### November 1 behavior update (unpublished)
|
|
175
|
+
|
|
176
|
+
The default palette follows Messenger. Existing saved customer colors remain in
|
|
177
|
+
place. Direct chats use the brand header; groups use Messenger’s blue header.
|
|
178
|
+
Bubble padding is fixed; the legacy `compact` property is accepted for backwards
|
|
179
|
+
compatibility but no longer changes core spacing.
|
|
180
|
+
|
|
181
|
+
Photo/video/file selections remain removable drafts; tapping a draft opens its
|
|
182
|
+
viewer without deleting the selection. Expo supplies small image/video previews
|
|
183
|
+
using `expo-image-manipulator` and `expo-video-thumbnails`; add those optional peers
|
|
184
|
+
when using the Expo entry. Copy uses `expo-clipboard`. Native media downloads use
|
|
185
|
+
photo-library permission; sharing uses the platform share sheet. New managed photo/video uploads have an authenticated preview (at most 480 pixels and 128 KiB) after the updated storage worker, inspector, media handler and migration 178 are deployed. Previews count toward normal storage/transfer usage. Older large uploads without a preview remain tap-to-open; originals over 2 MiB are never automatically downloaded to build thumbnails.
|
|
186
|
+
|
|
187
|
+
`appearance.showWaveform` controls display only. Verified waveform samples stay
|
|
188
|
+
in `media.waveform`. The playback track remains seekable when the waveform is
|
|
189
|
+
hidden. Managed storage computes waveform data independently of this preference.
|
|
190
|
+
|
|
191
|
+
Groups offer polls; direct chats offer a recipient-only Yes/No question whose
|
|
192
|
+
first answer is final. Both use centered popups on all platforms. Deploy migration
|
|
193
|
+
`20261101017400_messaging_captions_questions.sql` and the updated messaging handler
|
|
194
|
+
before releasing these SDK changes. Deploy the updated media inspector before the
|
|
195
|
+
updated managed-media handler. These source changes have not been published.
|
|
196
|
+
|
|
197
|
+
### Optional downloads in the viewer
|
|
198
|
+
|
|
199
|
+
Select **Download button** in the website's **Features & preview → Appearance**, or
|
|
200
|
+
set `appearance.showDownloadButton: true`. The Expo viewer shows the same Download
|
|
201
|
+
action for photos, videos and files; it stays hidden by default. Photos and videos
|
|
202
|
+
save to the device photo library after the user grants permission. On iPhone,
|
|
203
|
+
documents open the native sheet with Save to Files. On Android, the user chooses a
|
|
204
|
+
folder and the document is copied there in bounded chunks. Cancelling creates no
|
|
205
|
+
file, and a failed copy removes its own partial output. Use `expo-file-system`
|
|
206
|
+
55.0.5 or later for Android document saving. Originals remain in private storage.
|
|
207
|
+
This setting controls the visible action, not the authorization needed to view media.
|
|
208
|
+
|
|
209
|
+
`createExpoMessagingClient` keeps outgoing text, selected attachments and failed
|
|
210
|
+
sends in your app's private document storage, separated by endpoint and user.
|
|
211
|
+
`ExpoMessagingScreen` restores small previews and reuses the original upload/send
|
|
212
|
+
identity when retrying. Call `client.signOut()` on logout to remove that user's
|
|
213
|
+
saved work. `dispose()` preserves unfinished work for reopening. Use
|
|
214
|
+
`persistence: false` to disable storage. No received history or download links are
|
|
215
|
+
persisted by this store. The OS app sandbox protects these files; this is not an
|
|
216
|
+
additional application encryption layer.
|
|
217
|
+
|
|
218
|
+
The shared message menu and media preview include Forward and sender Delete.
|
|
219
|
+
Forward checks both chats and uploads a separate private attachment copy; retrying
|
|
220
|
+
uses the same send ID. Edits can replace/remove attachments before a recipient
|
|
221
|
+
opens them. Removing the only attachment requires text. Caption edits keep the
|
|
222
|
+
original file. The ordinary composer draft is retained throughout editing.
|
|
223
|
+
|
|
224
|
+
`MessagingInbox` offers Mute/Unmute and Delete chat on long press (right-click on
|
|
225
|
+
web), plus accessibility actions. Deletion clears only that user's view, up to the
|
|
226
|
+
message shown when confirmation opened. New messages bring the chat back. When
|
|
227
|
+
composing your own native navigation, pass
|
|
228
|
+
`onDeleted={id => messagingClient.forgetConversation(id)}` to clear its local work.
|
|
229
|
+
Updated backend support is required; old adapters hide these controls.
|
|
230
|
+
|
|
231
|
+
### Saved and multiple-message actions
|
|
232
|
+
|
|
233
|
+
Long press a message, then choose Select to select more rows. The compact action bar supports chronological forwarding and deletion of eligible unread outgoing messages. A single selection also supports Copy, Save and Edit. Back clears the selection.
|
|
234
|
+
|
|
235
|
+
`createExpoMessagingClient` also supplies Saved: explicit local text and attachment copies in the app-private directory, separated by endpoint, account and namespace. The shared header opens Saved. Saving rechecks message access before and after making the copy, and marks incoming content consumed. Saved copies are independent of network retention; they never reuse signed URLs. `client.signOut()` deletes this account’s saved copies. Disabling persistence also disables Saved. Device storage is not a cloud backup or an additional app encryption layer. For a custom engine, supply a `MessagingSavedStore` to `MessagingClient` and `openSavedAttachment` to the shared screen.
|
|
236
|
+
|
|
237
|
+
### Social previews
|
|
238
|
+
|
|
239
|
+
Install `react-native-webview` with the Expo peer dependencies and rebuild the native app. `ExpoMessagingScreen` supplies the player and the standard shared popup; a custom engine can supply `components.SocialPlayer`. The updated server adapter and hosted messaging endpoint advertise support. Recognized links gain a small play action, while tapping the link still opens the original app/site. Players are loaded only after an explicit tap and fresh message authorization, require explicit playback, and are removed on close/background/navigation. Opening a player stops the current voice-message player and uses the supplied audio-session coordinator. No application cookies or local-file access are shared with the embedded page. Some providers/private posts cannot be embedded; the popup keeps an Open-original link.
|
|
240
|
+
|
|
241
|
+
The same provider parser is used by Messenger, the browser and the backend, including Snapchat and Rumble. Preview opens contribute to the per-network `social.opened` metric. This source change still requires coordinated endpoint and package deployment; installing a newer UI against an older adapter does not enable unsupported controls.
|