함수 (Functions)
서버리스 함수 호출 API입니다. 함수 ID(fn_xxx)는 콘솔에서 함수를 만들면 발급됩니다.
invoke (전체 응답)
함수 실행 결과와 메타데이터를 모두 반환합니다.
typescript
// cb.functions.invoke(functionId, payload?, timeout?)
const response = await cb.functions.invoke('fn_send_email', {
to: '[email protected]',
subject: '안녕하세요',
body: '메일 내용입니다.'
})
console.log(response.success) // boolean
console.log(response.execution_id) // 실행 ID
console.log(response.status) // 'success' | 'error' | 'timeout'
console.log(response.result) // 함수가 return 한 값 (Record<string, unknown>)
console.log(response.duration) // 실행 시간 (밀리초)
console.log(response.error) // 실패 시 에러 메시지 (선택)call (결과만)
응답에서 result 만 추출하는 경량 래퍼입니다.
typescript
// 타입 지정 가능
interface EmailResult {
message_id: string
status: 'sent' | 'failed'
}
const data = await cb.functions.call<EmailResult>('fn_send_email', {
to: '[email protected]',
subject: '안녕하세요'
})
console.log(data.message_id, data.status)타임아웃 설정
세 번째 인자에 초 단위 타임아웃을 전달합니다.
typescript
// 60초 타임아웃
const response = await cb.functions.invoke('fn_long_task', { id: 1 }, 60)에러 처리
typescript
import { ApiError } from 'connectbase-client'
try {
const data = await cb.functions.call('fn_xxx', { input: 'test' })
} catch (e) {
if (e instanceof ApiError) {
if (e.statusCode === 404) console.error('함수를 찾을 수 없음')
else if (e.statusCode === 408) console.error('실행 타임아웃')
else console.error('함수 에러:', e.statusCode, e.message)
}
}Cross-App 함수 호출 (invokeCrossApp, SDK 3.16+)
다른 앱(Provider)이 OAuth 로 노출한 함수를 자기 앱(Consumer) 에서 호출합니다. Consumer 가 oauth:authorize_consumer 흐름으로 발급받은 access_token 을 사용합니다.
typescript
// Provider 토큰 발급 (서버 측 / 또는 사용자 동의 흐름)
const { access_token } = await cb.functions.invokeCrossApp(
'fn_provider_function_id', // Provider 측 함수 ID
{ /* payload */ },
{
accessToken: providerToken, // Provider 가 발급한 토큰
timeout: 60 // 초 (선택)
}
)Provider 의 보호된 DB 데이터를 구독하려면 cb.database.connectRealtime({ accessToken: providerToken }) 패턴을 사용합니다.
📌 Cross-App 호출은 OAuth scope 검증을 거치므로, Provider 측에서 해당 함수가
oauth_provision_capability로 노출되어 있어야 합니다. 자세한 흐름은 api/authentication 의 OAuth 2.0 섹션 참고.
실행 타임아웃 관리
함수 실행이 멈춘 채로 남는 stuck-running 상태를 방지하기 위해 ConnectBase 는 2-layer 안전망 을 운영합니다.
- in-process defer 안전망: 함수 런타임이 정상 종료되면 자동으로
status: 'timeout'으로 마무리 - ExecutionTimeoutScheduler: 5분 주기로 sweep, 1시간 이상
status: 'running'인 행은 강제 timeout 처리
따라서 invoke 응답이 빠르게 돌아왔더라도 status 가 'running' 이면 비동기로 결과가 채워질 수 있습니다. 콘솔의 실행 로그 / SDK 의 get_execution 으로 최종 상태를 확인하세요.