SDK
Deplite는 네 가지 언어의 공식 SDK를 제공해요.
모두 동일한 API 표면을 그 언어의 관용 스타일로 노출해요.
언어 매트릭스
| 언어 | 패키지 | 최소 요구사항 | 비동기 스타일 | 이벤트 스트림 타입 |
|---|---|---|---|---|
| JavaScript / TypeScript | @deplite/sdk (npm) | Node.js 20+ | Promise / async-await | AsyncIterable<AgentEvent> |
| Android (Kotlin) | io.deplite:sdk-android (Maven Central) | JVM 17+ | suspend / 코루틴 | Flow<AgentEvent> |
| iOS (Swift) | Deplite/sdk-ios (SwiftPM) | iOS 15 · macOS 12 · tvOS 15 · watchOS 8 · visionOS 1 | async / throws | AsyncThrowingStream<AgentEvent, Error> |
| Flutter (Dart) | deplite (pub.dev) | Dart 3.0+ | Future / await | Stream<AgentEvent> |
두 가지 모드
모든 SDK는 두 가지 모드를 제공해요.
자세한 비교는 인증 모드에서 확인해주세요.
| External | Embedded | |
|---|---|---|
| 진입 클래스 | Deplite | DepliteAgent |
| 인증 | API 토큰 (dpl_...) | 1회용 설치 코드 (en_...) → 공개·개인 키쌍 |
| 시작 방법 | new Deplite({ apiToken }) | Deplite.enroll({ installCode, name }) → new DepliteAgent({ identity, privateKey }) |
| 키 보관 책임 | 호출자 | 호출자 (SDK는 저장하지 않음) |
Enrollment 결과는 SDK가 저장하지 않아요
Deplite.enroll(...)이 반환하는 Enrollment { identity, privateKey }는 SDK가 디스크에 쓰지 않아요.
호출자가 암호화 후 저장하는 것을 추천드려요.
identity는 비밀이 아니므로 일반 저장소에 둬도 되고, privateKey(raw 32바이트)만 안전하게 보관하면 충분해요.
4언어 공통 API 표면
모든 SDK가 노출하는 객체 구조와 메소드는 동일해요.
언어별 시그니처는 각 SDK 페이지에서 확인해주세요.
External 매니저 (Deplite)
| 매니저 | 메소드 |
|---|---|
triggers | run |
files | upload, presignUpload, completeUpload, downloadUrl, download, get, list, delete |
Embedded 매니저 (DepliteAgent)
| 매니저 | 메소드 |
|---|---|
| (agent 자체) | heartbeat, updateIdentity, events |
workflows | report |
jobs | appendLogs, reportResult |
files | upload, presignUpload, complete, downloadUrl, download, get, delete (no list) |
공통 모델
| 모델 | 설명 |
|---|---|
Enrollment | { identity, privateKey } — enroll 결과 |
AgentIdentity | { agentId, organizationId, baseUrl, serverPublicKeyPem } |
AgentEvent | Deploy · Revoke · SyncWorkflows · Ping · Unknown (sealed) |
DeployPayload | { jobId, workflowName, debug, ref?, params?, issuedAt, nonce, force, forceReason? } |
TriggerRunResult | { jobId, status, idempotent, timedOut, exitCode?, errorMessage?, output?, statusUrl? } |
FileMeta | { id, bindingId?, jobId?, filename?, contentType?, size?, status?, ... } |
CleanupRule | Ttl(seconds) · Persistent · OnJobEnd (sealed) |
LogItem | { seq, stream, content, stepName?, level? } |
JobResult | factories: running()·success()·failed()·timeout()·rejected() |
WorkflowReport | { name, verboseSteps[], secretsKeys[] } |
공통 예외 계층
| 예외 | 발생 시점 |
|---|---|
DepliteAuthException / DepliteAuthError / DepliteError.unauthorized | HTTP 401·403 |
DepliteApiException / DepliteApiError / DepliteError.api | 그 외 4xx·5xx |
DepliteException / DepliteError / DepliteError.transport etc. | 네트워크·키·디스크 등 |
REST·Actions와 어떻게 다른가요?
| SDK | REST API | GitHub Actions | |
|---|---|---|---|
| 코드 작성 | 필요 (앱·서버 안에서) | 필요 (HTTP 클라이언트) | 불필요 (YAML만) |
| 타입 안전 | ✅ | ❌ | ❌ |
| Embedded 모드 | ✅ | ✅ (직접 구현) | ❌ |
| 서명 자동 처리 | ✅ | ❌ (직접) | — |
| Streaming 이벤트 수신 | ✅ (agent.events()) | ✅ (SSE 직접 구현) | ❌ |
| 어디서 도는지 | 앱·서버·CI | 어디서나 | GitHub Actions runner |
REST API는 어떤 언어에서도 가능하지만 직접 서명·재시도·SSE를 구현해야 해요.
SDK는 그걸 라이브러리로 감춰줘요.
GitHub Actions는 가장 단순하지만 External 모드만 지원해요.
관련 문서
언어별 상세 페이지로 이동하세요.
최종 수정 일자: