For the complete documentation index, see llms.txt
DApp Connector API errors
Midnight DApp Connector는 DApp을 Lace, 1AM 같은 지원 지갑에 연결하는 브라우저 기반 API입니다.
이 레퍼런스에서는 DApp이 지갑과 상호작용할 때 DApp Connector API가 반환하는 오류 코드를 다룹니다.
오류는 instanceof 검사가 아니라 type 필드를 가진 APIError 객체로 표면화됩니다. 오류를 식별할 때는 항상 error.type === 'DAppConnectorAPIError'를 사용하세요.
Error codes (v4.0.x)
DApp Connector API 현재 버전에서 사용할 수 있는 오류 코드는 다음과 같습니다.
| Code | Description | Scope | Fix |
|---|---|---|---|
Disconnected | 세션 도중에 지갑 연결이 끊긴 경우 | Session-level | enable()을 다시 호출해 연결을 재설정하세요 |
InternalError | 커넥터가 요청을 내부적으로 처리하지 못한 경우 | Internal | 작업을 재시도하세요. Lace 지갑 로그를 확인하고 필요하면 지갑 확장 프로그램을 업데이트하세요 |
InvalidRequest | 트랜잭션 형식이 잘못되었거나 요청 파라미터가 유효하지 않은 경우 | Client error | 트랜잭션 구조를 확인하고 파라미터 타입과 형식을 점검하세요 |
PermissionRejected | 사용자가 이 DApp을 거부하도록 세션 수준 설정을 지정한 경우 | Persistent | 지갑 설정에서 DApp 차단을 해제하도록 사용자에게 안내하세요 |
Rejected | 사용자가 특정 요청을 보고 이번에 거절한 경우 | Per-request | 사용자가 작업을 취소했음을 안내하고, 자동으로 재시도하지 마세요 |
Key distinction: Rejected vs. PermissionRejected
두 코드 모두 사용자의 거부를 나타내지만, 적용 범위와 대응 방법이 다릅니다.
Rejected: 사용자가 특정 트랜잭션이나 요청을 보고 이번에 거절한 경우입니다. DApp은 다른 요청으로 다시 시도할 수 있습니다.PermissionRejected: 사용자가 이 DApp 전체를 거부하도록 세션 수준 설정을 지정한 경우입니다. 사용자가 지갑 설정을 변경하기 전까지는 재시도해도 같은 결과가 나옵니다.
Detecting APIError
DApp Connector API 오류를 식별할 때는 error.type을 사용하세요. APIError는 검사 대상으로 삼을 수 있는 클래스가 아니므로 instanceof 검사를 사용하지 마세요.
// Use the type field to identify connector errors
if (error.type === 'DAppConnectorAPIError') {
switch (error.code) {
case 'Rejected': // user declined
case 'PermissionRejected': // user blocked DApp
case 'InvalidRequest': // bad request
case 'InternalError': // internal failure
case 'Disconnected': // connection lost
}
}
// Do NOT use instanceof
// if (error instanceof APIError) { ... }
Structure of APIError
APIError 타입은 네이티브 Error 객체를 확장하며 다음 필드를 가집니다.
type APIError = Error & {
type: 'DAppConnectorAPIError';
code: ErrorCode; // one of the 5 codes above
reason: string; // human-readable explanation
}
Transaction status types
DApp Connector는 다음 값으로 트랜잭션 상태도 보고합니다.
| Status | Description |
|---|---|
finalized | 합의가 트랜잭션을 확정한 경우 |
confirmed | 트랜잭션이 블록에 포함됐지만 아직 확정되지 않은 경우 |
pending | 트랜잭션이 제출되어 블록 포함을 기다리는 경우 |
discarded | 노드가 트랜잭션을 폐기한 경우 (블록에 미포함) |