Skip to content

Error Handling

SdkError Class

The SDK uniformly uses SdkError to throw business errors:

typescript
import { SdkError } from '@atomm-developer/generator-sdk'
// CDN: const SdkError = GeneratorSDK.SdkError

try {
  await sdk.credits.consume({ amount: 10, action: 'ai_enhance' })
} catch (err) {
  if (err instanceof SdkError) {
    console.log(err.code)    // Business error code (number)
    console.log(err.message) // Error message (string)
    console.log(err.name)    // 'SdkError'
  }
}

Error Code Table

codeDescriptionTrigger Scenario
20101Not logged in / Invalid tokenAny API call requiring login; SDK automatically triggers logout and clears token
40301Insufficient creditsInsufficient balance during credits.consume() or withBilling()
40302Action not authorizedThe action for credits.consume() was not applied for in the console
-1Network error / Client errorNetwork disconnected, canvas export failed, provider not registered, etc.
OthersBackend business error codesPass-through of backend { code: xxx, msg: 'xxx' }

Error Handling Best Practices

typescript
async function safeOperation() {
  try {
    await sdk.cloud.save({ snapshot: getState(), cover: canvas })
  } catch (err) {
    if (!(err instanceof SdkError)) throw err

    switch (err.code) {
      case 20101:
        // Token expired; SDK has automatically cleared status, guide user to re-login
        await sdk.auth.login()
        break
      case 40301:
        // Insufficient credits
        showInsufficientCreditsDialog()
        break
      case -1:
        // Network error
        showNetworkErrorToast()
        break
      default:
        console.error('Unknown error:', err.code, err.message)
    }
  }
}

HTTP Interceptor Behavior

  • Request Interceptor: Automatically injects uToken and lang headers.
  • Response Interceptor:
    • code === 0 → Extracts and returns the data field.
    • code === 20101 → Clears token + triggers onTokenExpired callback.
    • Other codes → reject SdkError(code, msg).
    • Network error → reject SdkError(-1, 'Network error').
  • Timeout: 60 seconds.

MIT Licensed