−25%

Windows के सालाना भुगतान पर, 31 अक्टूबर तक। प्लान देखें

EQVPS
शुरू करें

5 मिनट में सैंडबॉक्स के लिए TypeScript SDK: npm i @eqvps/sdk से पहले रन तक

@eqvps/sdk इंस्टॉल करें, Node.js, Deno या Bun से Firecracker सैंडबॉक्स चालू करें, उसमें Python, Node और shell कोड चलाएँ, फ़ाइलें भेजें और लंबे काम का आउटपुट लाइव देखें। हर लाइन कोड के साथ छह स्टेप।

यह गाइड JavaScript या TypeScript से सैंडबॉक्स चलाती है। आप एक अलग-थलग Firecracker microVM चालू करेंगे, तीन भाषाओं में कोड चलाएँगे, फ़ाइलें भेजेंगे और लंबे काम का आउटपुट देखेंगे। हर स्टेप एक छोटा कोड का टुकड़ा है।

आपको Node.js 18+ (या Deno, या Bun) और एक EQVPS अकाउंट चाहिए।

1. टोकन लें

SDK सामान्य अकाउंट टोकन से ऑथेंटिकेट करता है। इसे डैशबोर्ड, API या MCP सर्वर से कैसे पाएँ, यह अकाउंट जोड़ना पेज पर है।

export EQVPS_API_KEY="your-token"

बिना बैलेंस वाला नया अकाउंट जब पहली बार सैंडबॉक्स बनाता है, तो उसे $1 सैंडबॉक्स क्रेडिट मिलता है। यह इस गाइड के लिए कई बार काफ़ी है।

2. SDK इंस्टॉल करें

npm i @eqvps/sdk

उदाहरण ES मॉड्यूल और टॉप-लेवल await इस्तेमाल करते हैं। इन्हें .mjs फ़ाइलों के रूप में सेव करें, या .ts के रूप में सेव करके npx tsx से चलाएँ।

3. सैंडबॉक्स चालू करें और कोड चलाएँ

import { Sandbox } from "@eqvps/sdk";

await Sandbox.with({ tariff: "small" }, async (sb) => {
  console.log(sb.id);
  const r = await sb.run("import platform; print(platform.python_version())");
  console.log(r.exit_code, r.stdout);
});

आउटपुट सैंडबॉक्स की id (sb_ और 24 और अक्षर) है, फिर 0 3.12.x। callback खत्म होने पर Sandbox.with सैंडबॉक्स हटा देता है, भले ही वह त्रुटि फेंके।

डिफ़ॉल्ट भाषा Python है। बाकी दो बस एक ऑप्शन दूर हैं:

await Sandbox.with({}, async (sb) => {
  const js = await sb.run("console.log(process.version)", { language: "node" });
  const sh = await sb.run("uname -r && nproc", { language: "bash" });
  console.log(js.stdout, sh.stdout);
});

फ़ेल होने वाली स्क्रिप्ट कुछ नहीं फेंकती। r.ok जाँचें, जो तब true होता है जब exit_code 0 हो और कमांड टाइमआउट तक न पहुँची हो।

4. shell कमांड और पैकेज

exec shell स्ट्रिंग या argv ऐरे लेता है। सैंडबॉक्स इंटरनेट से जुड़ सकता है, इसलिए npm और pip इंस्टॉल काम करते हैं:

await Sandbox.with({ tariff: "small" }, async (sb) => {
  await sb.exec("mkdir -p /root/app && cd /root/app && npm init -y && npm i lodash", { timeout: 55 });
  const r = await sb.exec(["node", "-e", "console.log(require('/root/app/node_modules/lodash').VERSION)"]);
  console.log(r.stdout);
});

एक सिंक्रोनस कॉल ज़्यादा से ज़्यादा 55 सेकंड चलती है। इससे लंबा कुछ भी बैकग्राउंड टास्क में जाता है (स्टेप 6)।

5. फ़ाइलें

await Sandbox.with({}, async (sb) => {
  await sb.upload("/root/input.json", JSON.stringify({ values: [3, 5, 8] }));
  await sb.run("import json; d = json.load(open('/root/input.json')); open('/root/out.txt', 'w').write(str(sum(d['values'])))");
  console.log(await sb.downloadText("/root/out.txt"));   // 16
});

upload स्ट्रिंग या Uint8Array लेता है। download Uint8Array लौटाता है, downloadText स्ट्रिंग। एक ट्रांसफ़र 5 MB तक सीमित है।

6. लाइव आउटपुट वाले लंबे काम

await Sandbox.with({ tariff: "standard" }, async (sb) => {
  const task = await sb.exec("for i in 1 2 3 4 5; do echo step $i; sleep 20; done", { background: true });
  const res = await task.wait({ onOutput: (out) => process.stdout.write(out) });
  console.log(res.state, res.exit_code);   // done 0
});

टास्क तुरंत लौट आता है और इसमें 55 सेकंड की सीमा नहीं है। wait डिफ़ॉल्ट रूप से हर 2 सेकंड में जाँचता है (pollIntervalMs से बदलें)। task.kill() इसे रोकता है; sb.task(id) किसी दूसरे प्रोसेस से फिर जुड़ता है।

त्रुटियाँ

import { Sandbox, InsufficientBalanceError, RateLimitError } from "@eqvps/sdk";

try {
  await Sandbox.with({}, async (sb) => console.log((await sb.run("print(1)")).stdout));
} catch (e) {
  if (e instanceof InsufficientBalanceError) console.log("Top up the balance");
  else if (e instanceof RateLimitError) console.log("Busy, retry in", e.retryAfter);
  else throw e;
}

सर्वर Retry-After भेजे तो SDK खुद 429 और 503 को तीन बार तक दोबारा आज़माता है। सबसे आम 429 तब आता है जब एक अकाउंट पर एक साथ दो से ज़्यादा कमांड चलती हैं। सभी क्लास SDK संदर्भ में हैं।

इस गाइड का खर्च

हर उदाहरण कुछ सेकंड चला और न्यूनतम 60 सेकंड के हिसाब से बिल हुआ: small पर $0.00055, standard पर $0.0011। स्टेप 6 का काम standard पर लगभग 100 सेकंड चला, करीब $0.002। सब मिलाकर एक सेंट से बहुत कम। पूरी कीमत सूची सैंडबॉक्स की सीमाएँ और बिलिंग में है।

आगे क्या

सामान्य प्रश्न

@eqvps/sdk किन रनटाइम पर चलता है?

Node.js 18 और नए, Deno और Bun। इसकी कोई डिपेंडेंसी नहीं है और यह बिल्ट-इन fetch इस्तेमाल करता है, इसलिए ब्राउज़र में भी चलता है, लेकिन अपना अकाउंट टोकन फ़्रंटएंड कोड में न रखें।

अगर मेरा ऐप TypeScript में है तो क्या सैंडबॉक्स Python चला सकता है?

हाँ। आपके ऐप की भाषा और सैंडबॉक्स के कोड की भाषा का आपस में कोई लेना-देना नहीं। run में language python, node या bash हो सकती है, और exec कोई भी shell कमांड चलाता है।

कैसे पक्का करूँ कि सैंडबॉक्स हट जाए?

Sandbox.with(options, fn) इस्तेमाल करें; fn खत्म होने या त्रुटि फेंकने पर यह सैंडबॉक्स हटा देता है। TypeScript 5.2 या नए में await using sb = await Sandbox.create() भी लिख सकते हैं।

कोड फ़ेल होने पर run क्या लौटाता है?

शून्य से अलग exit_code और stderr में त्रुटि वाला ExecResult। कुछ फेंका नहीं जाता। exception सिर्फ़ API त्रुटियों पर आते हैं, जैसे गलत टोकन या खाली बैलेंस।

टिप्पणियाँ

अभी तक कोई टिप्पणी नहीं। पहले बनें।

एक टिप्पणी छोड़ें

टिप्पणियाँ दिखने से पहले मॉडरेट की जाती हैं।