مكتبة Node.js (Node SDK)
مكتبة Node.js (Node SDK)
حزمة @navvo/sdk الرسمية هي عميل من جهة الخادم بلغة TypeScript/JavaScript
لخدمة Navvo على الويب. وهي مكتوبة بأنواع محدّدة، وتعيد المحاولة تلقائيًا، وبلا
تبعيات وقت التشغيل — تستخدم دالة fetch المدمجة (Node 18+). تأتي ببناء مزدوج
ESM + CJS مع أنواع .d.ts كاملة. لا تحتوي على واجهة خرائط ولا عرض بلاطات
— لعرض خريطة في المتصفح استخدم خرائط Navvo.
يتطلّب: Node 18+ · عنوان الأساس: https://navvo.io/api/v1
التثبيت
npm install @navvo/sdk
# أو: pnpm add @navvo/sdk / yarn add @navvo/sdk
المصادقة
تُرسَل كل طلبات الاستدعاء عبر ترويسة x-api-key. يُقرأ المفتاح من متغيّر البيئة
NAVVO_API_KEY افتراضيًا، أو مرّره صراحةً:
import { NavvoClient } from "@navvo/sdk";
const navvo = NavvoClient.fromEnv(); // يستخدم $NAVVO_API_KEY
const navvo2 = new NavvoClient({ apiKey: "nvvo_your_key_here" });
لا تضع المكتبة المفتاح في الرابط أبدًا — باستثناء styleUrl() التي تبني
رابط نمط خريطة يُجلب من المتصفح، حيث يجب تمرير المفتاح كـ ?api_key= (لا يمكن
للمتصفحات إضافة ترويسات على طلبات النمط/البلاطات).
بداية سريعة
import { NavvoClient } from "@navvo/sdk";
const navvo = new NavvoClient();
// ترميز جغرافي أمامي — تُحوَّل الإحداثيات النصية إلى أرقام تلقائيًا
const hits = await navvo.geocode("مستشفى العبدلي، عمّان", { limit: 5 });
console.log(hits[0].lat, hits[0].lng, hits[0].displayName);
// خطّط مسارًا — تمرّر { lat, lng } والمكتبة تُسلسل lon/lat على الشبكة
const plan = await navvo.route({
locations: [
{ lat: 31.95, lng: 35.91, name: "A" },
{ lat: 31.99, lng: 35.95, name: "B" },
],
costing: "auto",
});
const trip = plan.engine?.data?.trip;
console.log("الوقت المتوقّع بالثواني:", trip?.summary?.time);
// فُكّ خطّ المرحلة (polyline6) إلى نقاط
const line = NavvoClient.decodePolyline(trip?.legs?.[0]?.shape ?? "");
// بيانات حيّة وفق الظروف
const wx = await navvo.weatherPoint(31.95, 35.91);
const inc = await navvo.incidents({ bbox: { west: 35.85, south: 31.9, east: 35.99, north: 31.99 }, limit: 10 });
الإحداثيات — لن تنقلب أبدًا
تمرّر النقاط دائمًا كـ { lat, lng } (وهو LatLng). تتولّى المكتبة كل اختلافات
صيغة الشبكة: { lon, lat } لـ route()/trafficRoute()، و{ lat, lon }
لحمولات تمرير المسارات، ومعاملات lat/lon منفصلة للترميز العكسي،
وwest,south,east,north لـ BBox، و[lng, lat] لـ GeoJSON، وصيغة WKT
POINT(lng lat) لمركز المكان (فُكّها عبر parseWktPoint(place.center) أو
NavvoClient.routeTargetFor(place)).
إعادة المحاولة والأخطاء
تُعاد المحاولة على الأعطال العابرة (5xx، 408، 429/الحصّة، انقطاعات الشبكة)
بتراجع أُسّي مع تشويش كامل، مع احترام Retry-After؛ ولا يُعاد على أخطاء العميل
(400/401/403/404). كل الأخطاء ترث من NavvoError:
import {
NavvoRateLimitError,
NavvoForbiddenError,
NavvoServiceUnavailableError,
} from "@navvo/sdk";
try {
const r = await navvo.geocode("مستشفى العبدلي، عمّان");
} catch (e) {
if (e instanceof NavvoRateLimitError) {
console.warn("تجاوز الحدّ، أعد المحاولة بعد", e.retryAfter, "ثانية");
} else if (e instanceof NavvoForbiddenError) {
console.error("مشكلة نطاق/حصّة:", e.reason ?? e.message);
} else if (e instanceof NavvoServiceUnavailableError) {
console.error("محرّك الترميز معطّل مؤقتًا — استخدم بديلًا");
} else {
throw e;
}
}
يُفكّ غلاف الترميز/المسارات ({ provider, available, data }) من أجلك تلقائيًا —
ويصير الجسم available:false خطأً من نوع NavvoServiceUnavailableError —
ويُعيد slug مكان غير معروف القيمة null (قيمة فارغة ناعمة، وليست خطأً).
ألغِ أي استدعاء عبر AbortSignal:
const ac = new AbortController();
const p = navvo.list({ category: "cafe" }, { signal: ac.signal });
setTimeout(() => ac.abort(), 1000);
خريطة الدوال
| المجال | الدوال |
|---|---|
| البلاطات والإعداد | styles, styleUrl, mapConfig |
| البحث والترميز | search, geocode, reverseGeocode, geocodeBatch, reverseGeocodeBatch |
| الأماكن | list, iterate, place, thumb, placeCategories, facets, hours, popularTimes, attributes, reviewsSummary, photos, nearby, reachable |
| المسارات | route, simpleRoute, matrix, isochrone, mapMatch, routingOptimize, routingProfiles |
| التحسين | optimizeHealth, optimize, reoptimize, binpack, roster, submitJob, job, waitForJob |
| حركة المرور والحوادث | trafficRoute, trafficSummary, incidents, incidentTypes, reportIncident, roadEdits, routeRisk |
| الطقس وجودة الهواء | weatherPoint, weatherForecast, weatherCities, airQualityCities |
| الشحن الكهربائي والنقل | evStations, transitStops, gbfs |
تقابل كل دالة نقطة النهاية الموثّقة في مرجع الواجهة. تُعيد
geocode كائنات بأنواع محدّدة مع تحليل الحقول الشائعة والحفاظ على الحمولة الكاملة
في .raw. يتطلّب تحسين المسارات (optimize، submitJob، …) نطاق optimize
الاختياري؛ راجع تحسين المسارات.
مكتبة بايثون (Python SDK)
ثبّت واستخدم عميل بايثون الرسمي navvo لخدمات الترميز الجغرافي والمسارات والأماكن وحركة المرور والمزيد من جهة الخادم.
مكتبة Go (Go SDK)
ثبّت واستخدم عميل Go الرسمي github.com/navvo/navvo-go لخدمات الترميز الجغرافي والمسارات والأماكن وحركة المرور والمركبات الكهربائية والنقل العام والمزيد من جهة الخادم.