−25%

د Windows پر کلنۍ تادیه، تر ۳۱ اکتوبر. پلانونه وګورئ

EQVPS
پیل وکړئ

په ۵ دقیقو کې د sandbox لپاره TypeScript SDK: له npm i @eqvps/sdk څخه تر لومړي اجرا پورې

‎@eqvps/sdk نصب کړئ، له Node.js، Deno یا Bun څخه د Firecracker sandbox چالان کړئ، په هغه کې د Python، Node او shell کوډ وچلوئ، فایلونه ولېږدوئ او د اوږدې دندې پایله ژوندۍ وګورئ. شپږ ګامونه له هرې کرښې کوډ سره.

دا لارښود له JavaScript یا TypeScript څخه یو sandbox چلوي. تاسو به یو جلا Firecracker microVM چالان کړئ، په درې ژبو کوډ وچلوئ، فایلونه ولېږدوئ او د یوې اوږدې دندې پایله وګورئ. هر ګام یوه لنډه ټوټه کوډ ده.

تاسو Node.js 18+‎ (یا Deno، یا Bun) او یو EQVPS حساب ته اړتیا لرئ.

۱. ټوکن واخلئ

SDK د حساب په یوه عادي ټوکن تصدیق کوي. د حساب نښلول پاڼه ښيي چې څنګه یې له ډشبورډ، API یا MCP سرور څخه واخلئ.

export EQVPS_API_KEY="your-token"

بې بیلانسه نوی حساب کله چې لومړی ځل sandbox جوړوي، د sandbox لپاره $1 کریډیټ ترلاسه کوي. دا د دې لارښود لپاره څو ځله بس دی.

۲. SDK نصب کړئ

npm i @eqvps/sdk

بېلګې د ES ماډیولونه او د لوړې کچې await کاروي. هغه د .mjs فایلونو په توګه خوندي کړئ، یا د .ts په توګه یې خوندي او په npx tsx یې وچلوئ.

۳. sandbox چالان کړئ او کوډ وچلوئ

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);
});

پایله د sandbox پېژند (sb_ او نور ۲۴ توري) دی، بیا 0 3.12.x. کله چې callback پای ته ورسېږي، Sandbox.with sandbox ړنګوي، حتی که تېروتنه وغورځوي.

ډیفالټ ژبه 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 صفر وي او کمانډ خپلې وخت پولې ته نه وي رسېدلی.

۴. د shell کمانډونه او کڅوړې

exec د shell متن یا د argv لړۍ مني. sandbox انټرنیټ ته لاسرسی لري، نو د 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);
});

یو همغږی غږ تر ډېره ۵۵ ثانیې دوام کوي. هر څه چې اوږد وي، شالید دندې ته ځي (ګام ۶).

۵. فایلونه

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 محدود دی.

۶. له ژوندۍ پایلې سره اوږدې دندې

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
});

دنده سمدستي راګرځي او د ۵۵ ثانیو پوله نه لري. wait په ډیفالټ ډول هرې ۲ ثانیې ګوري (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 لارښود کې دي.

د دې لارښود لګښت

هره بېلګه یو څو ثانیې ژوندۍ وه او د لږ تر لږه ۶۰ ثانیو له مخې بل شوه: په small کې $0.00055، په standard کې $0.0011. د ګام ۶ دنده په standard کې شاوخوا ۱۰۰ ثانیې وچلېده، نږدې $0.002. ټول یوځای له یوه سنټ ډېر لږ دي. د بیو بشپړ لړلیک په د sandbox پولې او بلینګ کې دی.

راتلونکي ګامونه

پوښتنې

‎@eqvps/sdk د کومو چاپېریالونو ملاتړ کوي؟

Node.js 18 او نوي، Deno او Bun. هېڅ تړاو نه لري او جوړ شوی fetch کاروي، نو په براوزر کې هم چلېږي، خو د خپل حساب ټوکن د فرنټ‌اینډ په کوډ کې مه ږدئ.

که زما اپ په TypeScript کې وي، ایا sandbox کولی شي Python وچلوي؟

هو. ستاسو د اپ ژبه او د sandbox د کوډ ژبه یو له بله خپلواکې دي. run د language لپاره python، node یا bash مني، او exec هر shell کمانډ چلوي.

څنګه ډاډه شم چې sandbox ړنګېږي؟

Sandbox.with(options, fn) وکاروئ؛ کله چې fn پای ته ورسېږي یا تېروتنه وغورځوي، sandbox ړنګوي. په TypeScript 5.2 یا نوي کې کولی شئ await using sb = await Sandbox.create() هم ولیکئ.

کله چې کوډ ناکام شي run څه راګرځوي؟

یو ExecResult له غیر صفري exit_code او په stderr کې له تېروتنې سره. هېڅ شی نه غورځول کېږي. استثناوې یوازې د API په تېروتنو کې دي، لکه ناسم ټوکن یا تش بیلانس.

تبصرې

لا تبصرې نشته. لومړی اوسئ.

یوه تبصره پریږدئ

تبصرې د ښکاره کیدو مخکې اعتدال کیږي.