دا لارښود له 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 پولې او بلینګ کې دی.
راتلونکي ګامونه
- همدا په Python کې: په ۵ دقیقو کې د sandbox لپاره Python SDK.
- یو ماډل ونښلوئ او پرېږدئ چې خپل کوډ پخپله وچلوي: په sandbox کې ستاسو د اجنټ لومړۍ دنده.
- تعرفې او د $1 ازموینه: د sandbox پاڼه.
تبصرې
لا تبصرې نشته. لومړی اوسئ.