+
+ An API secret grants full admin access to the app. This dialog is a local
+ debugging aid — the secret stays in memory for as long as it is open and is
+ never persisted. Never put a secret in a production bundle.
+
+
+
+
+
+ {/* Deliberately `type="text"` masked with `-webkit-text-security`, not a real
+ password field: 1Password decorates any `type="password"` input and its injected
+ UI steals focus on the first keystroke, which closes undocked Chrome DevTools.
+ The value is still never persisted. */}
+ setSecret(event.target.value)}
+ placeholder='Your Stream app secret'
+ spellCheck={false}
+ type='text'
+ value={secret}
+ />
+
+
+
+ {isChecking ? 'Checking…' : 'Check secret'}
+
+ {secretCheck && (
+
{secretCheck}
+ )}
+
+
+ No connection is opened — a server-side client is stateless. The secret only
+ signs a {'{ "server": true }'} JWT attached to each REST call.
+ “Check secret” is optional; it just calls{' '}
+ getAppSettings so a wrong secret shows up here rather than on
+ Run.
+
+
+
+
+
+
+
+
+ {needsCid && (
+
+
+
+ )}
+
+
+
+
+
+
+ {selectedMethod?.targetsMember && (
+
+
+
+
+ {isFetchingMembers ? 'Fetching…' : 'Fetch members'}
+
+
+ {memberOptions.length
+ ? `${memberOptions.length} member${memberOptions.length === 1 ? '' : 's'} listed`
+ : 'No members loaded yet'}
+
+
+ {memberError && (
+ {memberError}
+ )}
+
+ )}
+
+
+