@robono/server 0.14.0 → 0.16.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 (51) hide show
  1. package/CHANGELOG.md +20 -1
  2. package/NOTIFICATIONS.md +149 -0
  3. package/README.md +35 -1
  4. package/SBOM.spdx.json +8 -8
  5. package/dist/index.d.ts +5 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +4 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/location.js +1 -1
  10. package/dist/location.js.map +1 -1
  11. package/dist/managed-media.d.ts +9 -0
  12. package/dist/managed-media.d.ts.map +1 -1
  13. package/dist/managed-media.js +1 -0
  14. package/dist/managed-media.js.map +1 -1
  15. package/dist/messaging-media.d.ts +10 -0
  16. package/dist/messaging-media.d.ts.map +1 -1
  17. package/dist/messaging-media.js +12 -4
  18. package/dist/messaging-media.js.map +1 -1
  19. package/dist/messaging-notification-postgres.d.ts +7 -0
  20. package/dist/messaging-notification-postgres.d.ts.map +1 -0
  21. package/dist/messaging-notification-postgres.js +32 -0
  22. package/dist/messaging-notification-postgres.js.map +1 -0
  23. package/dist/messaging-notification-providers.d.ts +26 -0
  24. package/dist/messaging-notification-providers.d.ts.map +1 -0
  25. package/dist/messaging-notification-providers.js +107 -0
  26. package/dist/messaging-notification-providers.js.map +1 -0
  27. package/dist/messaging-notifications.d.ts +66 -0
  28. package/dist/messaging-notifications.d.ts.map +1 -0
  29. package/dist/messaging-notifications.js +128 -0
  30. package/dist/messaging-notifications.js.map +1 -0
  31. package/dist/messaging-transforms.d.ts.map +1 -1
  32. package/dist/messaging-transforms.js +26 -5
  33. package/dist/messaging-transforms.js.map +1 -1
  34. package/dist/messaging.d.ts +11 -1
  35. package/dist/messaging.d.ts.map +1 -1
  36. package/dist/messaging.js +65 -7
  37. package/dist/messaging.js.map +1 -1
  38. package/dist/messenger.d.ts +53 -0
  39. package/dist/messenger.d.ts.map +1 -0
  40. package/dist/messenger.js +89 -0
  41. package/dist/messenger.js.map +1 -0
  42. package/dist/push.d.ts.map +1 -1
  43. package/dist/push.js +1 -0
  44. package/dist/push.js.map +1 -1
  45. package/dist/types.d.ts +12 -3
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/webhooks.d.ts.map +1 -1
  48. package/dist/webhooks.js +11 -1
  49. package/dist/webhooks.js.map +1 -1
  50. package/package.json +4 -2
  51. package/sql/messaging-notifications.sql +41 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.16.0 — 2026-11-03
4
+
5
+ Add createRobonoMessengerServer for one authenticated messaging/media route, plus optional signed-event notification delivery using customer Apple/Google credentials and a durable private PostgreSQL queue. Announce supported group controls; keep actor identity server-verified and recheck customer permissions on search results. Include NOTIFICATIONS.md and the notification schema.
6
+
7
+ Requires matching service migrations 181–186 and coordinated package publication. Physical-device notification delivery is a separate acceptance check.
8
+
9
+ ## 0.15.0
10
+
11
+ Add authenticated social previews, bounded private thumbnail requests, media replacement, per-user mute/delete-chat operations, and source-revision-aware translation caching.
12
+
13
+ Authorize edit/delete/consume through the signed-in customer session; automatically announce adapter support on list requests. Accept signed sender_deleted attachment-cleanup events.
14
+
15
+ Selected-message translation accepts `output: "text" | "voice"` for either text or voice sources. Spoken output returns validated expiring audio alongside translated text. Recheck authorization, source identity and message availability after processing; invalid media is withheld.
16
+
17
+ Forward authenticated search, inbox, private seen and foreground activity operations. Inbox previews are additionally filtered through current customer-side permission checks for each chat, and the session is checked again before returning them.
18
+
19
+ Support authorized live messaging waits without another customer callback. Recheck the customer's session and membership before returning a waiting response; cancel the upstream wait when the caller disconnects. Enabled only when the Robono service advertises support.
20
+
21
+ Add the supergroup flag to backend membership snapshots and allow authenticated, host-authorized group member pagination.
22
+
3
23
  ## 0.14.0
4
24
 
5
25
  Add network-triggered call countdowns, selected-recipient or all-participant warnings, and typed signed call-ended events.
@@ -11,7 +31,6 @@ Add network-triggered call countdowns, selected-recipient or all-participant war
11
31
  Managed messaging and attachments, Maps and location sessions, movement consent, geofence rules, usage reporting and backend adapters. Existing Bridge and calling entry points remain available.
12
32
 
13
33
 
14
- ## Unreleased
15
34
 
16
35
  - Group admission and relationship helpers, separate screen-sharing permission, group webhook verification/push routing, and an authenticated on-demand message transcription/translation adapter. Source content and private media are resolved server-side; access is rechecked after conversion.
17
36
 
@@ -0,0 +1,149 @@
1
+ # Mobile message notifications
2
+
3
+ This installation uses your app's Apple/Google credentials. Robono's own app
4
+ credentials cannot send alerts for a customer's app. Chat in an open screen works
5
+ without push credentials; alerts with the app closed do not.
6
+
7
+ This guide requires `@robono/server` 0.16.0 and messaging packages 0.3.0,
8
+ with the matching Robono notification service. Older packages do not include
9
+ these helpers.
10
+
11
+ ## Required once per app
12
+
13
+ | Platform | App configuration | Private server configuration |
14
+ | --- | --- | --- |
15
+ | iPhone | Enable Push Notifications for the Bundle ID and provision the app accordingly. | Apple Team ID, APNs Key ID, `.p8` private key, Bundle ID, sandbox/production environment. |
16
+ | Android | Firebase project, Android application ID and `google-services.json`; configure the notifications plugin and rebuild. | Google project ID and service account authorized for Firebase Cloud Messaging. Prefer your existing secret manager; never bundle its private key in the app. |
17
+
18
+ Apple setup: https://developer.apple.com/documentation/usernotifications/establishing-a-token-based-connection-to-apns
19
+
20
+ Expo native-token setup: https://docs.expo.dev/push-notifications/sending-notifications-custom/
21
+
22
+ Google setup: https://firebase.google.com/docs/cloud-messaging/send/v1-api
23
+
24
+ The supplied Expo connector uses native APNs tokens on iPhone and FCM tokens on
25
+ Android. It does not use Expo Push tokens. Development iPhone builds use the APNs
26
+ sandbox; TestFlight and App Store builds use production. Keep test/live credentials,
27
+ notification scopes and webhook secrets separate.
28
+
29
+ ## Server
30
+
31
+ Apply `@robono/server/sql/messaging-notifications.sql` to your **own PostgreSQL
32
+ database**, using the private server role. The tables have row security enabled and
33
+ no public grants. They must not be exposed through your browser/mobile database API.
34
+ Use your database's encrypted storage and normal backup policy. Device tokens are
35
+ private routing identifiers; the notification signing keys remain in server secrets.
36
+
37
+ ```ts
38
+ import {createRobonoMessengerServer} from '@robono/server';
39
+
40
+ const messenger = createRobonoMessengerServer({
41
+ apiKey: process.env.ROBONO_API_KEY!,
42
+ allowedOrigins: ['https://your-company.com'],
43
+ authenticate: request => accounts.verifySession(request),
44
+ authorize: access => permissions.allowMessaging(access),
45
+ notifications: {
46
+ scope: 'your-app-production',
47
+ webhookSecret: process.env.ROBONO_WEBHOOK_SECRET!,
48
+ workerSecret: process.env.ROBONO_NOTIFICATION_WORKER_SECRET!,
49
+ query: (sql, values) => database.query(sql, values),
50
+ title: 'Your company',
51
+ apple: {
52
+ teamId: process.env.APNS_TEAM_ID!,
53
+ keyId: process.env.APNS_KEY_ID!,
54
+ privateKey: process.env.APNS_PRIVATE_KEY!,
55
+ bundleId: 'com.yourcompany.app',
56
+ sandbox: false,
57
+ },
58
+ google: {
59
+ projectId: process.env.FIREBASE_PROJECT_ID!,
60
+ clientEmail: process.env.FIREBASE_CLIENT_EMAIL!,
61
+ privateKey: process.env.FIREBASE_PRIVATE_KEY!,
62
+ },
63
+ authorizeRecipient: ({userId, conversationId}) =>
64
+ accounts.isActive(userId).then(active => active &&
65
+ permissions.mayReadConversation(userId, conversationId)),
66
+ },
67
+ });
68
+
69
+ // Your framework mounts this single POST route at /api/robono.
70
+ export const POST = (request: Request) => messenger.handle(request);
71
+ ```
72
+
73
+ `accounts`, `permissions`, and `database` are the customer's existing services.
74
+ Their checks must return a verified user ID or an explicit permission decision.
75
+ Do not replace them with unconditional approval. Omit `apple` or `google` only if
76
+ you do not support that platform. Missing credentials produce a registration error.
77
+
78
+ Set your Robono integration's signed event URL to:
79
+ `https://your-company.com/api/robono?service=events`.
80
+ If you already process other Robono events at one endpoint, verify/route those
81
+ events in your existing handler; this notification handler acknowledges unrelated
82
+ events without processing them and must not replace your cleanup/billing handler.
83
+
84
+ Schedule a POST to `/api/robono?service=notification-worker` at your chosen alert
85
+ interval, with `Authorization: Bearer <ROBONO_NOTIFICATION_WORKER_SECRET>`.
86
+ Use an independent random secret of at least 32 characters. A one-minute schedule
87
+ can delay an alert by a minute; use a continuously running worker for prompt alerts.
88
+ The worker processes up to 20 due jobs per invocation. Multiple workers safely
89
+ claim different jobs. Run the SQL file's cleanup statements daily.
90
+
91
+ The signed event is acknowledged only after it is durably queued. Every send
92
+ checks the current account, conversation, message, blocks, mute preference and
93
+ device ownership. Transient failures retry with backoff; permanent failures remain
94
+ in the private `jobs` table with a safe error code. Monitor failed jobs and credential
95
+ errors. Old alerts expire after 24 hours. Apple/Google acceptance does not mean the
96
+ phone displayed the alert; do not use it as a delivered/read receipt. Provider
97
+ timeouts can leave delivery uncertain; stable collapse identifiers reduce repeated
98
+ alerts, but exact-once OS notification display cannot be promised.
99
+
100
+ ## Expo / React Native
101
+
102
+ Install `expo-notifications`, `expo-secure-store` and the package's existing
103
+ `expo-crypto` dependency using `npx expo install`. Configure the Expo notifications
104
+ plugin, then build the app; Expo Go is not the production verification target.
105
+
106
+ ```ts
107
+ import {connectExpoMessagingNotifications} from
108
+ '@robono/messaging-react-native/expo-notifications';
109
+
110
+ const notifications = await connectExpoMessagingNotifications({
111
+ url: 'https://your-company.com/api/robono?service=notifications',
112
+ userId: signedInUser.id,
113
+ getAccessToken: () => accounts.accessToken(),
114
+ authorize: event => messagingClient.canOpenNotification(event),
115
+ open: event => navigation.openConversation(event.conversationId),
116
+ refresh: () => inbox.refresh(),
117
+ onError: error => showNotificationSetupError(error.message),
118
+ });
119
+
120
+ // When the person taps your "Enable notifications" button:
121
+ await notifications.enable();
122
+
123
+ // On logout, before destroying the session:
124
+ await Promise.allSettled([notifications.signOut(), messagingClient.signOut()]);
125
+ await accounts.signOut();
126
+ ```
127
+
128
+ Connect once per restored account. On navigation, keep the connector at app level;
129
+ do not recreate it for every chat. `dispose()` only removes listeners; use
130
+ `signOut()` to unregister the old account's device. If unregistering fails while
131
+ offline, clear local session data anyway and revoke that server session/account
132
+ access according to your existing sign-out policy. Alerts contain no message text,
133
+ media URLs or credentials. New registration moves the native token to the new
134
+ account, and notification opening always rechecks authorization.
135
+
136
+ The helper does not replace your app's global notification presentation handler
137
+ or interfere with calling notifications. Compose
138
+ `withMessagingNotificationPresentation` with that existing handler to suppress an
139
+ alert for the conversation already on screen. Set its active conversation to null
140
+ when the app is backgrounded. Browser background alerts are a separate capability;
141
+ these mobile credentials do not enable them.
142
+
143
+ ## Ready means a device received an alert
144
+
145
+ Check both a foreground and background alert, a tap from a closed app, sign-out,
146
+ account switching, revoked chat access, muted conversations and token rotation.
147
+ Do not label notification setup complete merely because open-chat messages work
148
+ or Apple/Google accepted a request. The local automated tests use simulated provider
149
+ responses; they do not prove that a customer's credentials are provisioned correctly.
package/README.md CHANGED
@@ -303,7 +303,7 @@ The calling appearance response also supplies `features` (`voice`, `video`, `own
303
303
 
304
304
  `calling.setGroup({externalGroupId, members, allowed, revision, connectionIds?})` synchronizes an app-owned calling group of two to eight members. A member supplies `userId`, `voice`, `video` and optionally `appId` for another network. Own-network groups need no Bridge membership. Cross-network groups require currently accepted pairwise connections in `connectionIds`; an app cannot grant permissions for someone in another app. Persist a monotonic revision and retry lost responses without changing it. The returned `group:` connection ID uses the separate group client and group webhook events.
305
305
 
306
- `createMessagingTransformBackendAdapter` supplies an authenticated HTTP handler for selected-message transcription and translation. Configure `robono` (your messaging backend), `speech` (`robono.transforms`), `storage` (private signed audio URL resolver), `authenticate` and `authorize`. Accept only `operation`, `conversationId`, `messageId` and translation `language` from the client. The adapter reads the authoritative message, checks current membership/settings before and after processing, and returns text without changing the original. `MessagingClient.transformRequest` points to this handler. Language processing remains separately metered through the speech service; no whole-conversation scanning is involved.
306
+ `createMessagingTransformBackendAdapter` supplies an authenticated HTTP handler for selected-message transcription and translation. Configure `robono` (your messaging backend), `speech` (`robono.transforms`), `storage` (private signed audio URL resolver), `authenticate` and `authorize`. Accept only `operation`, `conversationId`, `messageId` and translation `language` and optional `output` (`text` or `voice`, default `text`) from the client. The adapter reads the authoritative message, checks current membership/settings before and after processing, and returns text, plus an expiring audio artifact when voice output is requested, without changing the original. Text and voice messages can both be translated to text or to voice. `MessagingClient.transformRequest` points to this handler. Language processing remains separately metered through the speech service; no whole-conversation scanning is involved.
307
307
 
308
308
  ### Hosted messaging moderation
309
309
 
@@ -339,3 +339,37 @@ event ID using the existing webhook helpers.
339
339
 
340
340
  See [calling limits, billing rules and recovery](https://robono.com/docs#calling-reliability)
341
341
  for defaults, alert fields, revision conflicts, retry timing and active-call behavior.
342
+
343
+
344
+ ### Sender message changes
345
+
346
+ The updated messaging adapter passes `edit`, `delete`, and `consume` through your
347
+ existing `authenticate` and `authorize` callbacks, always overriding caller-supplied
348
+ identity. If your callback lists operation names explicitly, include these actions
349
+ with the same current conversation-membership checks. The Robono service separately
350
+ enforces sender ownership, message revision and whether a recipient already consumed
351
+ the message. Updated adapters announce support automatically; older adapters do not
352
+ expose the new UI controls. Process signed `messaging.message_removed` events with
353
+ `reason: 'sender_deleted'` alongside the existing cleanup reasons. Do not delete a
354
+ private file while another retained message still references it.
355
+
356
+ Attachment edits use `edit` with the same verified `kind`/`media` fields as sending.
357
+ Omitting them changes only the caption. `kind: 'text'` removes the attachment and
358
+ requires nonempty text. `resolveMedia` also verifies replacement files. A successful
359
+ replacement emits `messaging.attachment_removed` with the old `asset_id`, message ID,
360
+ conversation ID and edit `revision`. Delete only that obsolete file, and only when
361
+ no retained message references it. **Do not remove the message for this event.**
362
+ Cleanup retries remain authorized after access ends; duplicate deliveries must be
363
+ safe. Robono-managed storage expires the replaced file automatically.
364
+
365
+ Chat-list controls add `conversation-preferences` (`muted: boolean`) and
366
+ `conversation-delete` (`throughMessageId`, captured from the visible row). Include
367
+ both in an explicit host authorization allowlist and keep the same membership
368
+ checks. Deleting hides history only for the authenticated user. Source attachment
369
+ access, search and quoted history respect the same boundary.
370
+
371
+ A `messaging.message_created` webhook now includes `notification_muted`. Continue
372
+ synchronizing messages, but do not show a banner, play a sound or send a push when
373
+ this flag is true. Its value is refreshed on webhook retries. Do not treat mute as
374
+ loss of membership or stop delivery. The host owns OS push notifications and must
375
+ honor this field in its notification sender.
package/SBOM.spdx.json CHANGED
@@ -2,22 +2,22 @@
2
2
  "spdxVersion": "SPDX-2.3",
3
3
  "dataLicense": "CC0-1.0",
4
4
  "SPDXID": "SPDXRef-DOCUMENT",
5
- "name": "@robono/server@0.14.0",
6
- "documentNamespace": "http://spdx.org/spdxdocs/@robono%2fserver-0.14.0-***",
5
+ "name": "@robono/server@0.16.0",
6
+ "documentNamespace": "http://spdx.org/spdxdocs/@robono%2fserver-0.16.0-***",
7
7
  "creationInfo": {
8
- "created": "2026-10-31T09:48:56.695Z",
8
+ "created": "2026-11-03T12:40:11.342Z",
9
9
  "creators": [
10
10
  "Tool: npm/cli-11.6.2"
11
11
  ]
12
12
  },
13
13
  "documentDescribes": [
14
- "SPDXRef-Package-robono.server-0.14.0"
14
+ "SPDXRef-Package-robono.server-0.16.0"
15
15
  ],
16
16
  "packages": [
17
17
  {
18
18
  "name": "@robono/server",
19
- "SPDXID": "SPDXRef-Package-robono.server-0.14.0",
20
- "versionInfo": "0.14.0",
19
+ "SPDXID": "SPDXRef-Package-robono.server-0.16.0",
20
+ "versionInfo": "0.16.0",
21
21
  "packageFileName": "",
22
22
  "description": "Provider-neutral server SDK for the Robono Bridge API.",
23
23
  "primaryPackagePurpose": "LIBRARY",
@@ -29,7 +29,7 @@
29
29
  {
30
30
  "referenceCategory": "PACKAGE-MANAGER",
31
31
  "referenceType": "purl",
32
- "referenceLocator": "pkg:npm/%40robono/server@0.14.0"
32
+ "referenceLocator": "pkg:npm/%40robono/server@0.16.0"
33
33
  }
34
34
  ]
35
35
  }
@@ -37,7 +37,7 @@
37
37
  "relationships": [
38
38
  {
39
39
  "spdxElementId": "SPDXRef-DOCUMENT",
40
- "relatedSpdxElement": "SPDXRef-Package-robono.server-0.14.0",
40
+ "relatedSpdxElement": "SPDXRef-Package-robono.server-0.16.0",
41
41
  "relationshipType": "DESCRIBES"
42
42
  }
43
43
  ]
package/dist/index.d.ts CHANGED
@@ -19,4 +19,9 @@ export { createMessagingTransformBackendAdapter } from './messaging-transforms.j
19
19
  export { RobonoLocationBackend, createLocationBackendAdapter } from './location.js';
20
20
  export type { LocationGrantInput } from './location.js';
21
21
  export { RobonoLocationChatBackend } from './location-chat.js';
22
+ export { createRobonoMessengerServer } from './messenger.js';
23
+ export type { RobonoMessengerServerOptions, MessengerAccess } from './messenger.js';
24
+ export * from './messaging-notifications.js';
25
+ export * from './messaging-notification-providers.js';
26
+ export * from './messaging-notification-postgres.js';
22
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACrI,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,YAAY,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,yBAAyB,EACzB,WAAW,EACX,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtE,mBAAmB,YAAY,CAAC;AAEhC,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AACvF,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEpF,OAAO,EAAC,kCAAkC,EAAC,MAAM,sBAAsB,CAAC;AACxE,YAAY,EAAC,uBAAuB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AACtI,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAC,sCAAsC,EAAC,MAAM,2BAA2B,CAAC;AAEjF,OAAO,EAAC,qBAAqB,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AACjF,YAAY,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACtD,OAAO,EAAC,yBAAyB,EAAC,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACrI,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,YAAY,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,yBAAyB,EACzB,WAAW,EACX,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtE,mBAAmB,YAAY,CAAC;AAEhC,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AACvF,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEpF,OAAO,EAAC,kCAAkC,EAAC,MAAM,sBAAsB,CAAC;AACxE,YAAY,EAAC,uBAAuB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AACtI,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAC,sCAAsC,EAAC,MAAM,2BAA2B,CAAC;AAEjF,OAAO,EAAC,qBAAqB,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AACjF,YAAY,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACtD,OAAO,EAAC,yBAAyB,EAAC,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAC,2BAA2B,EAAC,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EAAC,4BAA4B,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAEjF,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC"}
package/dist/index.js CHANGED
@@ -11,4 +11,8 @@ export { RobonoManagedMedia } from './managed-media.js';
11
11
  export { createMessagingTransformBackendAdapter } from './messaging-transforms.js';
12
12
  export { RobonoLocationBackend, createLocationBackendAdapter } from './location.js';
13
13
  export { RobonoLocationChatBackend } from './location-chat.js';
14
+ export { createRobonoMessengerServer } from './messenger.js';
15
+ export * from './messaging-notifications.js';
16
+ export * from './messaging-notification-providers.js';
17
+ export * from './messaging-notification-postgres.js';
14
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAM1D,OAAO,EACL,yBAAyB,EACzB,WAAW,EACX,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGtE,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAGvF,OAAO,EAAC,kCAAkC,EAAC,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAC,sCAAsC,EAAC,MAAM,2BAA2B,CAAC;AAEjF,OAAO,EAAC,qBAAqB,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AAEjF,OAAO,EAAC,yBAAyB,EAAC,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAM1D,OAAO,EACL,yBAAyB,EACzB,WAAW,EACX,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGtE,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAGvF,OAAO,EAAC,kCAAkC,EAAC,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAC,sCAAsC,EAAC,MAAM,2BAA2B,CAAC;AAEjF,OAAO,EAAC,qBAAqB,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AAEjF,OAAO,EAAC,yBAAyB,EAAC,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAC,2BAA2B,EAAC,MAAM,gBAAgB,CAAC;AAG3D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC"}
package/dist/location.js CHANGED
@@ -71,7 +71,7 @@ export function createLocationBackendAdapter(options) {
71
71
  "history",
72
72
  "address",
73
73
  "directions",
74
- "map-open", "motion-status", "motion-permission", "motion",
74
+ "map-open", "motion-status", "motion-permission", "motion", "motion-start", "motion-view", "motion-list",
75
75
  ].includes(operation))
76
76
  return reply({ error: { code: "operation_not_allowed" } }, 403);
77
77
  const input = { ...body, actor };
@@ -1 +1 @@
1
- {"version":3,"file":"location.js","sourceRoot":"","sources":["../src/location.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW1C,4FAA4F;AAC5F,MAAM,OAAO,qBAAqB;IACxB,SAAS,CAAyB;IAC1C,YAAY,OAAgC;QAC1C,IAAI,CAAC,SAAS,GAAG,IAAI,sBAAsB,CAAC;YAC1C,GAAG,OAAO;YACV,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,oCAAoC;SACjE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,CAAC,SAAiB,EAAE,QAAiC,EAAE;QAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IACD,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IACD,QAAQ,CAAC,KAAyB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAA2C,CAAC,CAAC;IAC5E,CAAC;IACD,YAAY,CAAC,KAA8D;QACzE,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IACD,iBAAiB,CAAC,MAAc;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;CACF;AACD,MAAM,UAAU,4BAA4B,CAC1C,OAWC;IAED,OAAO,KAAK,EAAE,OAAgB,EAAE,EAAE;QAChC,MAAM,KAAK,GAAG,CACZ,IAAa,EACb,MAAM,GAAG,GAAG,EACZ,UAAkC,EAAE,EACpC,EAAE,CACF,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACjC,MAAM;YACN,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU;gBAC3B,GAAG,OAAO;aACX;SACF,CAAC,CAAC;QACL,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,IAA6B,CAAC;YAClC,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACvB,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7D,MAAM,KAAK,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YAC/C,IACE,CAAC;gBACC,UAAU;gBACV,OAAO;gBACP,QAAQ;gBACR,MAAM;gBACN,MAAM;gBACN,MAAM;gBACN,OAAO;gBACP,QAAQ;gBACR,QAAQ;gBACR,SAAS;gBACT,SAAS;gBACT,YAAY;gBACZ,UAAU,EAAE,eAAe,EAAE,mBAAmB,EAAE,QAAQ;aAC3D,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACrB,OAAO,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAClE,MAAM,KAAK,GAA4B,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC;YAC1D,OAAO,KAAK,CAAC,SAAS,CAAC;YACvB,IACE,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;gBACvE,OAAO,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAClE,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC;gBAC7B,OAAO,KAAK,CACV,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAC/C,CAAC,CAAC,MAAM,IAAI,GAAG,EACf,CAAC,CAAC,YAAY;oBACZ,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,EAAE;oBAC7D,CAAC,CAAC,EAAE,CACP,CAAC;YACJ,CAAC;YACD,OAAO,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"location.js","sourceRoot":"","sources":["../src/location.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,15 @@ export declare class RobonoManagedMedia implements MessagingPrivateStorage {
21
21
  headers?: Record<string, string>;
22
22
  media: MessagingStoredMedia;
23
23
  }>;
24
+ thumbnail(input: {
25
+ actorId: string;
26
+ conversationId: string;
27
+ messageId: string;
28
+ }): Promise<{
29
+ url: string;
30
+ headers?: Record<string, string>;
31
+ media: MessagingStoredMedia;
32
+ } | null>;
24
33
  discard(input: Parameters<MessagingPrivateStorage['discard']>[0]): Promise<void>;
25
34
  resolve(input: {
26
35
  actorId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"managed-media.d.ts","sourceRoot":"","sources":["../src/managed-media.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,uBAAuB,EAAC,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AACvF,yFAAyF;AACzF,qBAAa,kBAAmB,YAAW,uBAAuB;IAErD,OAAO,CAAC,OAAO;IAD3B,OAAO,CAAC,GAAG,CAAQ;gBACC,OAAO,EAAC;QAAC,MAAM,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC;QAAA,KAAK,CAAC,EAAC,OAAO,KAAK,CAAA;KAAC;YAKjE,OAAO;IAMrB,OAAO,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACzG,QAAQ,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAKxH,QAAQ,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAClH,iBAAiB,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,CAAC;IAC1J,OAAO,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC,oBAAoB,GAAC,IAAI,CAAC;CAG7G"}
1
+ {"version":3,"file":"managed-media.d.ts","sourceRoot":"","sources":["../src/managed-media.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,uBAAuB,EAAC,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AACvF,yFAAyF;AACzF,qBAAa,kBAAmB,YAAW,uBAAuB;IAErD,OAAO,CAAC,OAAO;IAD3B,OAAO,CAAC,GAAG,CAAQ;gBACC,OAAO,EAAC;QAAC,MAAM,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC;QAAA,KAAK,CAAC,EAAC,OAAO,KAAK,CAAA;KAAC;YAKjE,OAAO;IAMrB,OAAO,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACzG,QAAQ,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAKxH,QAAQ,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAClH,iBAAiB,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,CAAC;IAChK,SAAS,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,GAAC,IAAI,CAAC;IACvJ,OAAO,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC,oBAAoB,GAAC,IAAI,CAAC;CAG7G"}
@@ -25,6 +25,7 @@ export class RobonoManagedMedia {
25
25
  }
26
26
  download(input) { return this.request('download', input); }
27
27
  authorizeDownload(input) { return this.request('download', input); }
28
+ thumbnail(input) { return this.request('thumbnail', input); }
28
29
  async discard(input) { await this.request('discard', input); }
29
30
  async resolve(input) {
30
31
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"managed-media.js","sourceRoot":"","sources":["../src/managed-media.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"managed-media.js","sourceRoot":"","sources":["../src/managed-media.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,16 @@ export interface MessagingStorageContext {
19
19
  conversationId: string;
20
20
  }
21
21
  export interface MessagingPrivateStorage {
22
+ /** Optional authorized, bounded JPEG preview; never return original video/image bytes. */
23
+ thumbnail?(input: {
24
+ actorId: string;
25
+ conversationId: string;
26
+ messageId: string;
27
+ }): Promise<{
28
+ url: string;
29
+ headers?: Record<string, string>;
30
+ media: MessagingStoredMedia;
31
+ } | null>;
22
32
  /** Optional combined operation for managed storage. MUST check current membership,
23
33
  * blocks, message visibility/expiry and asset ownership before issuing a URL.
24
34
  * Return authoritative metadata; never trust a phone-supplied asset ID. */
@@ -1 +1 @@
1
- {"version":3,"file":"messaging-media.d.ts","sourceRoot":"","sources":["../src/messaging-media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,gBAAgB,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IAAE,OAAO,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,UAAU,CAAC,EAAC,MAAM,CAAA;CAAC;AACzH,MAAM,WAAW,mBAAmB;IAAE,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,UAAU,CAAC,EAAC,MAAM,CAAA;CAAC;AACzG,MAAM,MAAM,kBAAkB,GAAC,OAAO,GAAC,OAAO,GAAC,OAAO,GAAC,UAAU,CAAC;AAClE,MAAM,WAAW,uBAAuB;IAAE,OAAO,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,cAAc,EAAC,MAAM,CAAA;CAAC;AAC/F,MAAM,WAAW,uBAAuB;IACtC;;+EAE2E;IAC3E,iBAAiB,CAAC,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,CAAC,CAAC;IAClK,kJAAkJ;IAClJ,OAAO,CAAC,KAAK,EAAC,uBAAuB,GAAC;QAAC,IAAI,EAAC,kBAAkB,CAAC;QAAA,IAAI,EAAC,mBAAmB,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAA;KAAC,GAAC;QAAC,KAAK,EAAC,oBAAoB,CAAA;KAAC,CAAC,CAAC;IAC5K,0IAA0I;IAC1I,QAAQ,CAAC,KAAK,EAAC,uBAAuB,GAAE,OAAO,CAAC;QAAC,IAAI,EAAC,kBAAkB,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,CAAC,CAAC;IACtG,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAA;KAAC,CAAC,CAAC;IACxJ,4GAA4G;IAC5G,OAAO,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,QAAQ,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAgBD,uGAAuG;AACvG,wBAAgB,kCAAkC,CAAC,OAAO,EAAC;IAC1D,MAAM,EAAC,sBAAsB,CAAC;IAC9B,YAAY,EAAC,CAAC,OAAO,EAAC,OAAO,KAAG,OAAO,CAAC,MAAM,GAAC,IAAI,CAAC,CAAC;IACrD,SAAS,EAAC,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAC;QAAA,cAAc,CAAC,EAAC,MAAM,CAAC;QAAA,QAAQ,CAAC,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,OAAO,CAAA;KAAC,KAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9H,OAAO,EAAC,uBAAuB,CAAC;CAChC,IACa,SAAQ,OAAO,uBA0C5B"}
1
+ {"version":3,"file":"messaging-media.d.ts","sourceRoot":"","sources":["../src/messaging-media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,gBAAgB,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IAAE,OAAO,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,UAAU,CAAC,EAAC,MAAM,CAAA;CAAC;AACzH,MAAM,WAAW,mBAAmB;IAAE,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,UAAU,CAAC,EAAC,MAAM,CAAA;CAAC;AACzG,MAAM,MAAM,kBAAkB,GAAC,OAAO,GAAC,OAAO,GAAC,OAAO,GAAC,UAAU,CAAC;AAClE,MAAM,WAAW,uBAAuB;IAAE,OAAO,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,cAAc,EAAC,MAAM,CAAA;CAAC;AAC/F,MAAM,WAAW,uBAAuB;IACtC,0FAA0F;IAC1F,SAAS,CAAC,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,GAAC,IAAI,CAAC,CAAC;IAC/J;;+EAE2E;IAC3E,iBAAiB,CAAC,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,CAAC,CAAC;IAClK,kJAAkJ;IAClJ,OAAO,CAAC,KAAK,EAAC,uBAAuB,GAAC;QAAC,IAAI,EAAC,kBAAkB,CAAC;QAAA,IAAI,EAAC,mBAAmB,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAA;KAAC,GAAC;QAAC,KAAK,EAAC,oBAAoB,CAAA;KAAC,CAAC,CAAC;IAC5K,0IAA0I;IAC1I,QAAQ,CAAC,KAAK,EAAC,uBAAuB,GAAE,OAAO,CAAC;QAAC,IAAI,EAAC,kBAAkB,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,CAAC,CAAC;IACtG,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAA;KAAC,CAAC,CAAC;IACxJ,4GAA4G;IAC5G,OAAO,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,QAAQ,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAgBD,uGAAuG;AACvG,wBAAgB,kCAAkC,CAAC,OAAO,EAAC;IAC1D,MAAM,EAAC,sBAAsB,CAAC;IAC9B,YAAY,EAAC,CAAC,OAAO,EAAC,OAAO,KAAG,OAAO,CAAC,MAAM,GAAC,IAAI,CAAC,CAAC;IACrD,SAAS,EAAC,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAC;QAAA,cAAc,CAAC,EAAC,MAAM,CAAC;QAAA,QAAQ,CAAC,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,OAAO,CAAA;KAAC,KAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9H,OAAO,EAAC,uBAAuB,CAAC;CAChC,IACa,SAAQ,OAAO,uBA+C5B"}
@@ -44,9 +44,9 @@ export function createMessagingMediaBackendAdapter(options) {
44
44
  return respond({ error: { code: 'invalid_media_request' } }, 422);
45
45
  }
46
46
  const operation = input.operation;
47
- if (!['prepare', 'complete', 'download', 'discard'].includes(operation))
47
+ if (!['prepare', 'complete', 'download', 'thumbnail', 'discard'].includes(operation))
48
48
  return respond({ error: { code: 'operation_not_allowed' } }, 403);
49
- const uploadId = operation !== 'download' ? id(input.uploadId) : undefined;
49
+ const uploadId = !['download', 'thumbnail'].includes(operation) ? id(input.uploadId) : undefined;
50
50
  const conversationId = operation !== 'discard' ? id(input.conversationId) : undefined;
51
51
  if (!await options.authorize({ actorId, operation, ...(uploadId ? { uploadId } : {}), ...(conversationId ? { conversationId } : {}), request }))
52
52
  return respond({ error: { code: 'operation_not_allowed' } }, 403);
@@ -55,13 +55,13 @@ export function createMessagingMediaBackendAdapter(options) {
55
55
  return respond({ ok: true });
56
56
  }
57
57
  let messageId;
58
- if (operation === 'download') {
58
+ if (operation === 'download' || operation === 'thumbnail') {
59
59
  messageId = id(input.messageId);
60
60
  if (!/^\d{1,19}$/.test(messageId) || BigInt(messageId) < 1n || BigInt(messageId) >= 9223372036854775807n)
61
61
  return respond({ error: { code: 'invalid_media_request' } }, 422);
62
62
  // Managed storage performs the authoritative checks in the same request that
63
63
  // resolves the asset. Custom storage retains the list-before-download path.
64
- if (options.storage.authorizeDownload) {
64
+ if (operation === 'download' && options.storage.authorizeDownload) {
65
65
  const plan = await options.storage.authorizeDownload({ actorId, conversationId: conversationId, messageId });
66
66
  id(plan.media.assetId);
67
67
  return respond(planUrl(plan));
@@ -98,6 +98,14 @@ export function createMessagingMediaBackendAdapter(options) {
98
98
  const message = page.messages?.find((m) => m.id === messageId);
99
99
  if (!message?.media)
100
100
  return respond({ error: { code: 'message_not_found' } }, 404);
101
+ if (operation === 'thumbnail') {
102
+ const preview = await options.storage.thumbnail?.({ actorId, conversationId: conversationId, messageId: messageId });
103
+ if (!preview)
104
+ return respond(null);
105
+ if (preview.media.assetId !== message.media.assetId || preview.media.mimeType !== 'image/jpeg' || !Number.isInteger(preview.media.byteSize) || preview.media.byteSize < 1 || preview.media.byteSize > 131072)
106
+ throw Error('Invalid attachment preview.');
107
+ return respond({ ...planUrl(preview), media: preview.media });
108
+ }
101
109
  return respond({ ...planUrl(await options.storage.download({ actorId, conversationId: conversationId, messageId: messageId, media: message.media })), media: message.media });
102
110
  }
103
111
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"messaging-media.js","sourceRoot":"","sources":["../src/messaging-media.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messaging-media.js","sourceRoot":"","sources":["../src/messaging-media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { MessagingNotificationStore } from './messaging-notifications.js';
2
+ /** Compatible with pg Pool.query; keep this database connection exclusively on your server. */
3
+ export type MessagingNotificationQuery = (sql: string, parameters: unknown[]) => Promise<{
4
+ rows: Record<string, any>[];
5
+ }>;
6
+ export declare function createPostgresMessagingNotificationStore(query: MessagingNotificationQuery): MessagingNotificationStore;
7
+ //# sourceMappingURL=messaging-notification-postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging-notification-postgres.d.ts","sourceRoot":"","sources":["../src/messaging-notification-postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,0BAA0B,EAAsC,MAAM,8BAA8B,CAAC;AAElH,+FAA+F;AAC/F,MAAM,MAAM,0BAA0B,GAAC,CAAC,GAAG,EAAC,MAAM,EAAC,UAAU,EAAC,OAAO,EAAE,KAAG,OAAO,CAAC;IAAC,IAAI,EAAC,MAAM,CAAC,MAAM,EAAC,GAAG,CAAC,EAAE,CAAA;CAAC,CAAE,CAAC;AAChH,wBAAgB,wCAAwC,CAAC,KAAK,EAAC,0BAA0B,GAAE,0BAA0B,CA8BpH"}
@@ -0,0 +1,32 @@
1
+ export function createPostgresMessagingNotificationStore(query) {
2
+ return {
3
+ async register(scope, device) {
4
+ // Serialize registrations for this token; move it away from a previous signed-in account.
5
+ await query(`select robono_notifications.register_device($1,$2,$3,$4,$5)`, [scope, device.id, device.userId, device.provider, device.token]);
6
+ },
7
+ async remove(scope, userId, id, token) { await query('delete from robono_notifications.devices where scope=$1 and user_id=$2 and device_id=$3 and ($4::text is null or token=$4)', [scope, userId, id, token ?? null]); },
8
+ async enqueue(scope, event) {
9
+ await query(`insert into robono_notifications.jobs(scope,event_id,device_id,user_id,provider,token,event)
10
+ select $1,$2,device_id,user_id,provider,token,$4::jsonb from robono_notifications.devices
11
+ where scope=$1 and user_id=$3 and updated_at>now()-interval '90 days'
12
+ on conflict(scope,event_id,device_id,user_id) do nothing`, [scope, event.event_id, event.recipient_external_user_id, JSON.stringify(event)]);
13
+ },
14
+ async claim(scope, limit, lease) {
15
+ const result = await query(`with ready as (
16
+ select id from robono_notifications.jobs where scope=$1 and
17
+ ((state='pending' and next_attempt_at<=now()) or (state='running' and lease_until<=now()))
18
+ order by next_attempt_at,id for update skip locked limit $2
19
+ ) update robono_notifications.jobs j set state='running',lease=$3,lease_until=now()+interval '10 minutes',attempt=attempt+1
20
+ from ready where j.id=ready.id returning j.*`, [scope, limit, lease]);
21
+ return result.rows.map(row => ({ id: String(row.id), lease, event: row.event, attempt: row.attempt,
22
+ device: { id: row.device_id, userId: row.user_id, provider: row.provider, token: row.token } }));
23
+ },
24
+ async current(scope, device) { return (await query(`select 1 from robono_notifications.devices where scope=$1 and device_id=$2 and user_id=$3 and provider=$4 and token=$5 and updated_at>now()-interval '90 days'`, [scope, device.id, device.userId, device.provider, device.token])).rows.length === 1; },
25
+ async finish(scope, job, result) {
26
+ await query(`update robono_notifications.jobs set state=$4,next_attempt_at=coalesce($5,next_attempt_at),lease=null,lease_until=null,
27
+ last_code=$6,finished_at=case when $4 in ('sent','skipped','failed') then now() else null end
28
+ where scope=$1 and id=$2 and lease=$3 and state='running'`, [scope, job.id, job.lease, result.state === 'retry' ? 'pending' : result.state, result.retryAt ?? null, result.code ?? null]);
29
+ },
30
+ };
31
+ }
32
+ //# sourceMappingURL=messaging-notification-postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging-notification-postgres.js","sourceRoot":"","sources":["../src/messaging-notification-postgres.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,wCAAwC,CAAC,KAAgC;IACvF,OAAO;QACL,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAC,MAAM;YACzB,0FAA0F;YAC1F,MAAM,KAAK,CAAC,6DAA6D,EAAC,CAAC,KAAK,EAAC,MAAM,CAAC,EAAE,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,QAAQ,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1I,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE,EAAC,KAAK,IAAE,MAAM,KAAK,CAAC,4HAA4H,EAAC,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE,EAAC,KAAK,IAAE,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC;QAC7M,KAAK,CAAC,OAAO,CAAC,KAAK,EAAC,KAAK;YACvB,MAAM,KAAK,CAAC;;;iEAG+C,EAAC,CAAC,KAAK,EAAC,KAAK,CAAC,QAAQ,EAAC,KAAK,CAAC,0BAA0B,EAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7I,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,KAAK,EAAC,KAAK,EAAC,KAAK;YAC3B,MAAM,MAAM,GAAC,MAAM,KAAK,CAAC;;;;;qDAKsB,EAAC,CAAC,KAAK,EAAC,KAAK,EAAC,KAAK,CAAC,CAAC,CAAC;YACrE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA,EAAE,CAAA,CAAC,EAAC,EAAE,EAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,KAAK,EAAC,GAAG,CAAC,KAAK,EAAC,OAAO,EAAC,GAAG,CAAC,OAAO;gBACvF,MAAM,EAAC,EAAC,EAAE,EAAC,GAAG,CAAC,SAAS,EAAC,MAAM,EAAC,GAAG,CAAC,OAAO,EAAC,QAAQ,EAAC,GAAG,CAAC,QAAQ,EAAC,KAAK,EAAC,GAAG,CAAC,KAAK,EAAC,EAAC,CAAC,CAAuB,CAAC;QAChH,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,KAAK,EAAC,MAAM,IAAE,OAAO,CAAC,MAAM,KAAK,CAAC,gKAAgK,EAAC,CAAC,KAAK,EAAC,MAAM,CAAC,EAAE,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,QAAQ,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAG,CAAC,CAAC,CAAA,CAAC;QACjS,KAAK,CAAC,MAAM,CAAC,KAAK,EAAC,GAAG,EAAC,MAAM;YAC3B,MAAM,KAAK,CAAC;;kEAEgD,EAAC,CAAC,KAAK,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,CAAC,KAAK,EAAC,MAAM,CAAC,KAAK,KAAG,OAAO,CAAA,CAAC,CAAA,SAAS,CAAA,CAAC,CAAA,MAAM,CAAC,KAAK,EAAC,MAAM,CAAC,OAAO,IAAE,IAAI,EAAC,MAAM,CAAC,IAAI,IAAE,IAAI,CAAC,CAAC,CAAC;QAC9K,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { MessagingPushDevice, MessagingPushData, MessagingNotificationOptions } from './messaging-notifications.js';
2
+ export interface AppleMessagingCredentials {
3
+ teamId: string;
4
+ keyId: string;
5
+ privateKey: string;
6
+ bundleId: string;
7
+ sandbox?: boolean;
8
+ }
9
+ export interface GoogleMessagingCredentials {
10
+ projectId: string;
11
+ clientEmail: string;
12
+ privateKey: string;
13
+ }
14
+ type SendResult = Awaited<ReturnType<MessagingNotificationOptions['send']>>;
15
+ /** Uses only fixed Apple/Google endpoints. Private keys never enter notification payloads. */
16
+ export declare function createMessagingPushSender(options: {
17
+ apple?: AppleMessagingCredentials;
18
+ google?: GoogleMessagingCredentials;
19
+ title?: string;
20
+ fetch?: typeof fetch;
21
+ }): {
22
+ providers: ("apns" | "fcm")[];
23
+ send(device: MessagingPushDevice, data: MessagingPushData): Promise<SendResult>;
24
+ };
25
+ export {};
26
+ //# sourceMappingURL=messaging-notification-providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging-notification-providers.d.ts","sourceRoot":"","sources":["../src/messaging-notification-providers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,mBAAmB,EAAC,iBAAiB,EAAC,4BAA4B,EAAC,MAAM,8BAA8B,CAAC;AAErH,MAAM,WAAW,yBAAyB;IAAE,MAAM,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,OAAO,CAAC,EAAC,OAAO,CAAA;CAAC;AAC1H,MAAM,WAAW,0BAA0B;IAAE,SAAS,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAA;CAAC;AACnG,KAAK,UAAU,GAAC,OAAO,CAAC,UAAU,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAS1E,8FAA8F;AAC9F,wBAAgB,yBAAyB,CAAC,OAAO,EAAC;IAAC,KAAK,CAAC,EAAC,yBAAyB,CAAC;IAAA,MAAM,CAAC,EAAC,0BAA0B,CAAC;IAAA,KAAK,CAAC,EAAC,MAAM,CAAC;IAAA,KAAK,CAAC,EAAC,OAAO,KAAK,CAAA;CAAC;;iBAsDrI,mBAAmB,QAAM,iBAAiB,GAAE,OAAO,CAAC,UAAU,CAAC;EAKlF"}