@robono/server 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +6 -2
- package/SBOM.spdx.json +176 -8
- package/dist/messenger-connected-templates.d.ts.map +1 -1
- package/dist/messenger-connected-templates.js +6 -3
- package/dist/messenger-connected-templates.js.map +1 -1
- package/dist/messenger-customer-templates.d.ts +4 -0
- package/dist/messenger-customer-templates.d.ts.map +1 -0
- package/dist/messenger-customer-templates.js +111 -0
- package/dist/messenger-customer-templates.js.map +1 -0
- package/dist/messenger-init.d.ts.map +1 -1
- package/dist/messenger-init.js +3 -2
- package/dist/messenger-init.js.map +1 -1
- package/dist/messenger-install-cli.js +9 -6
- package/dist/messenger-install-cli.js.map +1 -1
- package/dist/messenger-install.d.ts +3 -0
- package/dist/messenger-install.d.ts.map +1 -1
- package/dist/messenger-install.js +39 -12
- package/dist/messenger-install.js.map +1 -1
- package/package.json +5 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## 0.20.1 — 2026-11-04
|
|
2
|
+
|
|
3
|
+
## 0.21.0
|
|
4
|
+
|
|
5
|
+
- Generated CustomerMessenger accepts an existing Supabase/Firebase sign-in client directly, with a custom-account option.
|
|
6
|
+
- Optional development connection checks use the signed-in account without copying a token. Checks are read-only, clear on account changes and are hidden in production.
|
|
7
|
+
- Resume interrupted package installation without replacing customer integration or permission code.
|
|
8
|
+
- Reuse existing Next.js Supabase public settings and configure allowed website origins through the server environment.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
Use cross-spawn for package-manager commands so Windows npm/pnpm/Yarn command files can run correctly while preserving argument boundaries. No server API or generated-file changes.
|
|
12
|
+
|
|
1
13
|
## 0.20.0 — release candidate
|
|
2
14
|
|
|
3
15
|
Add robono-messenger-install for existing Next.js App Router and Expo 55–56 projects, safe project/package-manager detection, optional Supabase/Firebase account verification, generated account lifecycle handling, a development-only two-person preview, and a combined setup checklist. Keep customer permissions fail-closed, credentials server-only, and existing files protected. The original generated-file command remains available for other frameworks. Provider clients initialize at request time so builds do not need production secrets.
|
package/README.md
CHANGED
|
@@ -425,7 +425,7 @@ For Expo 55–56, run from the phone project and add `--server-project ../your-n
|
|
|
425
425
|
|
|
426
426
|
The installer preserves existing provider package versions. Package installation scripts are disabled; run any required dependency-specific build steps yourself. Expo uses its installed SDK's version selection for native peers. Rebuild both mobile apps after native changes.
|
|
427
427
|
|
|
428
|
-
Open `.robono/SETUP.md`. Provider sign-in verification is supplied; connect your own current messaging eligibility, suspension and conversation permission checks in `robono-access.ts`. They intentionally deny access until connected. Synchronize relationships and groups from your server. Import the generated `
|
|
428
|
+
Open `.robono/SETUP.md`. Provider sign-in verification is supplied; connect your own current messaging eligibility, suspension and conversation permission checks in `robono-access.ts`. They intentionally deny access until connected. Synchronize relationships and groups from your server. Import the generated `CustomerMessenger` and render `<CustomerMessenger auth={yourExistingSignInClient} contacts={yourContacts}/>` for Supabase or Firebase. Account subscription and cleanup are included. For custom sign-in pass `accounts={yourAccounts}` using the generated `RobonoAccounts` interface. Keep the connected screen mounted in your signed-in application. The messenger account menu unregisters notifications before ending provider sign-in; provider events also clear local chat on account changes. If a session is already invalid, remote device removal may fail, so account revocation must also be synchronized server-side.
|
|
429
429
|
|
|
430
430
|
The development-only `/robono-preview` page shows the actual website messenger for fictional Alice and Bob. Text stays in page memory, disappears on reload, and never reaches Robono. It demonstrates text only and returns 404 outside development. It is not evidence that your live connection or permissions work.
|
|
431
431
|
|
|
@@ -436,7 +436,11 @@ npx --package @robono/server robono-messenger-install --check
|
|
|
436
436
|
npx --package @robono/server robono-messenger-install --check --json
|
|
437
437
|
```
|
|
438
438
|
|
|
439
|
-
|
|
439
|
+
During development, add `setupChecks` to `CustomerMessenger` and press **Check connection** after signing in. It uses the current login without copied tokens, performs read-only settings/conversation/notification checks, and displays fixed guidance without response contents. It cancels and clears on account changes and is hidden in production. The command-line checker remains available for additional security checks.
|
|
440
|
+
|
|
441
|
+
If installation was interrupted, run `robono-messenger-install --resume` from the same project. Required package commands are reconstructed from the installed tool, not executed from saved metadata. Existing integration source, permissions, screens and environment files are preserved. Set `ROBONO_ALLOWED_ORIGINS` on the server for production addresses without editing generated source. Existing Next.js Supabase public configuration is reused when available.
|
|
442
|
+
|
|
443
|
+
The checklist distinguishes files, package installation, configured permission code, required credentials, contacts and live connection results. It does not infer security from edited source or claim all customer permission rules were tested. Reports exclude tokens and message content.
|
|
440
444
|
|
|
441
445
|
Supabase uses the official client's `auth.getUser(token)` on the server. Firebase uses the official Admin client's `verifyIdToken(token, true)`, including revocation/disabled-account checks. Exported `supabaseMessengerAuthentication` and `firebaseMessengerAuthentication` accept your configured provider clients; no provider secrets belong in client code. Continue checking app-specific suspension and memberships in `authorize`.
|
|
442
446
|
|
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.
|
|
6
|
-
"documentNamespace": "http://spdx.org/spdxdocs/@robono%2fserver-0.
|
|
5
|
+
"name": "@robono/server@0.21.0",
|
|
6
|
+
"documentNamespace": "http://spdx.org/spdxdocs/@robono%2fserver-0.21.0-***",
|
|
7
7
|
"creationInfo": {
|
|
8
|
-
"created": "2026-11-
|
|
8
|
+
"created": "2026-11-04T06:35:24.267Z",
|
|
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
|
+
"SPDXRef-Package-robono.server-0.21.0"
|
|
15
15
|
],
|
|
16
16
|
"packages": [
|
|
17
17
|
{
|
|
18
18
|
"name": "@robono/server",
|
|
19
|
-
"SPDXID": "SPDXRef-Package-robono.server-0.
|
|
20
|
-
"versionInfo": "0.
|
|
19
|
+
"SPDXID": "SPDXRef-Package-robono.server-0.21.0",
|
|
20
|
+
"versionInfo": "0.21.0",
|
|
21
21
|
"packageFileName": "",
|
|
22
22
|
"description": "Provider-neutral server SDK for the Robono Bridge API.",
|
|
23
23
|
"primaryPackagePurpose": "LIBRARY",
|
|
@@ -29,7 +29,145 @@
|
|
|
29
29
|
{
|
|
30
30
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
31
31
|
"referenceType": "purl",
|
|
32
|
-
"referenceLocator": "pkg:npm/%40robono/server@0.
|
|
32
|
+
"referenceLocator": "pkg:npm/%40robono/server@0.21.0"
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "cross-spawn",
|
|
38
|
+
"SPDXID": "SPDXRef-Package-cross-spawn-7.0.6",
|
|
39
|
+
"versionInfo": "7.0.6",
|
|
40
|
+
"packageFileName": "node_modules/cross-spawn",
|
|
41
|
+
"downloadLocation": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
|
42
|
+
"filesAnalyzed": false,
|
|
43
|
+
"homepage": "NOASSERTION",
|
|
44
|
+
"licenseDeclared": "MIT",
|
|
45
|
+
"externalRefs": [
|
|
46
|
+
{
|
|
47
|
+
"referenceCategory": "PACKAGE-MANAGER",
|
|
48
|
+
"referenceType": "purl",
|
|
49
|
+
"referenceLocator": "pkg:npm/cross-spawn@7.0.6"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
"checksums": [
|
|
53
|
+
{
|
|
54
|
+
"algorithm": "SHA512",
|
|
55
|
+
"checksumValue": "b95d903963f69d6ceccb668ca7c69189b862f5d9731791e0879487681f4e893184c834e2249cb1d2ecb9d505ddc966ed00736e6b85c9cd429c6b73b3294777bc"
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "isexe",
|
|
61
|
+
"SPDXID": "SPDXRef-Package-isexe-2.0.0",
|
|
62
|
+
"versionInfo": "2.0.0",
|
|
63
|
+
"packageFileName": "node_modules/isexe",
|
|
64
|
+
"downloadLocation": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
|
65
|
+
"filesAnalyzed": false,
|
|
66
|
+
"homepage": "NOASSERTION",
|
|
67
|
+
"licenseDeclared": "ISC",
|
|
68
|
+
"externalRefs": [
|
|
69
|
+
{
|
|
70
|
+
"referenceCategory": "PACKAGE-MANAGER",
|
|
71
|
+
"referenceType": "purl",
|
|
72
|
+
"referenceLocator": "pkg:npm/isexe@2.0.0"
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
"checksums": [
|
|
76
|
+
{
|
|
77
|
+
"algorithm": "SHA512",
|
|
78
|
+
"checksumValue": "447c4c2e9f659ca1c61d19e0f5016144231b600715a67ebdb2648672addfdfac638155564e18f8aaa2db4cb96aed2b23f01f9f210d44b8210623694ab3241e23"
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"name": "path-key",
|
|
84
|
+
"SPDXID": "SPDXRef-Package-path-key-3.1.1",
|
|
85
|
+
"versionInfo": "3.1.1",
|
|
86
|
+
"packageFileName": "node_modules/path-key",
|
|
87
|
+
"downloadLocation": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
|
88
|
+
"filesAnalyzed": false,
|
|
89
|
+
"homepage": "NOASSERTION",
|
|
90
|
+
"licenseDeclared": "MIT",
|
|
91
|
+
"externalRefs": [
|
|
92
|
+
{
|
|
93
|
+
"referenceCategory": "PACKAGE-MANAGER",
|
|
94
|
+
"referenceType": "purl",
|
|
95
|
+
"referenceLocator": "pkg:npm/path-key@3.1.1"
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
"checksums": [
|
|
99
|
+
{
|
|
100
|
+
"algorithm": "SHA512",
|
|
101
|
+
"checksumValue": "a2399e374a9dfb2d23b3312da18e3caf43deab97703049089423aee90e5fe3595f92cc17b8ab58ae18284e92e7c887079b6e1486ac7ee53aa6d889d2c0b844e9"
|
|
102
|
+
}
|
|
103
|
+
]
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"name": "shebang-command",
|
|
107
|
+
"SPDXID": "SPDXRef-Package-shebang-command-2.0.0",
|
|
108
|
+
"versionInfo": "2.0.0",
|
|
109
|
+
"packageFileName": "node_modules/shebang-command",
|
|
110
|
+
"downloadLocation": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
|
111
|
+
"filesAnalyzed": false,
|
|
112
|
+
"homepage": "NOASSERTION",
|
|
113
|
+
"licenseDeclared": "MIT",
|
|
114
|
+
"externalRefs": [
|
|
115
|
+
{
|
|
116
|
+
"referenceCategory": "PACKAGE-MANAGER",
|
|
117
|
+
"referenceType": "purl",
|
|
118
|
+
"referenceLocator": "pkg:npm/shebang-command@2.0.0"
|
|
119
|
+
}
|
|
120
|
+
],
|
|
121
|
+
"checksums": [
|
|
122
|
+
{
|
|
123
|
+
"algorithm": "SHA512",
|
|
124
|
+
"checksumValue": "907c6bdb366962d766acdd6a0e3aeb5ff675ad1d641bc0f1fa09292b51b87979af5ecc26704d614d6056614ce5ada630d7fc99a7a62e0d8efb62dbdb3747660c"
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"name": "shebang-regex",
|
|
130
|
+
"SPDXID": "SPDXRef-Package-shebang-regex-3.0.0",
|
|
131
|
+
"versionInfo": "3.0.0",
|
|
132
|
+
"packageFileName": "node_modules/shebang-regex",
|
|
133
|
+
"downloadLocation": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
|
134
|
+
"filesAnalyzed": false,
|
|
135
|
+
"homepage": "NOASSERTION",
|
|
136
|
+
"licenseDeclared": "MIT",
|
|
137
|
+
"externalRefs": [
|
|
138
|
+
{
|
|
139
|
+
"referenceCategory": "PACKAGE-MANAGER",
|
|
140
|
+
"referenceType": "purl",
|
|
141
|
+
"referenceLocator": "pkg:npm/shebang-regex@3.0.0"
|
|
142
|
+
}
|
|
143
|
+
],
|
|
144
|
+
"checksums": [
|
|
145
|
+
{
|
|
146
|
+
"algorithm": "SHA512",
|
|
147
|
+
"checksumValue": "efef9d161b5cc77df9dee05aabc0c347836ec417ad0730bb6503a19934089c711de9b4ab5dd884cb30af1b4ed9e3851874b4a1594c97b7933fca1cfc7a471bd4"
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"name": "which",
|
|
153
|
+
"SPDXID": "SPDXRef-Package-which-2.0.2",
|
|
154
|
+
"versionInfo": "2.0.2",
|
|
155
|
+
"packageFileName": "node_modules/which",
|
|
156
|
+
"downloadLocation": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
|
157
|
+
"filesAnalyzed": false,
|
|
158
|
+
"homepage": "NOASSERTION",
|
|
159
|
+
"licenseDeclared": "ISC",
|
|
160
|
+
"externalRefs": [
|
|
161
|
+
{
|
|
162
|
+
"referenceCategory": "PACKAGE-MANAGER",
|
|
163
|
+
"referenceType": "purl",
|
|
164
|
+
"referenceLocator": "pkg:npm/which@2.0.2"
|
|
165
|
+
}
|
|
166
|
+
],
|
|
167
|
+
"checksums": [
|
|
168
|
+
{
|
|
169
|
+
"algorithm": "SHA512",
|
|
170
|
+
"checksumValue": "04b2374e5d535b73ef97bd25df2ab763ae22f9ac29c17aac181616924a8cb676d782b303fb28fbae15b492e103c7325a6171a3116e6881aa4a34c10a34c8e26c"
|
|
33
171
|
}
|
|
34
172
|
]
|
|
35
173
|
}
|
|
@@ -37,8 +175,38 @@
|
|
|
37
175
|
"relationships": [
|
|
38
176
|
{
|
|
39
177
|
"spdxElementId": "SPDXRef-DOCUMENT",
|
|
40
|
-
"relatedSpdxElement": "SPDXRef-Package-robono.server-0.
|
|
178
|
+
"relatedSpdxElement": "SPDXRef-Package-robono.server-0.21.0",
|
|
41
179
|
"relationshipType": "DESCRIBES"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"spdxElementId": "SPDXRef-Package-cross-spawn-7.0.6",
|
|
183
|
+
"relatedSpdxElement": "SPDXRef-Package-robono.server-0.21.0",
|
|
184
|
+
"relationshipType": "DEPENDENCY_OF"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"spdxElementId": "SPDXRef-Package-path-key-3.1.1",
|
|
188
|
+
"relatedSpdxElement": "SPDXRef-Package-cross-spawn-7.0.6",
|
|
189
|
+
"relationshipType": "DEPENDENCY_OF"
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"spdxElementId": "SPDXRef-Package-shebang-command-2.0.0",
|
|
193
|
+
"relatedSpdxElement": "SPDXRef-Package-cross-spawn-7.0.6",
|
|
194
|
+
"relationshipType": "DEPENDENCY_OF"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"spdxElementId": "SPDXRef-Package-which-2.0.2",
|
|
198
|
+
"relatedSpdxElement": "SPDXRef-Package-cross-spawn-7.0.6",
|
|
199
|
+
"relationshipType": "DEPENDENCY_OF"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"spdxElementId": "SPDXRef-Package-shebang-regex-3.0.0",
|
|
203
|
+
"relatedSpdxElement": "SPDXRef-Package-shebang-command-2.0.0",
|
|
204
|
+
"relationshipType": "DEPENDENCY_OF"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"spdxElementId": "SPDXRef-Package-isexe-2.0.0",
|
|
208
|
+
"relatedSpdxElement": "SPDXRef-Package-which-2.0.2",
|
|
209
|
+
"relationshipType": "DEPENDENCY_OF"
|
|
42
210
|
}
|
|
43
211
|
]
|
|
44
212
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messenger-connected-templates.d.ts","sourceRoot":"","sources":["../src/messenger-connected-templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"messenger-connected-templates.d.ts","sourceRoot":"","sources":["../src/messenger-connected-templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,qBAAqB,CAAC;AAEjE,MAAM,MAAM,qBAAqB,GAAC,QAAQ,GAAC,UAAU,GAAC,UAAU,CAAC;AACjE,wBAAgB,uBAAuB,CAAC,KAAK,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,EAAC,OAAO,EAAC,uBAAuB,0BAoIlG"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { customerMessengerTemplates } from './messenger-customer-templates.js';
|
|
1
2
|
export function connectStarterTemplates(files, options) {
|
|
2
3
|
const provider = options.auth ?? 'custom', web = options.platform === 'web', q = JSON.stringify;
|
|
3
4
|
if (!['custom', 'supabase', 'firebase'].includes(provider))
|
|
@@ -8,7 +9,8 @@ import {supabaseMessengerAuthentication} from '@robono/server';
|
|
|
8
9
|
let verify:ReturnType<typeof supabaseMessengerAuthentication>|undefined;
|
|
9
10
|
export async function authenticate(request:Request){
|
|
10
11
|
if(verify)return verify(request);
|
|
11
|
-
const url=process.env.SUPABASE_URL
|
|
12
|
+
const url=process.env.SUPABASE_URL??process.env.NEXT_PUBLIC_SUPABASE_URL;
|
|
13
|
+
const key=process.env.SUPABASE_PUBLISHABLE_KEY??process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY??process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;
|
|
12
14
|
if(!url||!key)throw Error('Set your existing Supabase URL and publishable key on the server.');
|
|
13
15
|
const provider=createClient(url,key,{auth:{persistSession:false,autoRefreshToken:false,detectSessionInUrl:false}});
|
|
14
16
|
verify=supabaseMessengerAuthentication(provider.auth);
|
|
@@ -30,7 +32,7 @@ export async function authorize(access:MessengerAccess):Promise<boolean>{
|
|
|
30
32
|
throw Error('Connect your existing messaging permission check in robono-access.ts');
|
|
31
33
|
}
|
|
32
34
|
`;
|
|
33
|
-
files['.env.example'] += provider === 'supabase' ? 'SUPABASE_URL=\
|
|
35
|
+
files['.env.example'] += provider === 'supabase' ? '# Existing NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY\n# (or NEXT_PUBLIC_SUPABASE_ANON_KEY) are reused when present. Otherwise set:\n# SUPABASE_URL=\n# SUPABASE_PUBLISHABLE_KEY=\n' : '# Server only: path to your existing Firebase service-account file, or workload identity.\nGOOGLE_APPLICATION_CREDENTIALS=\n';
|
|
34
36
|
}
|
|
35
37
|
files['client/RobonoChat.tsx'] = web ? `'use client';
|
|
36
38
|
import {useEffect,useRef} from 'react';
|
|
@@ -129,7 +131,8 @@ export function robonoAccounts(auth:Auth):RobonoAccounts{
|
|
|
129
131
|
}}:null),()=>listener(null));},signOut:()=>signOut(auth)};
|
|
130
132
|
}
|
|
131
133
|
`;
|
|
132
|
-
files['ROBONO-SETUP.md'] += `\n## Connected accounts\n${provider === 'custom' ? 'Implement the small RobonoAccounts interface using your existing verified sign-in client.' : '
|
|
134
|
+
files['ROBONO-SETUP.md'] += `\n## Connected accounts\n${provider === 'custom' ? 'Implement the small RobonoAccounts interface using your existing verified sign-in client.' : 'Import CustomerMessenger and pass your existing ' + (provider === 'supabase' ? 'Supabase client' : 'Firebase Auth instance') + ' as auth. The account wrapper is included.'} Pass your current contact dictionary as contacts; names and avatars update without restarting the chat. The connected screen listens for sign-in, sign-out and account switching. It uses a fresh token for each request and never substitutes one account’s token for another.\n\nKeep CustomerMessenger mounted in your signed-in application. Add setupChecks during development for a connection check using your existing login; no copied tokens are needed. The panel is hidden in production. Keep your own account suspension and permission checks in robono-access.ts; provider identity verification does not replace them. Missing permission code intentionally denies access. For explicit host sign-out, unregister messaging before revoking your session when possible. If the provider session has already expired, local content is still cleared; synchronize revoked account access on the server so notifications are also blocked.\n`;
|
|
135
|
+
Object.assign(files, customerMessengerTemplates(options));
|
|
133
136
|
return files;
|
|
134
137
|
}
|
|
135
138
|
//# sourceMappingURL=messenger-connected-templates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messenger-connected-templates.js","sourceRoot":"","sources":["../src/messenger-connected-templates.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messenger-connected-templates.js","sourceRoot":"","sources":["../src/messenger-connected-templates.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,0BAA0B,EAAC,MAAM,mCAAmC,CAAC;AAE7E,MAAM,UAAU,uBAAuB,CAAC,KAA2B,EAAC,OAA+B;IAClG,MAAM,QAAQ,GAAC,OAAO,CAAC,IAAI,IAAE,QAAQ,EAAC,GAAG,GAAC,OAAO,CAAC,QAAQ,KAAG,KAAK,EAAC,CAAC,GAAC,IAAI,CAAC,SAAS,CAAC;IACpF,IAAG,CAAC,CAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAC,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpH,IAAG,QAAQ,KAAG,QAAQ,EAAC,CAAC;QACvB,MAAM,KAAK,GAAC,QAAQ,KAAG,UAAU,CAAA,CAAC,CAAA;;;;;;;;;;;EAWlC,CAAA,CAAC,CAAA;;;;;;;;;;EAUD,CAAC;QACD,KAAK,CAAC,yBAAyB,CAAC,GAAC,yDAAyD,KAAK;;;;;CAKhG,CAAC;QACA,KAAK,CAAC,cAAc,CAAC,IAAE,QAAQ,KAAG,UAAU,CAAA,CAAC,CAAA,4MAA4M,CAAA,CAAC,CAAA,8HAA8H,CAAC;IAC1X,CAAC;IACD,KAAK,CAAC,uBAAuB,CAAC,GAAC,GAAG,CAAA,CAAC,CAAA;;;;;;;;;;;wFAWoD,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;;;;;;;CAO7G,CAAA,CAAC,CAAA;;;;;;;;mDAQiD,CAAC,CAAC,OAAO,CAAC,MAAM,GAAC,aAAa,CAAC;;;;;6EAKL,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;;CAElG,CAAC;IACD,KAAK,CAAC,gCAAgC,CAAC,GAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCxC,CAAC;IACD,IAAG,QAAQ,KAAG,UAAU;QAAC,KAAK,CAAC,2BAA2B,CAAC,GAAC;;;;;;;;;;;;;;;;CAgB5D,CAAC;IACD,IAAG,QAAQ,KAAG,UAAU;QAAC,KAAK,CAAC,2BAA2B,CAAC,GAAC;;;;;;;;;;CAU5D,CAAC;IACD,KAAK,CAAC,iBAAiB,CAAC,IAAE,4BAA4B,QAAQ,KAAG,QAAQ,CAAA,CAAC,CAAA,2FAA2F,CAAA,CAAC,CAAA,kDAAkD,GAAC,CAAC,QAAQ,KAAG,UAAU,CAAA,CAAC,CAAA,iBAAiB,CAAA,CAAC,CAAA,wBAAwB,CAAC,GAAC,4CAA4C,+5BAA+5B,CAAC;IACxuC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,OAAO,KAAK,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { MessengerStarterOptions } from './messenger-init.js';
|
|
2
|
+
/** A single customer-facing component; account wiring and diagnostics stay generated. */
|
|
3
|
+
export declare function customerMessengerTemplates(options: MessengerStarterOptions): Record<string, string>;
|
|
4
|
+
//# sourceMappingURL=messenger-customer-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messenger-customer-templates.d.ts","sourceRoot":"","sources":["../src/messenger-customer-templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,qBAAqB,CAAC;AAEjE,yFAAyF;AACzF,wBAAgB,0BAA0B,CAAC,OAAO,EAAC,uBAAuB,GAAE,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CA4GhG"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/** A single customer-facing component; account wiring and diagnostics stay generated. */
|
|
2
|
+
export function customerMessengerTemplates(options) {
|
|
3
|
+
const provider = options.auth ?? 'custom';
|
|
4
|
+
const web = options.platform === 'web';
|
|
5
|
+
const type = provider === 'supabase' ? 'SupabaseClient' : provider === 'firebase' ? 'Auth' : 'RobonoAccounts';
|
|
6
|
+
const typeImport = provider === 'supabase' ? "import type {SupabaseClient} from '@supabase/supabase-js';" : provider === 'firebase' ? "import type {Auth} from 'firebase/auth';" : "import type {RobonoAccounts} from './ConnectedRobonoChat';";
|
|
7
|
+
return {
|
|
8
|
+
'client/CustomerMessenger.tsx': `'use client';
|
|
9
|
+
import React,{useMemo,type ComponentProps} from 'react';
|
|
10
|
+
import {ConnectedRobonoChat} from './ConnectedRobonoChat';
|
|
11
|
+
import {MessengerSetup} from './MessengerSetup';
|
|
12
|
+
${typeImport}
|
|
13
|
+
${provider === 'custom' ? '' : "import {robonoAccounts} from './robono-accounts';"}
|
|
14
|
+
type Props=Omit<ComponentProps<typeof ConnectedRobonoChat>,'accounts'>&{
|
|
15
|
+
${provider === 'custom' ? 'accounts' : 'auth'}:${type};
|
|
16
|
+
/** Optional development-only connection check. Never shown in a production build. */
|
|
17
|
+
setupChecks?:boolean;
|
|
18
|
+
};
|
|
19
|
+
export function CustomerMessenger({${provider === 'custom' ? 'accounts' : 'auth'},setupChecks=false,...props}:Props){
|
|
20
|
+
${provider === 'custom' ? '' : 'const accounts=useMemo(()=>robonoAccounts(auth),[auth]);'}
|
|
21
|
+
return <>
|
|
22
|
+
{setupChecks&&${web ? "process.env.NODE_ENV==='development'" : '__DEV__'}&&<MessengerSetup accounts={accounts}/>}
|
|
23
|
+
<ConnectedRobonoChat accounts={accounts} {...props}/>
|
|
24
|
+
</>;
|
|
25
|
+
}
|
|
26
|
+
`,
|
|
27
|
+
'client/check-messenger-connection.ts': `export interface ConnectionCheck {name:string;status:'passed'|'failed'|'needs-action';detail:string}
|
|
28
|
+
/** Read-only checks in the signed-in app. Tokens never enter the report or Robono's website. */
|
|
29
|
+
export async function checkMessengerConnection(getAccessToken:()=>Promise<string>,signal:AbortSignal):Promise<ConnectionCheck[]>{
|
|
30
|
+
const endpoint=${JSON.stringify(web ? '/api/robono' : options.origin + '/api/robono')};
|
|
31
|
+
const checks:ConnectionCheck[]=[];
|
|
32
|
+
const run=async(name:string,operation:string,service:string,inspect:(data:any)=>Omit<ConnectionCheck,'name'>)=>{
|
|
33
|
+
try{
|
|
34
|
+
const token=await getAccessToken();
|
|
35
|
+
if(signal.aborted)throw Error('Cancelled');
|
|
36
|
+
const response=await fetch(endpoint+'?service='+service,{method:'POST',redirect:'error',signal,
|
|
37
|
+
headers:{'content-type':'application/json',authorization:'Bearer '+token},body:JSON.stringify({operation})});
|
|
38
|
+
if(!response.ok){
|
|
39
|
+
const detail=response.status===401?'Sign in again, then check that the server uses the same sign-in provider.':
|
|
40
|
+
response.status===403?'Check the server’s account permissions and allowed website address.':
|
|
41
|
+
response.status===404?'The /api/robono route is missing. Run the installer checklist.':
|
|
42
|
+
response.status===429?'The service is busy or a usage limit was reached. Try again shortly.':
|
|
43
|
+
'The server could not complete this check. Check its private configuration and permission code.';
|
|
44
|
+
checks.push({name,status:'failed',detail});return;
|
|
45
|
+
}
|
|
46
|
+
checks.push({name,...inspect(await response.json())});
|
|
47
|
+
}catch{
|
|
48
|
+
if(signal.aborted)return;
|
|
49
|
+
checks.push({name,status:'failed',detail:'Could not connect with the current login. Check your server address and internet connection.'});
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
await run('Signed-in messaging','settings','messages',data=>({status:data.settings?'passed':'failed',detail:data.settings?'Your current account can load messaging settings.':'The route did not return messaging settings.'}));
|
|
53
|
+
if(!signal.aborted)await run('Conversations','conversations','messages',data=>({status:!Array.isArray(data.conversations)?'failed':data.conversations.length?'passed':'needs-action',detail:!Array.isArray(data.conversations)?'The route did not return conversations.':data.conversations.length?'Your account has available conversations.':'Connect a second test account and synchronize their permitted relationship from your server.'}));
|
|
54
|
+
if(!signal.aborted)await run('Notifications','notification-status','notifications',data=>({status:!Array.isArray(data.providers)?'failed':data.providers.length?'passed':'needs-action',detail:!Array.isArray(data.providers)?'Check that the server uses the current messaging package.':data.providers.length?'A notification provider is configured. Test an actual background notification next.':'Connect website or Apple/Google notification settings in Robono. Chat can work before alerts are connected.'}));
|
|
55
|
+
return checks;
|
|
56
|
+
}
|
|
57
|
+
`,
|
|
58
|
+
'client/MessengerSetup.tsx': `'use client';
|
|
59
|
+
import React,{useEffect,useRef,useState} from 'react';
|
|
60
|
+
${web ? '' : "import {View,Text,Pressable} from 'react-native';"}
|
|
61
|
+
import type {RobonoAccounts,RobonoAccount} from './ConnectedRobonoChat';
|
|
62
|
+
import {checkMessengerConnection,type ConnectionCheck} from './check-messenger-connection';
|
|
63
|
+
export function MessengerSetup({accounts}:{accounts:RobonoAccounts}){
|
|
64
|
+
const current=useRef<RobonoAccount|null>(null),generation=useRef(0),pending=useRef<AbortController|null>(null);
|
|
65
|
+
const [signedIn,setSignedIn]=useState(false),[busy,setBusy]=useState(false),[checks,setChecks]=useState<ConnectionCheck[]>([]);
|
|
66
|
+
useEffect(()=>{
|
|
67
|
+
generation.current++;current.current=null;pending.current?.abort();setBusy(false);setChecks([]);setSignedIn(false);
|
|
68
|
+
let live=true;
|
|
69
|
+
const off=accounts.subscribe(account=>{
|
|
70
|
+
if(!live)return;
|
|
71
|
+
if(current.current?.id!==account?.id){generation.current++;pending.current?.abort();setChecks([]);setBusy(false);}
|
|
72
|
+
current.current=account;setSignedIn(!!account);
|
|
73
|
+
});
|
|
74
|
+
return()=>{live=false;generation.current++;current.current=null;pending.current?.abort();off();};
|
|
75
|
+
},[accounts]);
|
|
76
|
+
const run=async()=>{
|
|
77
|
+
if(!current.current||pending.current&&!pending.current.signal.aborted)return;
|
|
78
|
+
const account=current.current,version=generation.current,controller=new AbortController();
|
|
79
|
+
pending.current=controller;setBusy(true);setChecks([]);
|
|
80
|
+
const timer=setTimeout(()=>controller.abort(),20000);
|
|
81
|
+
const token=async()=>{
|
|
82
|
+
if(current.current?.id!==account.id||generation.current!==version)throw Error('Account changed');
|
|
83
|
+
const value=await current.current.getAccessToken();
|
|
84
|
+
if(current.current?.id!==account.id||generation.current!==version)throw Error('Account changed');
|
|
85
|
+
return value;
|
|
86
|
+
};
|
|
87
|
+
try{
|
|
88
|
+
const result=await checkMessengerConnection(token,controller.signal);
|
|
89
|
+
if(generation.current===version)setChecks(controller.signal.aborted?[{name:'Connection',status:'failed',detail:'The check timed out. Check your connection and try again.'}]:result);
|
|
90
|
+
}finally{
|
|
91
|
+
clearTimeout(timer);
|
|
92
|
+
if(pending.current===controller)pending.current=null;
|
|
93
|
+
if(generation.current===version)setBusy(false);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
${web ? `return <aside aria-label="Messenger setup check" style={{padding:12,border:'1px solid #b8b8b8',borderRadius:8,background:'#fff',color:'#222',fontFamily:'system-ui',marginBottom:8}}>
|
|
97
|
+
<button type="button" disabled={!signedIn||busy} onClick={()=>void run()}>{busy?'Checking connection…':'Check connection'}</button>
|
|
98
|
+
<p style={{margin:'8px 0',fontSize:14}}>{signedIn?'Uses your current login. No copied tokens or messages.':'Sign in to your app to check the connection.'} Development only.</p>
|
|
99
|
+
{checks.length>0&&<ul aria-live="polite" style={{margin:0,paddingLeft:20}}>{checks.map(check=><li key={check.name}><strong>{check.status==='passed'?'Ready':check.status==='failed'?'Fix':'Next'} — {check.name}:</strong> {check.detail}</li>)}</ul>}
|
|
100
|
+
{checks.length>0&&<p style={{fontSize:12,marginBottom:0}}>These are connection checks. They do not prove account isolation, delivery or background notifications.</p>}
|
|
101
|
+
</aside>;` : `return <View accessibilityLabel="Messenger setup check" style={{padding:12,borderWidth:1,borderColor:'#b8b8b8',borderRadius:8,backgroundColor:'#fff',marginBottom:8}}>
|
|
102
|
+
<Pressable accessibilityRole="button" accessibilityState={{disabled:!signedIn||busy}} disabled={!signedIn||busy} onPress={()=>void run()} style={{padding:8}}><Text style={{color:'#174ea6',fontWeight:'600'}}>{busy?'Checking connection…':'Check connection'}</Text></Pressable>
|
|
103
|
+
<Text style={{color:'#222',marginVertical:8}}>{signedIn?'Uses your current login. No copied tokens or messages.':'Sign in to your app to check the connection.'} Development only.</Text>
|
|
104
|
+
{checks.map(check=><Text key={check.name} style={{color:'#222',marginBottom:6}}>{check.status==='passed'?'Ready':check.status==='failed'?'Fix':'Next'} — {check.name}: {check.detail}</Text>)}
|
|
105
|
+
{checks.length>0&&<Text style={{color:'#555',fontSize:12}}>These are connection checks. They do not prove account isolation, delivery or background notifications.</Text>}
|
|
106
|
+
</View>;`}
|
|
107
|
+
}
|
|
108
|
+
`,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=messenger-customer-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messenger-customer-templates.js","sourceRoot":"","sources":["../src/messenger-customer-templates.ts"],"names":[],"mappings":"AAEA,yFAAyF;AACzF,MAAM,UAAU,0BAA0B,CAAC,OAA+B;IACxE,MAAM,QAAQ,GAAC,OAAO,CAAC,IAAI,IAAE,QAAQ,CAAC;IACtC,MAAM,GAAG,GAAC,OAAO,CAAC,QAAQ,KAAG,KAAK,CAAC;IACnC,MAAM,IAAI,GAAC,QAAQ,KAAG,UAAU,CAAA,CAAC,CAAA,gBAAgB,CAAA,CAAC,CAAA,QAAQ,KAAG,UAAU,CAAA,CAAC,CAAA,MAAM,CAAA,CAAC,CAAA,gBAAgB,CAAC;IAChG,MAAM,UAAU,GAAC,QAAQ,KAAG,UAAU,CAAA,CAAC,CAAA,4DAA4D,CAAA,CAAC,CAAA,QAAQ,KAAG,UAAU,CAAA,CAAC,CAAA,0CAA0C,CAAA,CAAC,CAAA,4DAA4D,CAAC;IAClO,OAAO;QACL,8BAA8B,EAAC;;;;EAIjC,UAAU;EACV,QAAQ,KAAG,QAAQ,CAAA,CAAC,CAAA,EAAE,CAAA,CAAC,CAAA,mDAAmD;;IAExE,QAAQ,KAAG,QAAQ,CAAA,CAAC,CAAA,UAAU,CAAA,CAAC,CAAA,MAAM,IAAI,IAAI;;;;qCAIZ,QAAQ,KAAG,QAAQ,CAAA,CAAC,CAAA,UAAU,CAAA,CAAC,CAAA,MAAM;IACtE,QAAQ,KAAG,QAAQ,CAAA,CAAC,CAAA,EAAE,CAAA,CAAC,CAAA,0DAA0D;;oBAEjE,GAAG,CAAA,CAAC,CAAA,sCAAsC,CAAA,CAAC,CAAA,SAAS;;;;CAIvE;QACG,sCAAsC,EAAC;;;mBAGxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAA,CAAC,CAAA,aAAa,CAAA,CAAC,CAAA,OAAO,CAAC,MAAM,GAAC,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BhF;QACG,2BAA2B,EAAC;;EAE9B,GAAG,CAAA,CAAC,CAAA,EAAE,CAAA,CAAC,CAAA,mDAAmD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoCxD,GAAG,CAAA,CAAC,CAAA;;;;;YAKI,CAAA,CAAC,CAAA;;;;;WAKF;;CAEV;KACE,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messenger-init.d.ts","sourceRoot":"","sources":["../src/messenger-init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,qBAAqB,EAAC,MAAM,oCAAoC,CAAC;AAGtG,MAAM,WAAW,uBAAuB;IAAE,QAAQ,EAAC,KAAK,GAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,GAAC,OAAO,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,IAAI,CAAC,EAAC,qBAAqB,CAAA;CAAC;AACtJ,4FAA4F;AAC5F,wBAAgB,qBAAqB,CAAC,OAAO,EAAC,uBAAuB,GAAE,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"messenger-init.d.ts","sourceRoot":"","sources":["../src/messenger-init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,qBAAqB,EAAC,MAAM,oCAAoC,CAAC;AAGtG,MAAM,WAAW,uBAAuB;IAAE,QAAQ,EAAC,KAAK,GAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,GAAC,OAAO,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,IAAI,CAAC,EAAC,qBAAqB,CAAA;CAAC;AACtJ,4FAA4F;AAC5F,wBAAgB,qBAAqB,CAAC,OAAO,EAAC,uBAAuB,GAAE,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAgF3F;AACD,uFAAuF;AACvF,wBAAsB,qBAAqB,CAAC,WAAW,EAAC,MAAM,EAAC,OAAO,EAAC,uBAAuB,qBAc7F"}
|
package/dist/messenger-init.js
CHANGED
|
@@ -26,7 +26,7 @@ export async function authorize(access:MessengerAccess):Promise<boolean>{
|
|
|
26
26
|
`;
|
|
27
27
|
const files = {
|
|
28
28
|
'.gitignore': '.env\n.env.local\nnode_modules/\n',
|
|
29
|
-
'.env.example': `# Server only. Never prefix this with NEXT_PUBLIC_, VITE_ or EXPO_PUBLIC_.\nROBONO_API_KEY=\n`,
|
|
29
|
+
'.env.example': `# Server only. Never prefix this with NEXT_PUBLIC_, VITE_ or EXPO_PUBLIC_.\nROBONO_API_KEY=\n# Optional comma-separated exact website origins. Set this before deployment.\nROBONO_ALLOWED_ORIGINS=${options.origin}\n`,
|
|
30
30
|
'server/robono-access.ts': auth,
|
|
31
31
|
'server/robono.ts': `import {createRobonoMessengerServer} from '@robono/server';
|
|
32
32
|
import {authenticate,authorize} from './robono-access';
|
|
@@ -35,7 +35,8 @@ export function getMessenger(){
|
|
|
35
35
|
if(messenger)return messenger;
|
|
36
36
|
const apiKey=process.env.ROBONO_API_KEY;
|
|
37
37
|
if(!apiKey)throw Error('Set ROBONO_API_KEY on your server.');
|
|
38
|
-
|
|
38
|
+
const allowedOrigins=process.env.ROBONO_ALLOWED_ORIGINS?.split(',').map((value:string)=>value.trim()).filter(Boolean)??[${q(options.origin)}];
|
|
39
|
+
return messenger=createRobonoMessengerServer({apiKey,authenticate,authorize,allowedOrigins});
|
|
39
40
|
}
|
|
40
41
|
`,
|
|
41
42
|
[route]: `import {getMessenger} from ${q(options.framework === 'next' ? '../../../server/robono' : './robono')};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messenger-init.js","sourceRoot":"","sources":["../src/messenger-init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,uBAAuB,EAA4B,MAAM,oCAAoC,CAAC;AACtG,OAAO,EAAC,KAAK,EAAC,SAAS,EAAC,MAAM,EAAC,QAAQ,EAAC,KAAK,EAAC,EAAE,EAAC,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,QAAQ,EAAC,UAAU,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAEnE,4FAA4F;AAC5F,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACpE,MAAM,MAAM,GAAC,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,IAAG,MAAM,CAAC,MAAM,KAAG,OAAO,CAAC,MAAM,IAAE,MAAM,CAAC,QAAQ,IAAE,MAAM,CAAC,QAAQ,IAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAG,QAAQ,IAAE,MAAM,CAAC,QAAQ,KAAG,OAAO,IAAE,CAAC,WAAW,EAAC,WAAW,EAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAAC,MAAM,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAC7Q,IAAG,CAAC,CAAC,KAAK,EAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAE,CAAC,CAAC,MAAM,EAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAE,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,IAAE,OAAO,CAAC,WAAW,CAAC,MAAM,GAAC,GAAG;QAAC,MAAM,KAAK,CAAC,4EAA4E,CAAC,CAAC;IACpP,IAAG,OAAO,CAAC,QAAQ,KAAG,MAAM,IAAE,MAAM,CAAC,QAAQ,KAAG,QAAQ;QAAC,MAAM,KAAK,CAAC,mEAAmE,CAAC,CAAC;IAC1I,MAAM,CAAC,GAAC,IAAI,CAAC,SAAS,EAAC,KAAK,GAAC,OAAO,CAAC,SAAS,KAAG,MAAM,CAAA,CAAC,CAAA,yBAAyB,CAAA,CAAC,CAAA,wBAAwB,CAAC;IAC3G,MAAM,IAAI,GAAC;;;;;;;;;;;;CAYX,CAAC;IACD,MAAM,KAAK,GAAuB;QACjC,YAAY,EAAC,mCAAmC;QAChD,cAAc,EAAC
|
|
1
|
+
{"version":3,"file":"messenger-init.js","sourceRoot":"","sources":["../src/messenger-init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createInterface } from 'node:readline/promises';
|
|
3
3
|
import { stdin, stdout } from 'node:process';
|
|
4
|
-
import { planMessengerInstallation, applyMessengerInstallation, messengerInstallationChecklist } from './messenger-install.js';
|
|
4
|
+
import { planMessengerInstallation, planMessengerInstallationResume, applyMessengerInstallation, messengerInstallationChecklist } from './messenger-install.js';
|
|
5
5
|
import { checkRobonoMessengerSetup } from './messenger-check.js';
|
|
6
6
|
const args = process.argv.slice(2), values = {}, flags = new Set();
|
|
7
7
|
let prompt;
|
|
8
8
|
try {
|
|
9
9
|
for (let i = 0; i < args.length; i++) {
|
|
10
10
|
const arg = args[i];
|
|
11
|
-
if (['--help', '--yes', '--dry-run', '--no-install', '--check', '--json'].includes(arg)) {
|
|
11
|
+
if (['--help', '--yes', '--dry-run', '--no-install', '--check', '--json', '--resume'].includes(arg)) {
|
|
12
12
|
flags.add(arg);
|
|
13
13
|
continue;
|
|
14
14
|
}
|
|
@@ -22,6 +22,7 @@ Detects Next.js App Router or Expo 55–56, places files, and installs matching
|
|
|
22
22
|
Expo also needs a separate Next.js server and a static app.json. Existing application screens and .env files are preserved.
|
|
23
23
|
--dry-run lists the exact files and commands without changing anything.
|
|
24
24
|
--yes applies that plan without an interactive prompt. --no-install writes files only.
|
|
25
|
+
--resume finishes package installation using your saved setup, preserving all existing integration code.
|
|
25
26
|
--check shows one setup checklist; set the three ROBONO_* test variables to include live checks. --json prints a shareable checklist.
|
|
26
27
|
The development-only /robono-preview route uses fictional people and never sends messages outside the page.`);
|
|
27
28
|
}
|
|
@@ -49,13 +50,15 @@ The development-only /robono-preview route uses fictional people and never sends
|
|
|
49
50
|
if (stdin.isTTY && !flags.has('--yes'))
|
|
50
51
|
prompt = createInterface({ input: stdin, output: stdout });
|
|
51
52
|
const ask = async (key, label) => values[key] ?? (prompt ? (await prompt.question(label + ': ')).trim() : undefined);
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
if (flags.has('--resume') && (flags.has('--no-install') || Object.keys(values).some(key => key !== '--project')))
|
|
54
|
+
throw Error('Use --resume with your existing --project only. It preserves the saved setup.');
|
|
55
|
+
const origin = flags.has('--resume') ? undefined : await ask('--origin', 'Website/server origin (for example https://your-company.com)'), companyName = flags.has('--resume') ? undefined : await ask('--company', 'Company name');
|
|
56
|
+
if (!flags.has('--resume') && (!origin || !companyName))
|
|
54
57
|
throw Error('Supply --origin and --company, or run interactively.');
|
|
55
58
|
const auth = values['--auth'];
|
|
56
59
|
if (auth && !['custom', 'supabase', 'firebase'].includes(auth))
|
|
57
60
|
throw Error('Choose custom, supabase or firebase.');
|
|
58
|
-
const plan = await planMessengerInstallation({ project: values['--project'] ?? '.', origin, companyName, ...(values['--server-project'] ? { serverProject: values['--server-project'] } : {}), ...(auth ? { auth: auth } : {}) });
|
|
61
|
+
const plan = flags.has('--resume') ? await planMessengerInstallationResume(values['--project'] ?? '.') : await planMessengerInstallation({ project: values['--project'] ?? '.', origin: origin, companyName: companyName, ...(values['--server-project'] ? { serverProject: values['--server-project'] } : {}), ...(auth ? { auth: auth } : {}) });
|
|
59
62
|
for (const file of plan.files)
|
|
60
63
|
console.log('Create: ' + file.path);
|
|
61
64
|
for (const file of plan.replacements)
|
|
@@ -68,7 +71,7 @@ The development-only /robono-preview route uses fictional people and never sends
|
|
|
68
71
|
if (!flags.has('--yes') && (!prompt || !/^y(es)?$/i.test((await prompt.question('Apply this plan? [y/N] ')).trim())))
|
|
69
72
|
throw Error('Nothing changed. Use --yes to apply the displayed plan.');
|
|
70
73
|
await applyMessengerInstallation(plan, !flags.has('--no-install'));
|
|
71
|
-
console.log('Integration files are ready. Open .robono/SETUP.md
|
|
74
|
+
console.log('Integration files are ready. Open .robono/SETUP.md. Add CustomerMessenger to your screen; its optional setupChecks button checks your current login without copied tokens. Run --check for the local checklist. Nothing was deployed.');
|
|
72
75
|
}
|
|
73
76
|
}
|
|
74
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messenger-install-cli.js","sourceRoot":"","sources":["../src/messenger-install-cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,yBAAyB,EAAC,0BAA0B,EAAC,8BAA8B,EAAC,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"messenger-install-cli.js","sourceRoot":"","sources":["../src/messenger-install-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,8 +23,11 @@ export interface MessengerInstallPlan {
|
|
|
23
23
|
args: string[];
|
|
24
24
|
}[];
|
|
25
25
|
notes: string[];
|
|
26
|
+
setupFile?: string;
|
|
26
27
|
}
|
|
27
28
|
export declare function planMessengerInstallation(options: MessengerInstallOptions): Promise<MessengerInstallPlan>;
|
|
29
|
+
/** Reconstruct trusted package commands; never execute commands from saved metadata. */
|
|
30
|
+
export declare function planMessengerInstallationResume(directory: string): Promise<MessengerInstallPlan>;
|
|
28
31
|
/** Preflight all files; exclusive writes and rollback avoid overwriting customer work. */
|
|
29
32
|
export declare function applyMessengerInstallation(plan: MessengerInstallPlan, install?: boolean): Promise<void>;
|
|
30
33
|
export declare function messengerInstallationChecklist(directory: string): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messenger-install.d.ts","sourceRoot":"","sources":["../src/messenger-install.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,uBAAuB;IAAE,OAAO,EAAC,MAAM,CAAC;IAAA,aAAa,CAAC,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,IAAI,CAAC,EAAC,QAAQ,GAAC,UAAU,GAAC,UAAU,CAAA;CAAC;AAErJ,MAAM,WAAW,oBAAoB;IAAE,QAAQ,EAAC,KAAK,GAAC,MAAM,CAAC;IAAA,IAAI,EAAC,QAAQ,GAAC,UAAU,GAAC,UAAU,CAAC;IAAA,KAAK,EAAC;QAAC,IAAI,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAA;KAAC,EAAE,CAAC;IAAA,YAAY,EAAC;QAAC,IAAI,EAAC,MAAM,CAAC;QAAA,MAAM,EAAC,MAAM,CAAC;QAAA,KAAK,EAAC,MAAM,CAAA;KAAC,EAAE,CAAC;IAAA,QAAQ,EAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAC;QAAA,IAAI,EAAC,MAAM,EAAE,CAAA;KAAC,EAAE,CAAC;IAAA,KAAK,EAAC,MAAM,EAAE,CAAA;CAAC;
|
|
1
|
+
{"version":3,"file":"messenger-install.d.ts","sourceRoot":"","sources":["../src/messenger-install.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,uBAAuB;IAAE,OAAO,EAAC,MAAM,CAAC;IAAA,aAAa,CAAC,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,IAAI,CAAC,EAAC,QAAQ,GAAC,UAAU,GAAC,UAAU,CAAA;CAAC;AAErJ,MAAM,WAAW,oBAAoB;IAAE,QAAQ,EAAC,KAAK,GAAC,MAAM,CAAC;IAAA,IAAI,EAAC,QAAQ,GAAC,UAAU,GAAC,UAAU,CAAC;IAAA,KAAK,EAAC;QAAC,IAAI,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAA;KAAC,EAAE,CAAC;IAAA,YAAY,EAAC;QAAC,IAAI,EAAC,MAAM,CAAC;QAAA,MAAM,EAAC,MAAM,CAAC;QAAA,KAAK,EAAC,MAAM,CAAA;KAAC,EAAE,CAAC;IAAA,QAAQ,EAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAC;QAAA,IAAI,EAAC,MAAM,EAAE,CAAA;KAAC,EAAE,CAAC;IAAA,KAAK,EAAC,MAAM,EAAE,CAAC;IAAA,SAAS,CAAC,EAAC,MAAM,CAAA;CAAC;AA6BpR,wBAAsB,yBAAyB,CAAC,OAAO,EAAC,uBAAuB,GAAE,OAAO,CAAC,oBAAoB,CAAC,CAE7G;AAkED,wFAAwF;AACxF,wBAAsB,+BAA+B,CAAC,SAAS,EAAC,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAC,CAYpG;AACD,0FAA0F;AAC1F,wBAAsB,0BAA0B,CAAC,IAAI,EAAC,oBAAoB,EAAC,OAAO,UAAK,iBAatF;AACD,wBAAsB,8BAA8B,CAAC,SAAS,EAAC,MAAM;;;;KAmBpE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { messengerPreviewTemplates } from './messenger-preview-template.js';
|
|
2
2
|
import { readFile, writeFile, mkdir, lstat, realpath, unlink } from 'node:fs/promises';
|
|
3
3
|
import { resolve, join, dirname, relative } from 'node:path';
|
|
4
|
-
import
|
|
4
|
+
import spawn from 'cross-spawn';
|
|
5
5
|
import { messengerStarterFiles } from './messenger-init.js';
|
|
6
6
|
async function exists(file) { try {
|
|
7
7
|
await lstat(file);
|
|
@@ -64,6 +64,9 @@ async function manager(root, pkg) {
|
|
|
64
64
|
return result;
|
|
65
65
|
}
|
|
66
66
|
export async function planMessengerInstallation(options) {
|
|
67
|
+
return createInstallationPlan(options, false);
|
|
68
|
+
}
|
|
69
|
+
async function createInstallationPlan(options, resume) {
|
|
67
70
|
if (Number(process.versions.node.split('.')[0]) < 22)
|
|
68
71
|
throw Error('Use Node.js 22 or later for automatic installation.');
|
|
69
72
|
const client = await project(options.project), platform = client.deps.expo ? 'expo' : client.deps.next ? 'web' : null;
|
|
@@ -105,13 +108,13 @@ export async function planMessengerInstallation(options) {
|
|
|
105
108
|
'Start your Next.js development server and open /robono-preview for the two-person local example. It returns 404 in production.',
|
|
106
109
|
'Connect your current messaging permission check in robono/server/robono-access.ts. Access stays blocked until then.',
|
|
107
110
|
'Keep provider credentials and the Robono key on the server. The installer never reads or edits your .env files.',
|
|
108
|
-
'
|
|
111
|
+
'Mount CustomerMessenger with your existing sign-in client and contacts. Account wiring is included.',
|
|
109
112
|
'Connect website alerts or Apple/Google credentials in Robono → Your app → Message notifications. Chat works before alerts are configured.'];
|
|
110
|
-
const setup = { schema:
|
|
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' } };
|
|
111
114
|
files.push({ path: join(client.root, '.robono/setup.json'), content: JSON.stringify(setup, null, 2) + '\n' });
|
|
112
|
-
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.
|
|
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' });
|
|
113
116
|
files.push({ path: join(server.root, '.robono/server.env.example'), content: templates['.env.example'] });
|
|
114
|
-
const serverPackages = ['@robono/server@^0.
|
|
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'] : [])];
|
|
115
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'] : [])];
|
|
116
119
|
const packageName = (spec) => spec.slice(0, spec.lastIndexOf('@'));
|
|
117
120
|
const keepExistingProvider = (spec, deps) => !['firebase', 'firebase-admin', '@supabase/supabase-js'].includes(packageName(spec)) || !deps[packageName(spec)];
|
|
@@ -145,12 +148,29 @@ export async function planMessengerInstallation(options) {
|
|
|
145
148
|
}
|
|
146
149
|
notes.push('Added missing Expo plugins; existing permission wording is preserved. Rebuild both iPhone and Android after native dependency changes.');
|
|
147
150
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
151
|
+
if (!resume)
|
|
152
|
+
for (const file of files) {
|
|
153
|
+
await safePath(file.path);
|
|
154
|
+
if (await exists(file.path))
|
|
155
|
+
throw Error(`Already exists: ${file.path}. Nothing was changed. Use --check to see the remaining steps, or --resume to finish package installation.`);
|
|
156
|
+
}
|
|
157
|
+
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
|
+
}
|
|
159
|
+
/** Reconstruct trusted package commands; never execute commands from saved metadata. */
|
|
160
|
+
export async function planMessengerInstallationResume(directory) {
|
|
161
|
+
const root = resolve(directory), setupFile = join(root, '.robono/setup.json');
|
|
162
|
+
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')
|
|
165
|
+
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')]) {
|
|
169
|
+
await safePath(file);
|
|
170
|
+
if (!await exists(file))
|
|
171
|
+
throw Error('An integration file is missing. Restore it before resuming; existing code was not changed.');
|
|
152
172
|
}
|
|
153
|
-
return {
|
|
173
|
+
return createInstallationPlan({ project: root, ...(setup.platform === 'expo' ? { serverProject: server } : {}), origin: setup.origin, companyName: setup.companyName ?? 'Your company', auth: setup.auth }, true);
|
|
154
174
|
}
|
|
155
175
|
/** Preflight all files; exclusive writes and rollback avoid overwriting customer work. */
|
|
156
176
|
export async function applyMessengerInstallation(plan, install = true) {
|
|
@@ -189,9 +209,15 @@ export async function applyMessengerInstallation(plan, install = true) {
|
|
|
189
209
|
for (const command of plan.commands)
|
|
190
210
|
await new Promise((resolve, reject) => {
|
|
191
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' } });
|
|
192
|
-
child.on('error', () => reject(Error('Package installation could not start. Files are saved;
|
|
193
|
-
child.on('exit', code => code === 0 ? resolve() : reject(Error('Package installation did not finish. Files are saved; fix the package-manager error and
|
|
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.')));
|
|
194
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');
|
|
220
|
+
}
|
|
195
221
|
}
|
|
196
222
|
export async function messengerInstallationChecklist(directory) {
|
|
197
223
|
const root = resolve(directory), file = join(root, '.robono/setup.json');
|
|
@@ -206,6 +232,7 @@ export async function messengerInstallationChecklist(directory) {
|
|
|
206
232
|
const complete = await exists(join(root, clientBase, 'robono/client/ConnectedRobonoChat.tsx')) && await exists(join(server, base, 'app/api/robono/route.ts'));
|
|
207
233
|
return [
|
|
208
234
|
{ name: 'Prepared files', status: complete ? 'passed' : 'failed', detail: `${setup.platform === 'expo' ? 'Expo' : 'Next.js'}; ${setup.auth} sign-in.` },
|
|
235
|
+
{ 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.' },
|
|
209
236
|
{ 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.' },
|
|
210
237
|
{ name: 'Server key', status: 'needs-action', detail: 'Set ROBONO_API_KEY on the server. This command does not read or print secrets.' },
|
|
211
238
|
{ name: 'Contacts', status: 'needs-action', detail: 'Synchronize permitted friendships and group membership; pass names/avatars to ConnectedRobonoChat.' },
|
|
@@ -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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@robono/server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "Provider-neutral server SDK for the Robono Bridge API.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"robono",
|
|
@@ -79,8 +79,12 @@
|
|
|
79
79
|
"provenance": true
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
82
|
+
"@types/cross-spawn": "^6.0.6",
|
|
82
83
|
"@types/node": "^20.19.0",
|
|
83
84
|
"typescript": "^6.0.3",
|
|
84
85
|
"yaml": "^2.9.0"
|
|
86
|
+
},
|
|
87
|
+
"dependencies": {
|
|
88
|
+
"cross-spawn": "^7.0.6"
|
|
85
89
|
}
|
|
86
90
|
}
|