स्क्रिप्टिंग
JSON आउटपुट, स्ट्रीम, एग्ज़िट कोड, एनवायरनमेंट वेरिएबल, और बिना निगरानी या CI में चलाना।
JSON आउटपुट
--json के साथ stdout में सिर्फ़ JSON होता है, दो स्पेस की इंडेंटेशन के साथ, नोट और प्रगति stderr पर रहते हैं, और कुछ भी पूछा नहीं जाता। सूची { items, hasMore, nextCursor } प्रिंट करती है, API ऑब्जेक्ट वैसा ही प्रिंट होता है जैसा API ने लौटाया, और हाथ से लिखी कमांड वह ऑब्जेक्ट प्रिंट करती है जिसका वर्णन उसकी मदद में है।
openemail whoami --json | jq -r .workspaceIdopenemail emails list --status failed --json | jq -r ".items[].id"एरर stderr पर JSON की एक लाइन के रूप में जाता है, और एग्ज़िट कोड वही होता है जो किसी व्यक्ति को मिलता:
{"error":{"type":"permission_error","code":"insufficient_scope","message":"This API key does not have the domains:write scope.","hint":"The credential is missing a scope this call needs. Use a key that has it, or sign in again with openemail login.","next":null,"status":403,"requestId":"req_7Hc2kQ","param":null,"docUrl":"https://openemail.uk/docs/api/errors#insufficient_scope","exitCode":4}}| फ़ील्ड | इसमें क्या है |
|---|---|
| type | API एरर टाइप, या CLI के अंदर की विफलता के लिए cli_error, network_error या internal_error |
| code | एक स्थिर कोड, जैसे insufficient_scope, not_signed_in या unknown_flag |
| message | क्या ग़लत हुआ, एक वाक्य में |
| hint, next | क्या आज़माएँ, और आगे कौन-सी कमांड चलाएँ, या null |
| status, requestId, param, docUrl | API से, जब एरर वहीं से आया हो, वरना null |
| exitCode | वह एग्ज़िट कोड जिसके साथ प्रोसेस ख़त्म होता है |
स्ट्रीम
कुछ आउटपुट JSON ऑब्जेक्ट की स्ट्रीम होता है, हर लाइन में एक, ताकि पाइपलाइन हर आइटम को आते ही संभाल सके:
- रिसोर्स सूची
--allके साथ जब stdout टर्मिनल न हो, या--ndjsonके साथ।--max <n>उतने आइटम के बाद रुकता है। openemail temp watch --json, हर नए संदेश के लिए एक लाइन।openemail mcp serve, दोनों दिशाओं में हर लाइन में एक JSON-RPC संदेश।
openemail contacts list --all > contacts.ndjsonopenemail emails list --status failed --all --max 500 | jq -r .idएग्ज़िट कोड
| कोड | अर्थ |
|---|---|
| 0 | हो गया |
| 1 | अप्रत्याशित विफलता, सर्वर एरर, या असफल भेजना |
| 2 | उपयोग की ग़लती: ग़लत आर्ग्युमेंट, अनजानी कमांड या फ़्लैग, ऐसी वैल्यू या पुष्टि जो पूछी न जा सकी, या ऐसा ओरिजिन या पाथ जिस पर CLI क्रेडेंशियल नहीं भेजेगी |
| 3 | साइन इन नहीं है, या साइन-इन अस्वीकार हुआ, उसकी अवधि ख़त्म हो गई या कमांड चलते समय साइन आउट हो गया |
| 4 | अनुमति नहीं: कोई स्कोप या अनुमति कम है, ऐसा सत्यापन कोड जो पूछा न जा सका या रुका हुआ है, या API कुंजी वहाँ जहाँ ब्राउज़र साइन-इन चाहिए |
| 5 | नहीं मिला |
| 6 | मौजूदा स्थिति से टकराव |
| 7 | इनपुट अमान्य था |
| 8 | रेट लिमिट लगी, या AI कोटा ख़त्म हो गया |
| 9 | नेटवर्क विफल हुआ या टाइम आउट हो गया |
| 10 | रद्द: आपने कोई पुष्टि या प्रॉम्प्ट अस्वीकार किया |
| 130, 143 | Ctrl+C से, या SIGTERM से रोका गया |
एनवायरनमेंट वेरिएबल
| वेरिएबल | यह क्या करता है |
|---|---|
| OPENEMAIL_API_KEY | किसी भी सहेजी प्रोफ़ाइल की जगह इस्तेमाल होने वाली API कुंजी |
| OPENEMAIL_PROFILE | इस्तेमाल होने वाली सहेजी प्रोफ़ाइल |
| OPENEMAIL_BASE_URL | OPENEMAIL_API_KEY, --api-key और कोई क्रेडेंशियल न भेजने वाली कमांड के लिए API ओरिजिन। सहेजा गया साइन-इन सिर्फ़ उसी API पर जाता है जिसमें उसने साइन इन किया |
| OPENEMAIL_APP_URL | वेब ऐप ओरिजिन, साइन-इन, open और डॉक्यूमेंटेशन लिंक के लिए |
| OPENEMAIL_CONFIG_DIR | प्रोफ़ाइल और इनबॉक्स टोकन कहाँ रखे जाते हैं, सेट न हो तो ~/.openemail |
| OPENEMAIL_NO_UPDATE_CHECK | npm पर कभी नई रिलीज़ न देखें। OPENEMAIL_DISABLE_UPDATE_NOTICE भी यही करता है |
| NO_COLOR, FORCE_COLOR=0 | कोई रंग नहीं |
| CI | कभी प्रॉम्प्ट न करें, कभी ब्राउज़र न खोलें, कभी अपडेट न देखें। ज़्यादातर CI सेवाएँ इसके बिना भी पहचानी जाती हैं |
| VISUAL, EDITOR | वह एडिटर जो send और reply बॉडी के लिए खोलते हैं |
बिना निगरानी के चलाना
CLI सिर्फ़ तब प्रॉम्प्ट करती है जब stdin और stdout दोनों टर्मिनल हों, और --json, --no-input या CI में से कोई लागू न हो। वरना:
- कोई ज़रूरी वैल्यू न हो तो एग्ज़िट कोड
2के साथ रुकता है और देने वाला फ़्लैग बताता है। - विनाशकारी कमांड
Refusing to run unattended. Pass --yes to confirm.और एग्ज़िट कोड2के साथ रुकती है, जब तक आप--yesन दें। - जिस बदलाव को सत्यापन कोड चाहिए वह एग्ज़िट कोड
4के साथ रुकता है, क्योंकि उसे कोई टाइप नहीं कर सकता। API कुंजी इस्तेमाल करें, या पहलेopenemail verifyचलाएँ।
CI में
जॉब को सिर्फ़ ज़रूरी स्कोप वाली API कुंजी दें, उसे किसी सीक्रेट में रखें, और OPENEMAIL_API_KEY को उसे ले जाने दें। कुछ सहेजा नहीं जाता, कुछ पूछा नहीं जाता, और कोई अपडेट जाँच नहीं चलती।
- name: Tell the team env: OPENEMAIL_API_KEY: ${{ secrets.OPENEMAIL_API_KEY }} run: | npx -y @openemail/[email protected] send \ --from [email protected] \ --to [email protected] \ --subject "Deployed ${{ github.sha }}" \ --text "Build ${{ github.run_number }} is live." \ --idempotency-key "deploy-${{ github.run_id }}"ADDRESS=$(npx -y @openemail/[email protected] temp new --ttl 15)./signup-test.sh "$ADDRESS"npx -y @openemail/[email protected] temp watch --first --json | jq -r .snippetnpx -y @openemail/[email protected] temp delete --yesfailed=$(openemail emails list --status failed --json | jq ".items | length")test "$failed" -eq 0जिस भेजने को पाइपलाइन दोबारा आज़मा सकती है, उस पर --idempotency-key दें, और उसे उस चीज़ से बनाएँ जिसने भेजना ज़रूरी बनाया, जैसे रन ID। तब चरण दोबारा चलाने पर दो बार मेल भेजने के बजाय पहला भेजा हुआ लौटता है।