Admin view
This surface is designed for hub owners and members. Admins can audit connections from Admin pages.
async ({ sess, ctx }) => {
const db = ctx?.db;
const tid = String(sess?.tenantId || 'default');
const enabledChannels = (await db.listEnabledChannels('kick', tid)) || [];
const uid = String(sess?.userId || '');
const kickOauthLogin = String(await db.tenantKvGet(tid, 'kick.oauth_login') || '').trim();
const kickOauthUserId = String(await db.tenantKvGet(tid, 'kick.oauth_user_id') || '').trim();
const platformEnabled = !!cfg.kickEnabled;
const oauthConfigured = !!(cfg.kickClientId && cfg.kickClientSecret);
let kickTenantOauth = null;
try { kickTenantOauth = await ctx?.kick?.getTenantOauthForRuntime?.(tid); } catch {}
const runtimeKickLogin = String(kickTenantOauth?.login || '').trim();
const runtimeKickUserId = String(kickTenantOauth?.userId || '').trim();
const runtimeKickConnected = !!String(kickTenantOauth?.accessToken || '').trim() && String(kickTenantOauth?.source || '') === 'account';
const kickLinkedIdentityCountRow = uid ? await ctx?.storage?.users?.countProviderIdentities(uid, ['kick']) : null;
const kickLinkedIdentityCount = Number(kickLinkedIdentityCountRow?.n || 0);
const kickLinkedIdentityRow = uid ? await ctx?.storage?.users?.getLinkedIdentityLogin(uid, 'kick') : null;
const linkedKickLogin = String(kickLinkedIdentityRow?.login || '').trim();
const resolvedKickLogin = String(kickOauthLogin || runtimeKickLogin || linkedKickLogin || '').trim();
const accountLinked = !!(resolvedKickLogin || kickOauthUserId || runtimeKickUserId || runtimeKickConnected || kickLinkedIdentityCount > 0);
const stateLabel = accountLinked ? 'Connected' : (oauthConfigured ? 'Ready to connect' : 'Not available yet');
const stateHelp = accountLinked
? (resolvedKickLogin
? 'Your Kick account is linked and ready to use.'
: 'Your Kick account is linked. The channel name is still syncing.')
: (oauthConfigured ? 'Connect your Kick account to use it in Channel Dashboard.' : 'Kick sign-in is not available yet.');
const connectedChannelName = resolvedKickLogin || enabledChannels[0] || (accountLinked ? 'Connected account' : '—');
const connectedChannelHelp = resolvedKickLogin
? 'This is the Kick account currently linked to Pickle Systems.'
: accountLinked
? 'Kick is linked on this account, but the channel name has not synced yet. Reconnect or refresh if it stays blank.'
: enabledChannels.length
? 'This Kick channel was saved earlier on this account.'
: 'No Kick channel is connected yet.';
const kickFlashHtml = readKickFlash(req?.query || {});
return `
${kickFlashHtml}
Channel connections
Kick
Connect Kick here. Then turn the channel on in Channel Dashboard.
Status
${esc(stateLabel)}
${esc(stateHelp)}
Linked Kick identities
${kickLinkedIdentityCount || (accountLinked ? 1 : 0)}
Kick accounts linked to this Pickle Systems account.
Connected channel name
${esc(connectedChannelName)}
${esc(connectedChannelHelp)}
`;
}