@robono/server 0.21.0 → 0.23.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 (82) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +30 -2
  3. package/SBOM.spdx.json +9 -9
  4. package/dist/calling-session-handle.d.ts +13 -0
  5. package/dist/calling-session-handle.d.ts.map +1 -0
  6. package/dist/calling-session-handle.js +37 -0
  7. package/dist/calling-session-handle.js.map +1 -0
  8. package/dist/calling.d.ts +1 -0
  9. package/dist/calling.d.ts.map +1 -1
  10. package/dist/calling.js +1 -1
  11. package/dist/calling.js.map +1 -1
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +2 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/location.d.ts.map +1 -1
  17. package/dist/location.js +3 -0
  18. package/dist/location.js.map +1 -1
  19. package/dist/messaging-extras-contract.d.ts +14 -0
  20. package/dist/messaging-extras-contract.d.ts.map +1 -0
  21. package/dist/messaging-extras-contract.js +94 -0
  22. package/dist/messaging-extras-contract.js.map +1 -0
  23. package/dist/messaging-extras.d.ts +10 -0
  24. package/dist/messaging-extras.d.ts.map +1 -0
  25. package/dist/messaging-extras.js +42 -0
  26. package/dist/messaging-extras.js.map +1 -0
  27. package/dist/messaging-notification-providers.d.ts +20 -1
  28. package/dist/messaging-notification-providers.d.ts.map +1 -1
  29. package/dist/messaging-notification-providers.js +16 -5
  30. package/dist/messaging-notification-providers.js.map +1 -1
  31. package/dist/messaging-push-worker.d.ts.map +1 -1
  32. package/dist/messaging-push-worker.js +22 -2
  33. package/dist/messaging-push-worker.js.map +1 -1
  34. package/dist/messenger-calling.d.ts +14 -0
  35. package/dist/messenger-calling.d.ts.map +1 -0
  36. package/dist/messenger-calling.js +173 -0
  37. package/dist/messenger-calling.js.map +1 -0
  38. package/dist/messenger-check.d.ts.map +1 -1
  39. package/dist/messenger-check.js +3 -1
  40. package/dist/messenger-check.js.map +1 -1
  41. package/dist/messenger-connected-templates.d.ts.map +1 -1
  42. package/dist/messenger-connected-templates.js +5 -2
  43. package/dist/messenger-connected-templates.js.map +1 -1
  44. package/dist/messenger-connections.d.ts +31 -0
  45. package/dist/messenger-connections.d.ts.map +1 -0
  46. package/dist/messenger-connections.js +18 -0
  47. package/dist/messenger-connections.js.map +1 -0
  48. package/dist/messenger-customer-templates.d.ts.map +1 -1
  49. package/dist/messenger-customer-templates.js +2 -0
  50. package/dist/messenger-customer-templates.js.map +1 -1
  51. package/dist/messenger-init.d.ts.map +1 -1
  52. package/dist/messenger-init.js +9 -5
  53. package/dist/messenger-init.js.map +1 -1
  54. package/dist/messenger-install-cli.js +23 -6
  55. package/dist/messenger-install-cli.js.map +1 -1
  56. package/dist/messenger-install.d.ts +11 -1
  57. package/dist/messenger-install.d.ts.map +1 -1
  58. package/dist/messenger-install.js +260 -62
  59. package/dist/messenger-install.js.map +1 -1
  60. package/dist/messenger-node.d.ts +14 -0
  61. package/dist/messenger-node.d.ts.map +1 -0
  62. package/dist/messenger-node.js +127 -0
  63. package/dist/messenger-node.js.map +1 -0
  64. package/dist/messenger-upgrade.d.ts +21 -0
  65. package/dist/messenger-upgrade.d.ts.map +1 -0
  66. package/dist/messenger-upgrade.js +136 -0
  67. package/dist/messenger-upgrade.js.map +1 -0
  68. package/dist/messenger-vite-templates.d.ts +12 -0
  69. package/dist/messenger-vite-templates.d.ts.map +1 -0
  70. package/dist/messenger-vite-templates.js +89 -0
  71. package/dist/messenger-vite-templates.js.map +1 -0
  72. package/dist/messenger.d.ts +16 -0
  73. package/dist/messenger.d.ts.map +1 -1
  74. package/dist/messenger.js +28 -1
  75. package/dist/messenger.js.map +1 -1
  76. package/legacy/0.21.0/messenger-connected-templates.js +138 -0
  77. package/legacy/0.21.0/messenger-customer-templates.js +111 -0
  78. package/legacy/0.21.0/messenger-init.js +121 -0
  79. package/legacy/0.21.0/messenger-install.js +243 -0
  80. package/legacy/0.21.0/messenger-preview-template.js +43 -0
  81. package/legacy/0.21.0/package.json +1 -0
  82. package/package.json +11 -2
@@ -1,9 +1,24 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { viteMessengerFiles } from './messenger-vite-templates.js';
1
3
  import { messengerPreviewTemplates } from './messenger-preview-template.js';
2
- import { readFile, writeFile, mkdir, lstat, realpath, unlink } from 'node:fs/promises';
3
- import { resolve, join, dirname, relative } from 'node:path';
4
+ import { readFile, writeFile, mkdir, lstat, realpath, unlink, rename } from 'node:fs/promises';
5
+ import { resolve, join, dirname, relative, isAbsolute } from 'node:path';
4
6
  import spawn from 'cross-spawn';
5
7
  import { messengerStarterFiles } from './messenger-init.js';
6
- async function exists(file) { try {
8
+ export const messengerInstallerVersion = '0.23.0';
9
+ export const generatedHash = (content) => createHash('sha256').update(content).digest('hex');
10
+ export function generatedKey(file, client, server) {
11
+ const local = relative(server, file);
12
+ const scope = server !== client && !isAbsolute(local) && local !== '..' && !local.startsWith('../') && !local.startsWith('..\\') ? 'server' : 'client';
13
+ return scope + ':' + relative(scope === 'server' ? server : client, file).split('\\').join('/');
14
+ }
15
+ function recordGeneratedFiles(files, client, server) {
16
+ const metadata = files.find(file => file.path === join(client, '.robono/setup.json'));
17
+ const setup = JSON.parse(metadata.content);
18
+ setup.generated = Object.fromEntries(files.filter(file => file !== metadata && !file.path.endsWith('.before-install')).map(file => [generatedKey(file.path, client, server), generatedHash(file.content)]));
19
+ metadata.content = JSON.stringify(setup, null, 2) + '\n';
20
+ }
21
+ export async function exists(file) { try {
7
22
  await lstat(file);
8
23
  return true;
9
24
  }
@@ -22,7 +37,7 @@ async function project(directory) {
22
37
  const pkg = JSON.parse(await readFile(join(root, 'package.json'), 'utf8'));
23
38
  return { root, pkg, deps: { ...pkg.devDependencies, ...pkg.dependencies } };
24
39
  }
25
- async function safePath(file) {
40
+ export async function safePath(file) {
26
41
  let part = resolve(file);
27
42
  while (true) {
28
43
  if (await exists(part)) {
@@ -36,6 +51,19 @@ async function safePath(file) {
36
51
  part = parent;
37
52
  }
38
53
  }
54
+ export async function readMessengerSetup(file) {
55
+ await safePath(file);
56
+ const info = await lstat(file);
57
+ if (!info.isFile() || info.size > 1048576)
58
+ throw Error('Use a regular, valid Robono setup file.');
59
+ const text = await readFile(file, 'utf8');
60
+ try {
61
+ return { text, setup: JSON.parse(text) };
62
+ }
63
+ catch {
64
+ throw Error('Saved Robono setup is not valid JSON. It was not changed.');
65
+ }
66
+ }
39
67
  async function appRoot(root) {
40
68
  for (const base of ['src', ''])
41
69
  if (await exists(join(root, base, 'app'))) {
@@ -64,14 +92,19 @@ async function manager(root, pkg) {
64
92
  return result;
65
93
  }
66
94
  export async function planMessengerInstallation(options) {
67
- return createInstallationPlan(options, false);
95
+ return buildMessengerInstallation(options, 'new');
68
96
  }
69
- async function createInstallationPlan(options, resume) {
70
- if (Number(process.versions.node.split('.')[0]) < 22)
71
- throw Error('Use Node.js 22 or later for automatic installation.');
72
- const client = await project(options.project), platform = client.deps.expo ? 'expo' : client.deps.next ? 'web' : null;
97
+ export async function buildMessengerInstallation(options, mode) {
98
+ const resume = mode === 'resume';
99
+ const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(Number);
100
+ if (nodeMajor < 22 || nodeMajor === 22 && nodeMinor < 12)
101
+ throw Error('Use Node.js 22.12 or later for automatic installation.');
102
+ const client = await project(options.project);
103
+ if (client.deps.vite && client.deps.react && !client.deps.next && !client.deps.expo)
104
+ return planViteInstallation(options, client, mode);
105
+ const platform = client.deps.expo ? 'expo' : client.deps.next ? 'web' : null;
73
106
  if (!platform)
74
- throw Error('Automatic installation supports Next.js App Router and Expo. For other projects use robono-messenger-init.');
107
+ throw Error('Automatic installation supports Next.js App Router, React with Vite, and Expo. For other projects use robono-messenger-init.');
75
108
  if (platform === 'expo' && !/^[~^]?(55|56)\./.test(client.deps.expo))
76
109
  throw Error('The supplied Expo messenger supports Expo 55–56. Keep your current app unchanged and check the mobile installation guide.');
77
110
  if (platform === 'expo' && !options.serverProject)
@@ -110,12 +143,12 @@ async function createInstallationPlan(options, resume) {
110
143
  'Keep provider credentials and the Robono key on the server. The installer never reads or edits your .env files.',
111
144
  'Mount CustomerMessenger with your existing sign-in client and contacts. Account wiring is included.',
112
145
  'Connect website alerts or Apple/Google credentials in Robono → Your app → Message notifications. Chat works before alerts are configured.'];
113
- const setup = { schema: 2, platform, auth, companyName: options.companyName, origin: options.origin, serverProject: relative(client.root, server.root) || '.', dependencies: 'pending', checks: { files: 'installed', permissions: 'needs-connection', serverKey: 'needs-server-environment', contacts: 'needs-connection', notifications: 'needs-configuration', liveConnection: 'not-tested' } };
146
+ const setup = { schema: 3, installerVersion: '0.23.0', layout: platform === 'web' ? 'next' : 'expo', clientBase, serverBase, platform, auth, companyName: options.companyName, origin: options.origin, serverProject: relative(client.root, server.root) || '.', dependencies: 'pending', checks: { files: 'installed', permissions: 'needs-connection', serverKey: 'needs-server-environment', contacts: 'needs-connection', notifications: 'needs-configuration', liveConnection: 'not-tested' } };
114
147
  files.push({ path: join(client.root, '.robono/setup.json'), content: JSON.stringify(setup, null, 2) + '\n' });
115
- files.push({ path: join(client.root, '.robono/SETUP.md'), content: '# Connect your messenger\n\n' + notes.map(x => '- ' + x).join('\n') + '\n\n## Connect your screen\n' + (auth === 'custom' ? 'Implement RobonoAccounts from client/ConnectedRobonoChat.tsx using your existing sign-in. Render <CustomerMessenger accounts={yourAccounts} contacts={yourContacts}/>.' : 'Import CustomerMessenger from the generated client/CustomerMessenger.tsx. Render <CustomerMessenger auth={yourExistingSignInClient} contacts={yourContacts}/>.') + ' Give the messenger an area with a height. Keep it mounted in your signed-in application. It follows account changes; names and avatars update without restarting chat. For Supabase use its client; for Firebase use its Auth instance.\n\n## Allow the right people\nConnect authorize in robono-access.ts to current account eligibility, suspension and conversation permissions. It denies access until implemented. When a friendship changes, call synchronizeFriendship(getMessenger(), friendship) on your server. Use revisions from your database; group membership uses getMessenger().robono.setGroup. Never use an always-allow function.\n\n## Sign-out\nThe messenger account menu clears local content and unregisters notifications before provider sign-out. If your own account menu signs out first, provider events still clear the visible chat. Keep account suspension and relationship revocation synchronized with Robono; an expired session cannot reliably unregister a remote device. Never substitute another account’s token.\n\n## Check the connection\nDuring development, add setupChecks to CustomerMessenger and press Check connection after signing in to your app. It uses your current login; no copied tokens are needed. It checks settings, available chats and notification configuration without sending a message. This optional panel is hidden in production.\n\nRun robono-messenger-install --check for the local checklist. For additional command-line security checks, set ROBONO_MESSENGER_URL, ROBONO_WEBSITE_ORIGIN and ROBONO_TEST_USER_TOKEN locally. Add --json for a shareable report without secrets. No local checker can prove your complete permission rules; test denied accounts and cross-account access too.\n\n## Interrupted installation\nRun robono-messenger-install --resume from the same project. It reinstalls the required packages without replacing your integration code, screens or environment files.\n\n## Server configuration\nSet ROBONO_API_KEY privately on the server. Use ROBONO_ALLOWED_ORIGINS for your production website addresses instead of editing generated code. Never use a wildcard. Existing Next.js Supabase public settings are reused; see server.env.example.\n\n## Notifications\nFor website alerts configure your HTTPS origin and chat path. For iPhone, upload your APNs .p8 key, key ID, Team ID and Bundle ID in Robono. For Android, configure google-services.json in your app and upload the Firebase messaging service account privately in Robono. Never put private keys in client code. Build both apps after native dependency changes.\n\n## Local preview\nOpen /robono-preview on your Next.js development server. It uses the actual web messenger with fictional Alice and Bob and local text only. It sends no customer requests and returns 404 in production.\n' });
148
+ files.push({ path: join(client.root, '.robono/SETUP.md'), content: '# Connect your messenger\n\n' + notes.map(x => '- ' + x).join('\n') + '\n\n## Connect your screen\n' + (auth === 'custom' ? 'Implement RobonoAccounts from client/ConnectedRobonoChat.tsx using your existing sign-in. Render <CustomerMessenger accounts={yourAccounts} contacts={yourContacts}/>.' : 'Import CustomerMessenger from the generated client/CustomerMessenger.tsx. Render <CustomerMessenger auth={yourExistingSignInClient} contacts={yourContacts}/>.') + ' Give the messenger an area with a height. Keep it mounted in your signed-in application. It follows account changes; names and avatars update without restarting chat. For Supabase use its client; for Firebase use its Auth instance.\n\n## Allow the right people\nConnect authorize in robono-access.ts to current account eligibility, suspension and conversation permissions. It denies access until implemented. When a friendship changes, call synchronizeFriendship(getMessenger(), friendship) on your server. Use revisions from your database; group membership uses getMessenger().robono.setGroup. Never use an always-allow function.\n\n## Sign-out\nThe messenger account menu clears local content and unregisters notifications before provider sign-out. If your own account menu signs out first, provider events still clear the visible chat. Keep account suspension and relationship revocation synchronized with Robono; an expired session cannot reliably unregister a remote device. Never substitute another account’s token.\n\n## Check the connection\nDuring development, add setupChecks to CustomerMessenger and press Check connection after signing in to your app. It uses your current login; no copied tokens are needed. It checks settings, available chats and notification configuration without sending a message. This optional panel is hidden in production.\n\nRun robono-messenger-install --check for the local checklist. For additional command-line security checks, set ROBONO_MESSENGER_URL, ROBONO_WEBSITE_ORIGIN and ROBONO_TEST_USER_TOKEN locally. Add --json for a shareable report without secrets. No local checker can prove your complete permission rules; test denied accounts and cross-account access too.\n\n## Safe upgrades\nRun robono-messenger-install --upgrade --dry-run to review, then --upgrade to apply. Unchanged generated files are backed up and updated. Edited files stay untouched; review .robono/upgrade-report.json for proposed changes.\n\n## Interrupted installation\nRun robono-messenger-install --resume from the same project. It reinstalls the required packages without replacing your integration code, screens or environment files.\n\n## Server configuration\nSet ROBONO_API_KEY privately on the server. Use ROBONO_ALLOWED_ORIGINS for your production website addresses instead of editing generated code. Never use a wildcard. Existing Next.js Supabase public settings are reused; see server.env.example.\n\n## Notifications\nFor website alerts configure your HTTPS origin and chat path. For iPhone, upload your APNs .p8 key, key ID, Team ID and Bundle ID in Robono. For Android, configure google-services.json in your app and upload the Firebase messaging service account privately in Robono. Never put private keys in client code. Build both apps after native dependency changes.\n\n## Maps, weather and tracking\nThe supplied Messenger connects these through the same signed-in backend. Choose Maps placement in Robono: inside messaging, a separate Maps page, or both. Standalone Maps appears in the main menu when selected. Permissions for sharing still come from your server; never create grants in phone or browser code.\n\nFor web map display, register the exact HTTPS origin in Robono Maps. For phones, register the iPhone Bundle ID and Android package plus signing fingerprint. Download each registration to .robono/maps-ios.json and .robono/maps-android.json in the phone project, run --upgrade, and rebuild both apps. Keep these platform-restricted map keys out of public examples. Provider billing and private provider keys remain managed by Robono. Your users choose when to share location; background sharing asks for the phone permission. Browser sharing ends when the page is hidden. Movement is independent of location: iPhone movement requires the app open, Android supports its visible service, and browser movement requires a supported device and visible page. Ordinary messaging and weather do not require map registration.\n\n## Local preview\nOpen /robono-preview on your Next.js development server. It uses the actual web messenger with fictional Alice and Bob and local text only. It sends no customer requests and returns 404 in production.\n' });
116
149
  files.push({ path: join(server.root, '.robono/server.env.example'), content: templates['.env.example'] });
117
- const serverPackages = ['@robono/server@^0.21.0', ...(platform === 'expo' ? ['@robono/messaging@^0.4.1', '@robono/messaging-web@^0.6.0'] : []), ...(auth === 'supabase' ? ['@supabase/supabase-js@^2'] : auth === 'firebase' ? ['firebase-admin@^14'] : [])];
118
- const clientPackages = ['@robono/messaging@^0.4.1', `@robono/messaging-${platform === 'web' ? 'web' : 'react-native'}@^0.6.0`, ...(auth === 'supabase' ? ['@supabase/supabase-js@^2'] : auth === 'firebase' ? ['firebase@^13'] : [])];
150
+ const serverPackages = ['@robono/server@^0.23.0', ...(platform === 'expo' ? ['@robono/location@^0.2.0', '@robono/messaging@^0.5.0', '@robono/messaging-web@^0.7.0'] : []), ...(auth === 'supabase' ? ['@supabase/supabase-js@^2'] : auth === 'firebase' ? ['firebase-admin@^14'] : [])];
151
+ const clientPackages = ['@robono/location@^0.2.0', ...(platform === 'expo' ? ['@robono/location-react-native@^0.2.0', '@robono/calling@^0.4.0', '@robono/calling-react-native@^0.5.0', 'react-native-webrtc@^124.0.8', 'react-native-incall-manager@^4.3.0'] : []), '@robono/messaging@^0.5.0', `@robono/messaging-${platform === 'web' ? 'web' : 'react-native'}@^0.7.0`, ...(auth === 'supabase' ? ['@supabase/supabase-js@^2'] : auth === 'firebase' ? ['firebase@^13'] : [])];
119
152
  const packageName = (spec) => spec.slice(0, spec.lastIndexOf('@'));
120
153
  const keepExistingProvider = (spec, deps) => !['firebase', 'firebase-admin', '@supabase/supabase-js'].includes(packageName(spec)) || !deps[packageName(spec)];
121
154
  const serverInstall = serverPackages.filter(spec => keepExistingProvider(spec, server.deps)), clientInstall = clientPackages.filter(spec => keepExistingProvider(spec, client.deps));
@@ -127,7 +160,7 @@ async function createInstallationPlan(options, resume) {
127
160
  const cm = await manager(client.root, client.pkg);
128
161
  commands.push(installCommand(client.root, cm, clientInstall));
129
162
  // Expo selects versions compatible with the customer's installed SDK, not arbitrary latest peers.
130
- commands.push({ cwd: client.root, command: process.execPath, args: [join(client.root, 'node_modules/expo/bin/cli'), 'install', 'expo-audio', 'expo-image-picker', 'expo-document-picker', 'expo-file-system', 'expo-sharing', 'expo-video', 'expo-crypto', 'react-native-safe-area-context', 'react-native-svg', 'expo-clipboard', 'expo-image-manipulator', 'expo-video-thumbnails', 'react-native-webview', 'expo-blur', 'expo-notifications', 'expo-secure-store', '--' + cm] });
163
+ commands.push({ cwd: client.root, command: process.execPath, args: [join(client.root, 'node_modules/expo/bin/cli'), 'install', 'expo-audio', 'expo-image-picker', 'expo-document-picker', 'expo-file-system', 'expo-sharing', 'expo-video', 'expo-haptics', 'expo-asset', 'expo-crypto', 'react-native-safe-area-context', 'react-native-svg', 'expo-clipboard', 'expo-image-manipulator', 'expo-video-thumbnails', 'react-native-webview', 'expo-blur', 'expo-notifications', 'expo-secure-store', 'expo-location', 'expo-task-manager', 'expo-sensors', 'expo-constants', 'react-native-maps', '--' + cm] });
131
164
  if (await exists(join(client.root, 'app.config.js')) || await exists(join(client.root, 'app.config.ts')))
132
165
  throw Error('Your Expo configuration is code. Use robono-messenger-init and the mobile guide so your existing configuration is preserved.');
133
166
  const configPath = join(client.root, 'app.json');
@@ -139,40 +172,88 @@ async function createInstallationPlan(options, resume) {
139
172
  if (!Array.isArray(plugins))
140
173
  throw Error('Expected an Expo plugins array in app.json.');
141
174
  const names = plugins.map(p => Array.isArray(p) ? p[0] : p);
142
- const required = [['expo-audio', { microphonePermission: 'Allow microphone access to record voice messages.', enableBackgroundRecording: false }], ['expo-image-picker', { cameraPermission: 'Allow camera access to take photos and videos for messages.' }], 'expo-notifications', '@robono/messaging-react-native'];
175
+ const required = [['expo-sensors', { motionPermission: 'Allow this app to share device movement with the people you choose. This does not share your location.' }], ['expo-location', { locationWhenInUsePermission: 'Allow location access when you choose to share weather or your location.' }], ['expo-audio', { microphonePermission: 'Allow microphone access for voice messages and calls.', enableBackgroundRecording: false }], ['expo-image-picker', { cameraPermission: 'Allow camera access to take photos and videos for messages.' }], 'expo-notifications', '@robono/messaging-react-native', ['@robono/calling-react-native', { video: true, screenSharing: true }]];
176
+ const mapFiles = { ios: '.robono/maps-ios.json', android: '.robono/maps-android.json' };
177
+ const mapReady = await Promise.all(Object.values(mapFiles).map(async (file) => { const path = join(client.root, file); await safePath(path); return exists(path); }));
178
+ if (mapReady.every(Boolean)) {
179
+ required.push(['@robono/location-react-native', { accessFiles: mapFiles, background: true }]);
180
+ notes.push('Robono Maps registration files are connected for both phones. Background location still requires each user’s permission.');
181
+ }
182
+ else
183
+ notes.push('For phone maps, register the iPhone Bundle ID and Android package/signing fingerprint in Robono Maps. Save both downloads as .robono/maps-ios.json and .robono/maps-android.json, then rerun --upgrade and rebuild both phones. Weather and ordinary messaging do not require map registration.');
184
+ // Preserve deliberate host choices, while supplying new native defaults on upgrade.
185
+ let callingUpdated = false;
186
+ const updatedPlugins = plugins.map(plugin => {
187
+ const name = Array.isArray(plugin) ? plugin[0] : plugin;
188
+ if (name !== '@robono/calling-react-native')
189
+ return plugin;
190
+ const existing = Array.isArray(plugin) ? plugin[1] ?? {} : {};
191
+ if (!existing || typeof existing !== 'object' || Array.isArray(existing))
192
+ throw Error('Expected calling plugin options to be an object.');
193
+ if (existing.screenSharing === false)
194
+ notes.push('Screen sharing is disabled in your existing native plugin. To offer it, set screenSharing:true, configure Apple signing, and rebuild both apps.');
195
+ const merged = { video: true, screenSharing: true, ...existing };
196
+ callingUpdated = JSON.stringify(plugin) !== JSON.stringify([name, merged]);
197
+ return [name, merged];
198
+ });
143
199
  const added = required.filter(p => !names.includes(Array.isArray(p) ? p[0] : p));
144
- if (added.length) {
145
- config.expo.plugins = [...plugins, ...added];
200
+ if (added.length || callingUpdated) {
201
+ config.expo.plugins = [...updatedPlugins, ...added];
146
202
  replacements.push({ path: configPath, before, after: JSON.stringify(config, null, 2) + '\n' });
147
203
  files.push({ path: join(client.root, '.robono/app.json.before-install'), content: before });
148
204
  }
205
+ notes.push('For iPhone screen sharing, your Apple Developer team must sign the generated RobonoScreenBroadcast extension and App Group (group.<your bundle ID>.calling). Xcode/EAS can create these with your Apple account; Android uses the system screen-capture permission prompt.');
149
206
  notes.push('Added missing Expo plugins; existing permission wording is preserved. Rebuild both iPhone and Android after native dependency changes.');
150
207
  }
151
- if (!resume)
208
+ if (mode === 'new')
152
209
  for (const file of files) {
153
210
  await safePath(file.path);
154
211
  if (await exists(file.path))
155
212
  throw Error(`Already exists: ${file.path}. Nothing was changed. Use --check to see the remaining steps, or --resume to finish package installation.`);
156
213
  }
214
+ if (!resume)
215
+ recordGeneratedFiles(files, client.root, server.root);
216
+ if (platform === 'expo') {
217
+ const guide = files.find(file => file.path === join(client.root, '.robono/SETUP.md'));
218
+ if (guide)
219
+ guide.content += '\n\n## Phone build requirements\n' + notes.filter(note => /screen sharing|Expo plugins/.test(note)).map(note => '- ' + note).join('\n') + '\n';
220
+ }
157
221
  return { platform, auth, files: resume ? [] : files, replacements: resume ? [] : replacements, commands, notes: resume ? ['Resume package installation. Existing integration files, permission code, screens and environment files are preserved.'] : notes, setupFile: join(client.root, '.robono/setup.json') };
158
222
  }
159
223
  /** Reconstruct trusted package commands; never execute commands from saved metadata. */
160
224
  export async function planMessengerInstallationResume(directory) {
161
225
  const root = resolve(directory), setupFile = join(root, '.robono/setup.json');
162
226
  await safePath(setupFile);
163
- const setup = JSON.parse(await readFile(setupFile, 'utf8'));
164
- if (![1, 2].includes(setup.schema) || !['web', 'expo'].includes(setup.platform) || !['custom', 'supabase', 'firebase'].includes(setup.auth) || typeof setup.origin !== 'string' || typeof setup.serverProject !== 'string' || setup.companyName !== undefined && typeof setup.companyName !== 'string')
227
+ const { setup } = await readMessengerSetup(setupFile);
228
+ if (![1, 2, 3].includes(setup.schema) || !['web', 'expo'].includes(setup.platform) || !['custom', 'supabase', 'firebase'].includes(setup.auth) || typeof setup.origin !== 'string' || typeof setup.serverProject !== 'string' || setup.companyName !== undefined && typeof setup.companyName !== 'string')
165
229
  throw Error('Invalid saved setup. Keep your integration files and run --check.');
166
- const server = resolve(root, setup.serverProject), base = await appRoot(server);
167
- const clientBase = setup.platform === 'web' ? base : (await exists(join(root, 'src')) ? 'src' : '');
168
- for (const file of [join(root, clientBase, 'robono/client/ConnectedRobonoChat.tsx'), join(server, base, 'app/api/robono/route.ts')]) {
230
+ const server = resolve(root, setup.serverProject), base = setup.layout === 'vite' ? '' : await appRoot(server);
231
+ const clientBase = setup.layout === 'vite' ? setup.clientBase : setup.platform === 'web' ? base : (await exists(join(root, 'src')) ? 'src' : '');
232
+ for (const file of [join(root, clientBase, 'robono/client/ConnectedRobonoChat.tsx'), setup.layout === 'vite' ? join(root, '.robono/server/robono.ts') : join(server, base, 'app/api/robono/route.ts')]) {
169
233
  await safePath(file);
170
234
  if (!await exists(file))
171
235
  throw Error('An integration file is missing. Restore it before resuming; existing code was not changed.');
172
236
  }
173
- return createInstallationPlan({ project: root, ...(setup.platform === 'expo' ? { serverProject: server } : {}), origin: setup.origin, companyName: setup.companyName ?? 'Your company', auth: setup.auth }, true);
237
+ return buildMessengerInstallation({ project: root, ...(setup.platform === 'expo' ? { serverProject: server } : {}), origin: setup.origin, companyName: setup.companyName ?? 'Your company', auth: setup.auth }, 'resume');
238
+ }
239
+ async function replaceUnchanged(file) {
240
+ await safePath(file.path);
241
+ const info = await lstat(file.path);
242
+ if (!info.isFile() || info.nlink !== 1)
243
+ throw Error('Do not update a linked or non-regular file.');
244
+ const temporary = file.path + '.robono-' + randomUUID() + '.tmp';
245
+ try {
246
+ await writeFile(temporary, file.after, { flag: 'wx', mode: info.mode & 0o777 });
247
+ await safePath(file.path);
248
+ if (await readFile(file.path, 'utf8') !== file.before)
249
+ throw Error('A file changed during installation. Existing edits were preserved.');
250
+ await rename(temporary, file.path);
251
+ }
252
+ finally {
253
+ await unlink(temporary).catch(() => { });
254
+ }
174
255
  }
175
- /** Preflight all files; exclusive writes and rollback avoid overwriting customer work. */
256
+ /** Preflight, exclusive installer lock, atomic replacements and recoverable rollback. */
176
257
  export async function applyMessengerInstallation(plan, install = true) {
177
258
  for (const file of plan.files) {
178
259
  await safePath(file.path);
@@ -181,57 +262,103 @@ export async function applyMessengerInstallation(plan, install = true) {
181
262
  }
182
263
  for (const file of plan.replacements) {
183
264
  await safePath(file.path);
265
+ const stat = await lstat(file.path);
266
+ if (!stat.isFile() || stat.nlink !== 1)
267
+ throw Error('Do not update a linked or non-regular file.');
184
268
  if (await readFile(file.path, 'utf8') !== file.before)
185
269
  throw Error('Project configuration changed after planning. Run the installer again.');
186
270
  }
187
- const written = [], replaced = [];
271
+ const lock = plan.setupFile ? join(dirname(plan.setupFile), 'install.lock') : undefined;
272
+ const lockContent = JSON.stringify({ pid: process.pid, id: randomUUID() });
273
+ if (lock) {
274
+ await safePath(lock);
275
+ await mkdir(dirname(lock), { recursive: true, mode: 0o700 });
276
+ if (await exists(lock)) {
277
+ let stale = false;
278
+ try {
279
+ const saved = JSON.parse(await readFile(lock, 'utf8'));
280
+ if (Number.isInteger(saved.pid) && saved.pid > 0) {
281
+ try {
282
+ process.kill(saved.pid, 0);
283
+ }
284
+ catch (error) {
285
+ stale = error.code === 'ESRCH';
286
+ }
287
+ }
288
+ }
289
+ catch { }
290
+ if (!stale)
291
+ throw Error('Another installer may be running. Finish it before applying this plan.');
292
+ await unlink(lock);
293
+ }
294
+ await writeFile(lock, lockContent, { flag: 'wx', mode: 0o600 });
295
+ }
188
296
  try {
189
- for (const file of plan.files) {
190
- await mkdir(dirname(file.path), { recursive: true });
191
- await writeFile(file.path, file.content, { flag: 'wx', mode: 0o600 });
192
- written.push(file.path);
297
+ const written = [], replaced = [];
298
+ try {
299
+ for (const file of plan.files) {
300
+ await safePath(file.path);
301
+ await mkdir(dirname(file.path), { recursive: true, mode: 0o700 });
302
+ await writeFile(file.path, file.content, { flag: 'wx', mode: 0o600 });
303
+ written.push(file);
304
+ }
305
+ for (const file of plan.replacements) {
306
+ await replaceUnchanged(file);
307
+ replaced.push(file);
308
+ }
309
+ }
310
+ catch (error) {
311
+ let recoverable = true;
312
+ for (const file of [...replaced].reverse()) {
313
+ try {
314
+ await replaceUnchanged({ path: file.path, before: file.after, after: file.before });
315
+ }
316
+ catch {
317
+ recoverable = false;
318
+ }
319
+ }
320
+ for (const file of written)
321
+ if (await readFile(file.path, 'utf8').catch(() => null) !== file.content)
322
+ recoverable = false;
323
+ if (recoverable)
324
+ for (const file of written)
325
+ await unlink(file.path);
326
+ if (!recoverable)
327
+ throw Error('Installation stopped because files changed during recovery. Your edits and available backups were preserved; review the upgrade report before retrying.');
328
+ throw error;
193
329
  }
194
- for (const file of plan.replacements) {
195
- if (await readFile(file.path, 'utf8') !== file.before)
196
- throw Error('Project configuration changed during installation. Existing configuration was preserved.');
197
- await writeFile(file.path, file.after);
198
- replaced.push(file);
330
+ if (install)
331
+ for (const command of plan.commands)
332
+ await new Promise((done, fail) => {
333
+ const child = spawn(command.command, command.args, { cwd: command.cwd, stdio: 'inherit', shell: false, env: { ...process.env, npm_config_ignore_scripts: 'true', YARN_ENABLE_SCRIPTS: 'false' } });
334
+ child.on('error', () => fail(Error('Package installation could not start. Files are saved; fix the package-manager error and run robono-messenger-install --resume.')));
335
+ child.on('exit', code => code === 0 ? done() : fail(Error('Package installation did not finish. Files are saved; fix the package-manager error and run robono-messenger-install --resume.')));
336
+ });
337
+ if (install && plan.setupFile) {
338
+ const before = await readFile(plan.setupFile, 'utf8'), setup = JSON.parse(before);
339
+ setup.dependencies = 'installed';
340
+ await replaceUnchanged({ path: plan.setupFile, before, after: JSON.stringify(setup, null, 2) + '\n' });
199
341
  }
200
342
  }
201
- catch (e) {
202
- for (const file of replaced)
203
- await writeFile(file.path, file.before);
204
- for (const file of written)
205
- await unlink(file);
206
- throw e;
207
- }
208
- if (install)
209
- for (const command of plan.commands)
210
- await new Promise((resolve, reject) => {
211
- const child = spawn(command.command, command.args, { cwd: command.cwd, stdio: 'inherit', shell: false, env: { ...process.env, npm_config_ignore_scripts: 'true', YARN_ENABLE_SCRIPTS: 'false' } });
212
- child.on('error', () => reject(Error('Package installation could not start. Files are saved; fix the package-manager error and run robono-messenger-install --resume.')));
213
- child.on('exit', code => code === 0 ? resolve() : reject(Error('Package installation did not finish. Files are saved; fix the package-manager error and run robono-messenger-install --resume.')));
214
- });
215
- if (install && plan.setupFile) {
216
- await safePath(plan.setupFile);
217
- const setup = JSON.parse(await readFile(plan.setupFile, 'utf8'));
218
- setup.dependencies = 'installed';
219
- await writeFile(plan.setupFile, JSON.stringify(setup, null, 2) + '\n');
343
+ finally {
344
+ if (lock && await readFile(lock, 'utf8').catch(() => null) === lockContent)
345
+ await unlink(lock);
220
346
  }
221
347
  }
222
348
  export async function messengerInstallationChecklist(directory) {
223
349
  const root = resolve(directory), file = join(root, '.robono/setup.json');
224
350
  if (!await exists(file))
225
- return [{ name: 'Install files', status: 'needs-action', detail: 'Run robono-messenger-install in your Next.js or Expo project.' }];
226
- const setup = JSON.parse(await readFile(file, 'utf8'));
227
- const server = resolve(root, setup.serverProject), base = await appRoot(server);
228
- const permissionFile = join(server, base, 'robono/server/robono-access.ts');
351
+ return [{ name: 'Install files', status: 'needs-action', detail: 'Run robono-messenger-install in your Next.js, React/Vite or Expo project.' }];
352
+ const { setup } = await readMessengerSetup(file);
353
+ const server = resolve(root, setup.serverProject), base = setup.layout === 'vite' ? '' : await appRoot(server);
354
+ const permissionFile = setup.layout === 'vite' ? join(root, '.robono/server/robono-access.ts') : join(server, base, 'robono/server/robono-access.ts');
229
355
  const permission = await readFile(permissionFile, 'utf8').catch(() => 'Connect your existing messaging permission');
230
356
  const missingPermission = permission.includes('Connect your existing messaging permission');
231
- const clientBase = setup.platform === 'web' ? base : (await exists(join(root, 'src')) ? 'src' : '');
232
- const complete = await exists(join(root, clientBase, 'robono/client/ConnectedRobonoChat.tsx')) && await exists(join(server, base, 'app/api/robono/route.ts'));
357
+ const clientBase = setup.layout === 'vite' ? setup.clientBase : setup.platform === 'web' ? base : (await exists(join(root, 'src')) ? 'src' : '');
358
+ const complete = await exists(join(root, clientBase, 'robono/client/ConnectedRobonoChat.tsx')) && await exists(setup.layout === 'vite' ? join(root, '.robono/server/robono.ts') : join(server, base, 'app/api/robono/route.ts'));
233
359
  return [
234
- { name: 'Prepared files', status: complete ? 'passed' : 'failed', detail: `${setup.platform === 'expo' ? 'Expo' : 'Next.js'}; ${setup.auth} sign-in.` },
360
+ { name: 'Prepared files', status: complete ? 'passed' : 'failed', detail: `${setup.platform === 'expo' ? 'Expo' : setup.layout === 'vite' ? 'React + Vite' : 'Next.js'}; ${setup.auth} sign-in.` },
361
+ ...(Array.isArray(setup.pendingReview) && setup.pendingReview.length ? [{ name: 'Upgrade review', status: 'needs-action', detail: 'Your edited files were preserved. Review .robono/upgrade-report.json and its proposed changes, then rerun --upgrade.' }] : []),
235
362
  { name: 'Package installation', status: setup.dependencies === 'installed' ? 'configured' : 'needs-action', detail: setup.dependencies === 'installed' ? 'The package manager completed. Use the in-app connection check next.' : 'Run robono-messenger-install --resume to finish installing packages without replacing your integration files.' },
236
363
  { name: 'Account permissions', status: missingPermission ? 'needs-action' : 'configured', detail: missingPermission ? 'Connect robono-access.ts to your current permission rules. The live checker verifies a test account.' : 'Permission code was edited. Verify allowed and denied accounts; file inspection cannot prove your rules.' },
237
364
  { name: 'Server key', status: 'needs-action', detail: 'Set ROBONO_API_KEY on the server. This command does not read or print secrets.' },
@@ -240,4 +367,75 @@ export async function messengerInstallationChecklist(directory) {
240
367
  { name: 'Live connection', status: 'needs-action', detail: 'Set ROBONO_MESSENGER_URL, ROBONO_WEBSITE_ORIGIN and ROBONO_TEST_USER_TOKEN locally, then run robono-messenger-check.' },
241
368
  ];
242
369
  }
370
+ async function planViteInstallation(options, client, mode) {
371
+ if (options.serverProject)
372
+ throw Error('React/Vite includes its own Node server connection. Omit --server-project; existing servers can use the supplied @robono/server/node handler.');
373
+ if (!client.deps['react-dom'])
374
+ throw Error('React/Vite installation needs react-dom in the website project.');
375
+ if (!options.auth && client.deps.firebase && client.deps['@supabase/supabase-js'])
376
+ throw Error('Both sign-in providers are installed. Choose --auth supabase, firebase or custom.');
377
+ const auth = options.auth ?? (client.deps['@supabase/supabase-js'] ? 'supabase' : client.deps.firebase ? 'firebase' : 'custom');
378
+ const provider = auth === 'supabase' ? '@supabase/supabase-js' : auth === 'firebase' ? 'firebase' : null;
379
+ if (provider && client.deps[provider]) {
380
+ const version = await readFile(join(client.root, 'node_modules', provider, 'package.json'), 'utf8').then(value => JSON.parse(value).version).catch(() => client.deps[provider]);
381
+ const major = Number(version.match(/^[~^]?(\d+)/)?.[1]);
382
+ if (!major || major < (auth === 'supabase' ? 2 : 9))
383
+ throw Error('Keep your existing sign-in unchanged and use --auth custom, or update the provider package separately.');
384
+ }
385
+ const viteVersion = await readFile(join(client.root, 'node_modules/vite/package.json'), 'utf8').then(value => JSON.parse(value).version).catch(() => client.deps.vite);
386
+ const parts = viteVersion.match(/^[~^]?(\d+)\.(\d+)\.(\d+)/)?.slice(1).map(Number);
387
+ const minimum = { 6: '6.4.5', 7: '7.3.7', 8: '8.3.5' };
388
+ if (!parts || !minimum[parts[0]])
389
+ throw Error('Automatic React setup supports Vite 6–8. Keep this project unchanged and use the generated-file connection for other versions.');
390
+ const patched = minimum[parts[0]], target = patched.split('.').map(Number);
391
+ const updateVite = parts[1] < target[1] || parts[1] === target[1] && parts[2] < target[2];
392
+ const clientBase = await exists(join(client.root, 'src')) ? 'src' : '';
393
+ const templates = messengerStarterFiles({ ...options, platform: 'web', framework: 'fetch', auth });
394
+ const files = [];
395
+ for (const [name, content] of Object.entries(templates)) {
396
+ if (name.startsWith('client/')) {
397
+ const vite = content.replaceAll("process.env.NODE_ENV==='development'", 'import.meta.env.DEV').replaceAll("process.env.NODE_ENV!=='development'", '!import.meta.env.DEV').replaceAll('import React,{', 'import {').replace(auth === 'custom' ? 'useMemo,type ComponentProps' : '__NO_CHANGE__', 'type ComponentProps');
398
+ files.push({ path: join(client.root, clientBase, 'robono', name), content: vite });
399
+ }
400
+ else if (name.startsWith('server/'))
401
+ files.push({ path: join(client.root, '.robono', name), content: content.replaceAll("'./robono-access'", "'./robono-access.js'").replaceAll('"./robono"', '"./robono.js"').replace('process.env.NEXT_PUBLIC_SUPABASE_URL', 'process.env.NEXT_PUBLIC_SUPABASE_URL??process.env.VITE_SUPABASE_URL').replace('process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY', 'process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY??process.env.VITE_SUPABASE_PUBLISHABLE_KEY??process.env.VITE_SUPABASE_ANON_KEY') });
402
+ }
403
+ const preview = messengerPreviewTemplates().client.replaceAll("process.env.NODE_ENV!=='development'", '!import.meta.env.DEV').replace('import React,{', 'import {');
404
+ files.push({ path: join(client.root, clientBase, 'robono/client/RobonoPreview.tsx'), content: preview });
405
+ for (const [name, content] of Object.entries(viteMessengerFiles({ ...options, platform: 'web', framework: 'fetch', auth }, clientBase)))
406
+ files.push({ path: join(client.root, name), content });
407
+ const notes = [`Detected React + Vite and ${auth} sign-in. Your app entry points and Vite configuration are preserved.`,
408
+ 'Start both your existing website and the messaging route with npm --prefix .robono run dev. Open /robono-preview for the local two-person example.',
409
+ 'Connect current account permissions in .robono/server/robono-access.ts. Missing permission code denies access.',
410
+ 'Keep ROBONO_API_KEY and provider credentials in the server environment or your private root .env.local. Never prefix private keys with VITE_.',
411
+ 'Mount CustomerMessenger with your existing sign-in client and contacts. Add setupChecks during development to check your signed-in connection.',
412
+ 'Build: npm --prefix .robono run build. Production: npm --prefix .robono start. Deploy the project on a Node host with HTTPS; a static-only host cannot run the private server.',
413
+ 'Set ROBONO_PUBLIC_ORIGIN and ROBONO_ALLOWED_ORIGINS to the real website address in production. Existing hosts may mount createMessengerNodeHandler before body parsers.'];
414
+ const setup = { schema: 3, installerVersion: messengerInstallerVersion, layout: 'vite', platform: 'web', auth, companyName: options.companyName, origin: options.origin, serverProject: '.', clientBase, serverBase: '.robono', dependencies: 'pending' };
415
+ files.push({ path: join(client.root, '.robono/setup.json'), content: JSON.stringify(setup, null, 2) + '\n' });
416
+ files.push({ path: join(client.root, '.robono/server.env.example'), content: templates['.env.example'] + 'ROBONO_PUBLIC_ORIGIN=' + options.origin + '\n' });
417
+ files.push({ path: join(client.root, '.robono/SETUP.md'), content: '# Connect your React website\n\n' + notes.map(note => '- ' + note).join('\n') + '\n\n## Connect accounts and conversations\n' + (auth === 'custom' ? 'Implement authenticate and authorize in .robono/server/robono-access.ts and the RobonoAccounts interface using your existing sign-in. Pass accounts to CustomerMessenger.' : 'Identity checks are supplied. Pass your existing sign-in client as auth to CustomerMessenger. Connect authorize in .robono/server/robono-access.ts to your current eligibility, suspension and conversation rules.') + ' Synchronize permitted friendships and group membership from your server using synchronizeFriendship and getMessenger().robono.setGroup. Give the component your contact names and avatars. Provider credentials and the Robono key remain server-only. Browser notifications are configured in Your app → Message notifications. No Apple/Google private key is required for browser alerts.\n' + '\n\n## Safe upgrades\nRun robono-messenger-install --upgrade. Unchanged generated files update automatically. Edited files are preserved and proposed updates are listed in .robono/upgrade-report.json. Review proposed changes before applying them. --resume finishes interrupted dependency installation; it does not overwrite your code.\n' });
418
+ const managerName = await manager(client.root, client.pkg);
419
+ const runtime = ['@robono/location@^0.2.0', '@robono/server@^0.23.0', '@robono/messaging@^0.5.0', '@robono/messaging-web@^0.7.0', ...(auth === 'supabase' && !client.deps['@supabase/supabase-js'] ? ['@supabase/supabase-js@^2'] : []), ...(auth === 'firebase' ? [...(!client.deps.firebase ? ['firebase@^13'] : []), ...(!client.deps['firebase-admin'] ? ['firebase-admin@^14'] : [])] : [])];
420
+ const dev = ['tsx@^4.23.15', 'typescript@^6', '@types/node@^22'].filter(spec => !client.deps[spec.slice(0, spec.lastIndexOf('@'))]);
421
+ if (updateVite) {
422
+ (client.pkg.dependencies?.vite ? runtime : dev).push('vite@^' + patched);
423
+ notes.push('Includes the current Vite fixes within your existing major version. Your Vite configuration is preserved.');
424
+ }
425
+ const commands = [installCommand(client.root, managerName, runtime)];
426
+ if (dev.length) {
427
+ const command = installCommand(client.root, managerName, dev);
428
+ command.args.splice(2, 0, '-D');
429
+ commands.push(command);
430
+ }
431
+ if (mode === 'new')
432
+ for (const file of files) {
433
+ await safePath(file.path);
434
+ if (await exists(file.path))
435
+ throw Error(`Already exists: ${file.path}. Nothing was changed. Use --upgrade or --resume for an existing installation.`);
436
+ }
437
+ if (mode !== 'resume')
438
+ recordGeneratedFiles(files, client.root, client.root);
439
+ return { platform: 'web', auth, files: mode === 'resume' ? [] : files, replacements: [], commands, notes, setupFile: join(client.root, '.robono/setup.json') };
440
+ }
243
441
  //# sourceMappingURL=messenger-install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"messenger-install.js","sourceRoot":"","sources":["../src/messenger-install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messenger-install.js","sourceRoot":"","sources":["../src/messenger-install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type IncomingMessage, type ServerResponse } from 'node:http';
2
+ import type { RobonoMessengerServer } from './messenger.js';
3
+ /** Node/Express-compatible handler. Mount before body parsers; private keys stay in getMessenger. */
4
+ export declare function createMessengerNodeHandler(options: {
5
+ getMessenger: () => RobonoMessengerServer;
6
+ origin: string;
7
+ }): (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;
8
+ /** Serve only a built Vite frontend, never the application/source directory. */
9
+ export declare function createMessengerWebsiteServer(options: {
10
+ getMessenger: () => RobonoMessengerServer;
11
+ origin: string;
12
+ staticDirectory: string;
13
+ }): Promise<import("http").Server<typeof IncomingMessage, typeof ServerResponse>>;
14
+ //# sourceMappingURL=messenger-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messenger-node.d.ts","sourceRoot":"","sources":["../src/messenger-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,eAAe,EAAC,KAAK,cAAc,EAAC,MAAM,WAAW,CAAC;AAGhF,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AAO1D,qGAAqG;AACrG,wBAAgB,0BAA0B,CAAC,OAAO,EAAC;IAAC,YAAY,EAAC,MAAI,qBAAqB,CAAC;IAAA,MAAM,EAAC,MAAM,CAAA;CAAC,IAG1F,KAAI,eAAe,EAAC,KAAI,cAAc,KAAE,OAAO,CAAC,OAAO,CAAC,CA6BtE;AAGD,gFAAgF;AAChF,wBAAsB,4BAA4B,CAAC,OAAO,EAAC;IAAC,YAAY,EAAC,MAAI,qBAAqB,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,eAAe,EAAC,MAAM,CAAA;CAAC,iFAyBvI"}