import {
DEFAULT_ZOOM_ACCOUNT_ID_SECRET,
DEFAULT_ZOOM_CLIENT_ID_SECRET,
DEFAULT_ZOOM_S2S_CLIENT_SECRET,
ZOOM_ACCOUNT_ID_SETUP_URL,
ZOOM_CLIENT_ID_SETUP_URL,
ZOOM_OAUTH_CONNECT_URL,
ZOOM_S2S_CLIENT_SECRET_SETUP_URL,
getCurrentUser,
pickAuthInput,
resolveZoomAuth,
} from './core.ts'
import { buildMeetingBody } from './shape.ts'
/**
* Local helper checks plus an optional live `/users/me` read.
*
* Without credentials this returns `{ ok: true, live: false }` and the
* prefilled connect / secret URLs. After OAuth or S2S secrets exist it
* reads the current user and returns `{ live: true }` without tokens.
*
* @example
* import smokeTest from 'kody:@kody/zoom/smoke-test'
* export default async function main() {
* return await smokeTest()
* }
*/
export default async function smokeTest(params: Record<string, unknown> = {}) {
const authInput = pickAuthInput(params)
const resolved = resolveZoomAuth(authInput)
const createPreview = buildMeetingBody({
topic: 'Example meeting',
type: 2,
start_time: '2030-01-15T17:00:00',
duration: 30,
timezone: 'UTC',
})
const setup = {
oauthConnectUrl: ZOOM_OAUTH_CONNECT_URL,
accountIdSetupUrl: ZOOM_ACCOUNT_ID_SETUP_URL,
clientIdSetupUrl: ZOOM_CLIENT_ID_SETUP_URL,
clientSecretSetupUrl: ZOOM_S2S_CLIENT_SECRET_SETUP_URL,
s2sSecrets: {
accountId: DEFAULT_ZOOM_ACCOUNT_ID_SECRET,
clientId: DEFAULT_ZOOM_CLIENT_ID_SECRET,
clientSecret: DEFAULT_ZOOM_S2S_CLIENT_SECRET,
},
}
if (params.live !== true) {
return {
ok: true,
live: false,
auth: resolved,
createPreview,
setup,
hint: 'Pass live: true after connecting OAuth or saving S2S secrets to read /users/me. Never create a live meeting from this smoke test.',
}
}
const user = await getCurrentUser(authInput)
return {
ok: true,
live: true,
auth: user.auth,
hasUserId: Boolean(user.id),
hasEmail: Boolean(user.email),
displayName: user.displayName,
createPreview,
setup,
}
}