Skip to content
SEO Optimizer is live, Audit on page SEO and AI-search readiness. Try it free

الأحداث وSDK

SDK لـ JavaScript

عميل صغير محدد الأنواع لـ Node.js 18 وما بعده وDeno وBun. بلا اعتماديات: يستخدم fetch المدمج وWeb Crypto.

@scanverra/sdk في مرحلة المعاينة وقد تتغير واجهته. كل استدعاء طلب HTTP عادي، لذلك تشرح صفحات الواجهة طريقة العمل دونه.

التثبيت

أنشئ عميلًا واحدًا وأعد استخدامه.

shell
npm install @scanverra/sdk
javascript
import { Scanverra } from "@scanverra/sdk";

const scanverra = new Scanverra({
  apiKey: process.env.SCANVERRA_API_KEY,
  // baseUrl: "https://www.scanverra.com",  // optional
  // timeoutMs: 300_000,                     // optional, per request
});

تشغيل الفحوصات

ترد scans.audit() وscans.repo() بالتقرير المكتمل. وترد البقية فورًا بمعرّف؛ ويستعلم wait() حتى يجهز التقرير ويطلق خطأ إن فشل الفحص.

javascript
// Answers with the finished report
const audit = await scanverra.scans.audit({ url: "https://example.com" });

// Answer with an id; wait() polls until the report is ready
const { scanId } = await scanverra.scans.security({ url: "https://example.com" });
const security = await scanverra.wait("security", scanId);

const { testId } = await scanverra.scans.browser({ url: "https://example.com" });
const browser = await scanverra.wait("browser", testId, { intervalMs: 5000 });

// Repo scans: owner and repo of a connected account
const repo = await scanverra.scans.repo({ owner: "acme", repo: "storefront", async: true });
const repoReport = await scanverra.wait("repo", repo.scanId);

قراءة الخصائص

الدرجات والمشكلات الموحّدة والخطوات التالية لكل منتج.

javascript
const { properties } = await scanverra.properties.list();
for (const p of properties) console.log(p.name, p.score, p.openTasks);

const detail = await scanverra.properties.get(properties[0].id);
const critical = detail.issues.filter((i) => i.severity === "critical");

الاشتراك في الأحداث

أنشئ خطاف REST لأي حدث، ثم تحقق من توقيع كل تسليم باستخدام verifyWebhook. يرفض التسليمات الأقدم من خمس دقائق.

javascript
const hook = await scanverra.hooks.create({
  event: "remediation.task_created",
  url: "https://hooks.example.com/scanverra",
});
// Store hook.secret: it is shown only once.

// In your receiver, with the raw request body:
import { verifyWebhook } from "@scanverra/sdk";

const ok = await verifyWebhook({
  secret: process.env.SCANVERRA_HOOK_SECRET,
  body: rawBody,
  timestamp: req.headers["x-scanverra-timestamp"],
  signature: req.headers["x-scanverra-signature"],
});
if (!ok) return res.status(401).end();

الأخطاء

كل فشل يطلق ScanverraError مع status وcode وmessage مقروءة وbody الرد. إذا لم يصل أي رد تكون قيمة status هي 0 وقيمة code هي network_error أو timeout.

javascript
import { ScanverraError } from "@scanverra/sdk";

try {
  await scanverra.scans.audit({ url: "https://example.com" });
} catch (err) {
  if (!(err instanceof ScanverraError)) throw err;
  if (err.code === "SCAN_COOLDOWN") console.log("Try again later:", err.message);
  else if (err.status === 0 || err.status >= 500) console.log("Retry with backoff:", err.code ?? err.status);
  else throw err; // 4xx: fix the request (see /docs/errors)
}

المرجع

scans.audit(body)Promise<report>اختيارييشغّل تدقيق موقع ويعيد التقرير. مرّر async: true لتحصل على reportId فورًا.
scans.security(body)Promise<{ scanId }>اختيارييبدأ فحص أمان.
scans.browser(body)Promise<{ testId }>اختيارييبدأ تدقيق متصفح. مرّر credentialId لاختبار صفحات تتطلب تسجيل الدخول.
scans.seo(body)Promise<{ scanId }>اختيارييبدأ تحليل تحسين محركات البحث.
scans.repo(body)Promise<{ scanId }>اختيارييفحص مستودعًا مرتبطًا.
results.<tool>(id)Promise<ScanResult>اختيارييقرأ فحصًا بمعرّفه: audit أو security أو browser أو seo أو repo.
wait(tool, id, options?)Promise<ScanResult>اختيارييستعلم عن دالة results الخاصة بالأداة حتى ينتهي الفحص. الخيارات: intervalMs (4000) وtimeoutMs (600000).
properties.list() / get(id)Promise<...>اختيارييعرض الخصائص أو يقرأ واحدة بمشكلاتها وخطواتها التالية.
hooks.list() / create() / delete(id) / sample(event)Promise<...>اختيارييدير خطافات REST. يعيد create() سر التوقيع مرة واحدة فقط.
verifyWebhook(input)Promise<boolean>اختيارييتحقق من X-Scanverra-Signature مقابل الجسم الخام والطابع الزمني.