ऑराबेस लोगो
aurabaseडॉक्स
डॉक्स›गाइड›Client options and errors

क्लाइंट विकल्प, त्रुटियाँ, पुनः प्रयास और टाइमआउट

एसडीके की प्रत्येक सेवा द्वारा साझा किया जाने वाला व्यवहार और इसे बदलने वाले विकल्प।

9 मि॰ पढ़ें·स्तर मध्यवर्ती·12 अक्टू॰ 2026 पर संशोधित
यह अंग्रेजी पाठ फ़्रेंच मूल से स्वचालित रूप से उत्पन्न हुआ था और अभी तक इसकी समीक्षा नहीं की गई है।
यह पृष्ठ स्वचालित रूप से अनुवादित किया गया था. अंग्रेजी संस्करण प्रामाणिक है.
#
बनाएं

1. ग्राहक बनाएँ

src/lib/aurabase.tstypescript
import { createClient } from '@aurabase/aurabase-js'

export const aura = createClient(
  process.env.AURA_URL!,       // https://my-app.aurabase.cloud
  process.env.AURA_ANON_KEY!,  // सार्वजनिक कुंजी
)

createClient(url, key, options?) प्रोजेक्ट URL और एक कुंजी लेता है। प्रोजेक्ट की पहचान यूआरएल के होस्ट द्वारा की जाती है, इसलिए पास करने के लिए कोई प्रोजेक्ट आईडी नहीं है। स्थानीय स्टैक में, प्रोजेक्ट उपडोमेन वाले URL का उपयोग करें, जैसे http://my-app-ab12.localhost:8080; नंगे http://localhost:8080 के साथ क्लाइंट एक चेतावनी प्रिंट करता है, क्योंकि गेटवे यह नहीं बता सकता कि आपका मतलब किस प्रोजेक्ट से है।

ब्राउज़र और ऐप्स में सार्वजनिक कुंजी (aura_anon_…) का उपयोग करें। एक service_role कुंजी (aura_sk_…) केवल आपके सर्वर पर होती है, और क्लाइंट इसे लागू करता है:

server/admin.tstypescript
import { createAdminClient } from '@aurabase/aurabase-js'

// केवल सर्वर: पंक्ति-स्तरीय सुरक्षा को बायपास करता है।
export const admin = createAdminClient(process.env.AURA_URL!, process.env.AURA_SERVICE_ROLE_KEY!)

ब्राउज़र में, createClient service_role कुंजी प्राप्त होने पर फेंकता है, इसलिए लीक हुई कुंजी दुर्घटनावश शिप नहीं हो सकती। त्रुटि को चेतावनी में डाउनग्रेड करने के लिए refuseServiceRoleInBrowser: false सेट करें; उत्पादन में ऐसा न करें.

प्रत्येक सेवा क्लाइंट को हैंग कर देती है: aura.auth, aura.db, aura.storage, aura.realtime, aura.functions, aura.ai, aura.notifications, और aura.from('table') aura.db.from('table') के शॉर्टकट के रूप में। ग्राहक संदर्भ देखें।

#
विकल्प

2. विकल्प

विकल्पगलती करनाप्रभाव
auth.persistSessionब्राउज़र में trueपेज लोड के बीच सत्र रखें
auth.storageब्राउज़र में localStorage, मेमोरी अन्यत्रसत्र कहाँ रहता है: अपना स्वयं का स्टोर पास करें (एसएसआर के लिए कुकीज़)
auth.autoRefreshtrueएक्सेस टोकन की समय सीमा समाप्त होने से पहले उसे रीफ्रेश करें और टैब को सिंक में रखें
auth.detectSessionInUrlब्राउज़र में trueOAuth रीडायरेक्ट के बाद URL से एक सत्र पढ़ें, फिर URL साफ़ करें
fetchglobalThis.fetchपरीक्षण या प्रॉक्सी के लिए आपका अपना fetch
retrytrueक्षणिक त्रुटियों पर पुनः प्रयास करें। false अक्षम करता है, या { enabled, maxRetries }
requestTimeoutMs30000अनुरोध की समय सीमा. 0 इसे अक्षम कर देता है।
onEventकोई नहींअवलोकन संबंधी घटनाएँ प्राप्त करता है, नीचे देखें
debugfalseप्रत्येक ईवेंट को console.debug('[aurabase]', event) के साथ प्रिंट भी करें
refuseServiceRoleInBrowsertrueजब service_role कुंजी ब्राउज़र तक पहुंचती है तो फेंक दें

सर्वर-साइड रेंडरिंग के लिए, Next.js ऐप राउटर और SSR में वर्णित कुकी-आधारित क्लाइंट का उपयोग करें।

#
त्रुटियाँ

3. त्रुटि वस्तु

प्रत्येक कॉल { data, error } लौटाती है और कभी थ्रो नहीं करती। जब यह विफल हो जाता है, error एक AuraError है:

errors.tstypescript
import { isAuraError } from '@aurabase/aurabase-js'

const { data, error } = await aura.db.from('posts').select('*')
if (error) {
  console.log(error.status)  // क्लाइंट पर विफलता होने पर 500, या 0
  console.log(error.code)    // 'आंतरिक', 'टाइमआउट', 'नेटवर्क_त्रुटि', ...
  console.log(error.message) // पठनीय मानव
  console.log(error.details) // सर्वर से error.request_id सहित कच्चा शरीर
  isAuraError(error)         // सत्य
}

एक वास्तविक असफल कॉल वापस आई:

error.detailsjson
{ "error": { "code": "INTERNAL", "message": "boom", "request_id": "req-123" } }
मैदानअर्थ
statusHTTP स्थिति. 0 का अर्थ है कि विफलता किसी भी प्रतिक्रिया से पहले हुई: नेटवर्क, टाइमआउट, या क्लाइंट द्वारा इनकार।
codeएक स्थिर पहचानकर्ता. सर्वर कोड अपना मूल्य बनाए रखते हैं; क्लाइंट नीचे दिए गए कोड जोड़ता है.
messageएक पठनीय व्याख्या
detailsकच्ची प्रतिक्रिया निकाय
retryAfterप्रतीक्षा करने के लिए सेकंड, Retry-After हेडर से, 429 पर
isNotFound, isUnauthorized, isForbidden, isRateLimitedstatus पर शॉर्टकट

क्लाइंट द्वारा स्वयं निर्मित कोड (स्थिति 0): timeout, network_error, invalid_response (एक सफलता जिसका मुख्य भाग JSON नहीं है), no_session, refresh_discarded, invalid_path, invalid_body। प्रमाणीकरण invalid_credentials, weak_password, email_already_in_use, user_not_found, invalid_otp, session_expired, session_revoked और rate_limit_exceeded जैसे कोड जोड़ता है। एक 429 हमेशा rate_limit_exceeded रखता है।

जब आपको मूल्य की आवश्यकता हो तो error के बजाय data का परीक्षण करें। कुछ कॉल सामग्री (204) के बिना सफल होती हैं, और फिर data और error दोनों null हैं।

#
लचीलापन

4. पुनः प्रयास और समयबाह्य

पुनः प्रयास करें। क्लाइंट स्वचालित रूप से केवल तभी अनुरोध पुनः प्रयास करता है जब ये सभी रुक जाते हैं:

  • विधि GET या HEAD है (एक POST, PUT, PATCH या DELETE को कभी दोबारा नहीं चलाया जाता है, इसलिए कुछ भी दो बार नहीं चलता है);
  • प्रतिक्रिया स्थिति है 408, 429, 502, 503 या 504, या नेटवर्क विफल;
  • 3 से कम पुनः प्रयास हुए हैं.

विलंब 0 और min(500 ms × 2^attempt, 10 s) के बीच यादृच्छिक है। एक Retry-After हेडर इस पर जीत हासिल करता है, जिसकी सीमा 60 सेकंड है। पुन: प्रयास किए गए अनुरोधों में X-Retry-Count हेडर होता है। टाइमआउट का पुन: प्रयास नहीं किया जाता है.

उस सर्वर के विरुद्ध मापा गया जिसने 503 का दो बार उत्तर दिया, फिर 200:

text
GET  /flaky   590 ms  { data: [...] }          events: retry#1:503, retry#2:503
POST /flaky     5 ms  { error: SERVICE_UNAVAILABLE }   (not retried)
GET  /flaky     1 ms  { error: SERVICE_UNAVAILABLE }   with retry: false

टाइमआउट। एक अनुरोध जिसका requestTimeoutMs (डिफ़ॉल्ट रूप से 30 सेकंड) के भीतर कोई उत्तर नहीं मिलता है, status: 0 और code: 'timeout' के साथ समाप्त होता है। बॉडी को पढ़ना उसी सीमा से बंधा हुआ है, इसलिए एक सर्वर जो हेडर भेजता है और फिर रुक जाता है वह कॉल को हैंग नहीं कर सकता है। 400 एमएस की सीमा के साथ एक सर्वर से अनुरोध जिसने कभी उत्तर नहीं दिया, 405 एमएस के बाद त्रुटि लौटा दी।

दो मामले इस सीमा का उपयोग नहीं करते क्योंकि वे अपना स्वयं का प्रबंधन करते हैं: एक कॉल जहां आप AbortSignal पास करते हैं, और अपलोड करते हैं। फ़ंक्शन अपने स्वयं के timeout विकल्प का उपयोग करते हैं, त्रुटियां, टाइमआउट और पुनः प्रयास देखें।

#
observability

5. ग्राहक का निरीक्षण करें

onEvent को ग्राहक द्वारा किए गए प्रत्येक उल्लेखनीय कार्य के लिए एक ईवेंट प्राप्त होता है। यह कभी भी किसी अनुरोध को विफल नहीं करता है: आपके हुक द्वारा फेंके गए अपवाद को अनदेखा कर दिया जाता है।

kindखेतकब
retryattempt, status?, urlपुनः प्रयास करने से पहले
timeouturlएक अनुरोध हिट requestTimeoutMs
refresh-successकोई नहींएक सत्र ताज़ा सफल हुआ
refresh-discardedreasonइस बीच सत्र बदल जाने के कारण रिफ्रेश हटा दिया गया
jwks-fetch-failedbaseUrlहस्ताक्षर कुंजियाँ प्राप्त नहीं की जा सकीं (स्थानीय टोकन जाँच)
storage-blockedopब्राउज़र ने स्टोरेज एक्सेस से इनकार कर दिया
observe.tstypescript
const aura = createClient(url, key, {
  onEvent: (e) => metrics.increment(`aurabase.${e.kind}`),
})

ईवेंट में URL की क्वेरी स्ट्रिंग और फ़्रैगमेंट हटा दिए जाते हैं, क्योंकि उनमें रहस्य (?apikey=, हस्ताक्षरित लिंक) हो सकते हैं।

#
सत्र

6. सत्र और टोकन

  • क्लाइंट प्रत्येक अनुरोध पर apikey भेजता है, और उपयोगकर्ता के साइन इन करने के बाद Authorization: Bearer <access token> भेजता है।
  • 30 सेकंड से कम समय शेष रहने पर यह एक्सेस टोकन को रीफ्रेश करता है। समवर्ती रिफ्रेश को एक में मिला दिया जाता है, इसलिए घूमने वाले रिफ्रेश टोकन का उपयोग एक बार किया जाता है।
  • एक 401 अनुरोध के एक रिफ्रेश और एक रीप्ले को ट्रिगर करता है, फिर रुक जाता है।
  • एक ब्राउज़र में, रिफ्रेश को सभी टैब में समन्वित किया जाता है।
  • aura.auth.onAuthStateChange(callback) आपको SIGNED_IN, SIGNED_OUT, TOKEN_REFRESHED, USER_UPDATED और MFA_CHALLENGE के बारे में बताता है। प्रामाणिक मार्गदर्शिका देखें।