upadate
This commit is contained in:
@ -1,31 +1,32 @@
|
|||||||
require("dotenv").config({ path: "../.env" })
|
require("dotenv").config({ path: "../.env" });
|
||||||
const LibWinston = require("../library/LibWinston")
|
const LibWinston = require("../library/LibWinston");
|
||||||
const moment = require("moment")
|
const moment = require("moment");
|
||||||
const axios = require("axios").default
|
const axios = require("axios").default;
|
||||||
const url = require("url")
|
const url = require("url");
|
||||||
const request = require("../config/request")
|
const request = require("../config/request");
|
||||||
const GpsTracksModels = require("../models/GpsTracksModels")
|
const GpsTracksModels = require("../models/GpsTracksModels");
|
||||||
const RegionModels = require("../models/RegionModels")
|
const RegionModels = require("../models/RegionModels");
|
||||||
|
const { stringify } = require("flatted");
|
||||||
|
|
||||||
const schedulerName = process.env.REDIS_SCHEDULER_REVERSE_GEO
|
const schedulerName = process.env.REDIS_SCHEDULER_REVERSE_GEO;
|
||||||
const Logger = LibWinston.initialize(schedulerName)
|
const Logger = LibWinston.initialize(schedulerName);
|
||||||
|
|
||||||
const go = async () => {
|
const go = async () => {
|
||||||
try {
|
try {
|
||||||
Logger.log("info", `${schedulerName} running: ${moment().format("YYYY-MM-DD HH:mm:ss")}`)
|
Logger.log("info", `${schedulerName} running: ${moment().format("YYYY-MM-DD HH:mm:ss")}`);
|
||||||
// (async function() {
|
// (async function() {
|
||||||
try {
|
try {
|
||||||
let loop = process.env.SCHEDULE_REVERSE_GEO_MAX_LOOP
|
let loop = process.env.SCHEDULE_REVERSE_GEO_MAX_LOOP;
|
||||||
for (let x = 0; x < loop; x++) {
|
for (let x = 0; x < loop; x++) {
|
||||||
// let tracks = [];
|
// let tracks = [];
|
||||||
let tracks = await GpsTracksModels.get2ForReverseGeo(1)
|
let tracks = await GpsTracksModels.get2ForReverseGeo(1);
|
||||||
for (let i = 0; i < tracks.length; i++) {
|
for (let i = 0; i < tracks.length; i++) {
|
||||||
console.log("tracks[i] :", tracks[i].id, tracks[i].device_id, tracks[i].latitude, tracks[i].longitude)
|
console.log("tracks[i] :", tracks[i].id, tracks[i].device_id, tracks[i].latitude, tracks[i].longitude);
|
||||||
let now = moment().unix()
|
let now = moment().unix();
|
||||||
let updtData = {}
|
let updtData = {};
|
||||||
let respReverseGeo = null
|
let respReverseGeo = null;
|
||||||
try {
|
try {
|
||||||
const sameAddr = await GpsTracksModels.select2Address(tracks[i].latitude, tracks[i].longitude)
|
const sameAddr = await GpsTracksModels.select2Address(tracks[i].latitude, tracks[i].longitude);
|
||||||
|
|
||||||
if (sameAddr.length > 0) {
|
if (sameAddr.length > 0) {
|
||||||
let addrData = {
|
let addrData = {
|
||||||
@ -53,37 +54,44 @@ const go = async () => {
|
|||||||
log_reverse_geo: sameAddr[0].log_reverse_geo,
|
log_reverse_geo: sameAddr[0].log_reverse_geo,
|
||||||
crt: now,
|
crt: now,
|
||||||
crt_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
|
crt_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
|
||||||
}
|
};
|
||||||
GpsTracksModels.create2Address(addrData)
|
GpsTracksModels.create2Address(addrData);
|
||||||
updtData.stts_reverse_geo = GpsTracksModels.STTS_REVERSE_GEO_SC
|
updtData.stts_reverse_geo = GpsTracksModels.STTS_REVERSE_GEO_SC;
|
||||||
await GpsTracksModels.update2(tracks[i].id, updtData)
|
await GpsTracksModels.update2(tracks[i].id, updtData);
|
||||||
continue
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
let params = new url.URLSearchParams({
|
let params = new url.URLSearchParams({
|
||||||
lat: tracks[i].latitude,
|
lat: tracks[i].latitude,
|
||||||
lon: tracks[i].longitude,
|
lon: tracks[i].longitude,
|
||||||
format: "geojson",
|
format: "geojson",
|
||||||
})
|
});
|
||||||
//const axInstance = axios.create()
|
//const axInstance = axios.create()
|
||||||
const axInstance = axios.create({
|
const axInstance = axios.create({
|
||||||
proxy: {
|
proxy: {
|
||||||
host: process.env.PROXY_URL,
|
host: process.env.PROXY_URL,
|
||||||
port: process.env.PROXY_PORT, },
|
port: process.env.PROXY_PORT,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
axios.defaults.timeout = 10000
|
axios.defaults.timeout = 10000;
|
||||||
axios.defaults.crossDomain = true
|
axios.defaults.crossDomain = true;
|
||||||
// respReverseGeo = await axios({
|
// respReverseGeo = await axios({
|
||||||
// url: request.osm_reverse_geo.urlFull,
|
// url: request.osm_reverse_geo.urlFull,
|
||||||
// method: request.osm_reverse_geo.method,
|
// method: request.osm_reverse_geo.method,
|
||||||
// params: params,
|
// params: params,
|
||||||
// responseType: 'json',
|
// responseType: 'json',
|
||||||
// });
|
// });
|
||||||
|
// respReverseGeo = await axInstance.get(request.osm_reverse_geo.urlFull + "?" + params.toString(), {
|
||||||
|
// timeout: 10000,
|
||||||
|
// });
|
||||||
respReverseGeo = await axInstance.get(request.osm_reverse_geo.urlFull + "?" + params.toString(), {
|
respReverseGeo = await axInstance.get(request.osm_reverse_geo.urlFull + "?" + params.toString(), {
|
||||||
timeout: 10000,
|
timeout: 10000,
|
||||||
})
|
headers: {
|
||||||
console.log("respReverseGeo: ",respReverseGeo.data || null )
|
"User-Agent": "movana-fleet-management/1.0 (emirsyafmun@gmail.com)",
|
||||||
let respData = respReverseGeo.data || {}
|
},
|
||||||
|
});
|
||||||
|
console.log("respReverseGeo: ", respReverseGeo.data || null);
|
||||||
|
let respData = respReverseGeo.data || {};
|
||||||
if (respReverseGeo.status == 200) {
|
if (respReverseGeo.status == 200) {
|
||||||
if (respData.features.length < 1) {
|
if (respData.features.length < 1) {
|
||||||
GpsTracksModels.create2Address({
|
GpsTracksModels.create2Address({
|
||||||
@ -95,11 +103,11 @@ const go = async () => {
|
|||||||
log_reverse_geo: JSON.stringify(respData),
|
log_reverse_geo: JSON.stringify(respData),
|
||||||
crt: now,
|
crt: now,
|
||||||
crt_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
|
crt_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
|
||||||
})
|
});
|
||||||
updtData.stts_reverse_geo = GpsTracksModels.STTS_REVERSE_GEO_LOST
|
updtData.stts_reverse_geo = GpsTracksModels.STTS_REVERSE_GEO_LOST;
|
||||||
await GpsTracksModels.update2(tracks[i].id, updtData)
|
await GpsTracksModels.update2(tracks[i].id, updtData);
|
||||||
} else {
|
} else {
|
||||||
let respAddr = respData.features[0].properties.address
|
let respAddr = respData.features[0].properties.address;
|
||||||
let addrData = {
|
let addrData = {
|
||||||
device_id: tracks[i].device_id,
|
device_id: tracks[i].device_id,
|
||||||
master_id: tracks[i].id,
|
master_id: tracks[i].id,
|
||||||
@ -118,37 +126,37 @@ const go = async () => {
|
|||||||
log_reverse_geo: respData.features[0].properties ? JSON.stringify(respData.features[0].properties) : null,
|
log_reverse_geo: respData.features[0].properties ? JSON.stringify(respData.features[0].properties) : null,
|
||||||
crt: now,
|
crt: now,
|
||||||
crt_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
|
crt_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
|
||||||
}
|
};
|
||||||
if (respAddr.state || respAddr.city) {
|
if (respAddr.state || respAddr.city) {
|
||||||
addrData.state_text = respAddr.region || respAddr.state || respAddr.state_district || respAddr.county || respAddr.city || ""
|
addrData.state_text = respAddr.region || respAddr.state || respAddr.state_district || respAddr.county || respAddr.city || "";
|
||||||
addrData.state_text = addrData.state_text ? addrData.state_text.toUpperCase() : addrData.state_text || null
|
addrData.state_text = addrData.state_text ? addrData.state_text.toUpperCase() : addrData.state_text || null;
|
||||||
addrData.state_text = addrData.state_text || null
|
addrData.state_text = addrData.state_text || null;
|
||||||
}
|
}
|
||||||
if (respAddr.city_district || respAddr.city) {
|
if (respAddr.city_district || respAddr.city) {
|
||||||
addrData.city_text = respAddr.city_district || respAddr.city || ""
|
addrData.city_text = respAddr.city_district || respAddr.city || "";
|
||||||
addrData.city_text = addrData.city_text ? addrData.city_text.toUpperCase() : addrData.city_text || null
|
addrData.city_text = addrData.city_text ? addrData.city_text.toUpperCase() : addrData.city_text || null;
|
||||||
addrData.city_text = addrData.city_text || null
|
addrData.city_text = addrData.city_text || null;
|
||||||
}
|
}
|
||||||
if (respAddr.suburb || respAddr.subdistrict) {
|
if (respAddr.suburb || respAddr.subdistrict) {
|
||||||
addrData.district_text = respAddr.suburb || respAddr.subdistrict || respAddr.subdivision || ""
|
addrData.district_text = respAddr.suburb || respAddr.subdistrict || respAddr.subdivision || "";
|
||||||
addrData.district_text = addrData.district_text ? addrData.district_text.toUpperCase() : addrData.district_text || null
|
addrData.district_text = addrData.district_text ? addrData.district_text.toUpperCase() : addrData.district_text || null;
|
||||||
addrData.district_text = addrData.district_text || null
|
addrData.district_text = addrData.district_text || null;
|
||||||
}
|
}
|
||||||
if (respAddr.village) {
|
if (respAddr.village) {
|
||||||
addrData.village_text = respAddr.village || respAddr.neighbourhood || ""
|
addrData.village_text = respAddr.village || respAddr.neighbourhood || "";
|
||||||
addrData.village_text = addrData.village_text ? addrData.village_text.toUpperCase() : addrData.village_text || null
|
addrData.village_text = addrData.village_text ? addrData.village_text.toUpperCase() : addrData.village_text || null;
|
||||||
addrData.village_text = addrData.village_text || null
|
addrData.village_text = addrData.village_text || null;
|
||||||
}
|
}
|
||||||
if (respAddr.amenity || respAddr.road || respAddr.city_block) {
|
if (respAddr.amenity || respAddr.road || respAddr.city_block) {
|
||||||
addrData.streets = ""
|
addrData.streets = "";
|
||||||
addrData.streets += respAddr.amenity ? respAddr.amenity + ", " : ""
|
addrData.streets += respAddr.amenity ? respAddr.amenity + ", " : "";
|
||||||
addrData.streets += respAddr.road ? respAddr.road + ", " : ""
|
addrData.streets += respAddr.road ? respAddr.road + ", " : "";
|
||||||
addrData.streets += respAddr.house_number ? respAddr.house_number + ", " : ""
|
addrData.streets += respAddr.house_number ? respAddr.house_number + ", " : "";
|
||||||
addrData.streets += respAddr.house_name ? respAddr.house_name + ", " : ""
|
addrData.streets += respAddr.house_name ? respAddr.house_name + ", " : "";
|
||||||
addrData.streets += respAddr.city_block ? respAddr.city_block + ", " : ""
|
addrData.streets += respAddr.city_block ? respAddr.city_block + ", " : "";
|
||||||
addrData.streets += addrData.streets || null
|
addrData.streets += addrData.streets || null;
|
||||||
if (addrData.streets) {
|
if (addrData.streets) {
|
||||||
addrData.streets = encodeURIComponent(addrData.streets.slice(0, -2))
|
addrData.streets = encodeURIComponent(addrData.streets.slice(0, -2));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,57 +165,57 @@ const go = async () => {
|
|||||||
nmKotamadyaKel: addrData.city_text,
|
nmKotamadyaKel: addrData.city_text,
|
||||||
nmKecamatanKel: addrData.district_text,
|
nmKecamatanKel: addrData.district_text,
|
||||||
nmKelurahan: addrData.village_text,
|
nmKelurahan: addrData.village_text,
|
||||||
})
|
});
|
||||||
if (byAll.length > 1) {
|
if (byAll.length > 1) {
|
||||||
addrData.state_id = byAll[0].kodeProv
|
addrData.state_id = byAll[0].kodeProv;
|
||||||
addrData.city_id = byAll[0].kodeKab
|
addrData.city_id = byAll[0].kodeKab;
|
||||||
addrData.district_id = byAll[0].kodeKec
|
addrData.district_id = byAll[0].kodeKec;
|
||||||
addrData.village_id = byAll[0].kodeKel
|
addrData.village_id = byAll[0].kodeKel;
|
||||||
}
|
}
|
||||||
|
|
||||||
let byKel = await RegionModels.whereLike({
|
let byKel = await RegionModels.whereLike({
|
||||||
nmKelurahan: addrData.village_text,
|
nmKelurahan: addrData.village_text,
|
||||||
})
|
});
|
||||||
if (byAll.length < 1 && byKel.length > 0) {
|
if (byAll.length < 1 && byKel.length > 0) {
|
||||||
addrData.state_id = byKel[0].kodeProv
|
addrData.state_id = byKel[0].kodeProv;
|
||||||
addrData.city_id = byKel[0].kodeKab
|
addrData.city_id = byKel[0].kodeKab;
|
||||||
addrData.district_id = byKel[0].kodeKec
|
addrData.district_id = byKel[0].kodeKec;
|
||||||
addrData.village_id = byKel[0].kodeKel
|
addrData.village_id = byKel[0].kodeKel;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addrData.state_id === null) {
|
if (addrData.state_id === null) {
|
||||||
let byPr = await RegionModels.whereLike({ nmProvinsiKel: addrData.state_text })
|
let byPr = await RegionModels.whereLike({ nmProvinsiKel: addrData.state_text });
|
||||||
if (byPr.length > 0) {
|
if (byPr.length > 0) {
|
||||||
addrData.state_id = byPr[0].kodeProv
|
addrData.state_id = byPr[0].kodeProv;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addrData.state_id !== null && addrData.city_id === null) {
|
if (addrData.state_id !== null && addrData.city_id === null) {
|
||||||
let byKt = await RegionModels.whereLike({ nmKotamadyaKel: addrData.city_text })
|
let byKt = await RegionModels.whereLike({ nmKotamadyaKel: addrData.city_text });
|
||||||
if (byKt.length > 0) {
|
if (byKt.length > 0) {
|
||||||
addrData.city_id = byKt[0].kodeKab
|
addrData.city_id = byKt[0].kodeKab;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addrData.state_id !== null && addrData.city_id !== null && addrData.district_id === null) {
|
if (addrData.state_id !== null && addrData.city_id !== null && addrData.district_id === null) {
|
||||||
let byKc = await RegionModels.whereLike({ nmKecamatanKel: addrData.district_text })
|
let byKc = await RegionModels.whereLike({ nmKecamatanKel: addrData.district_text });
|
||||||
if (byKc.length > 0) {
|
if (byKc.length > 0) {
|
||||||
addrData.district_id = byKc[0].kodeKec
|
addrData.district_id = byKc[0].kodeKec;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addrData.state_id !== null && addrData.city_id !== null && addrData.district_id !== null && addrData.village_id === null) {
|
if (addrData.state_id !== null && addrData.city_id !== null && addrData.district_id !== null && addrData.village_id === null) {
|
||||||
let byKl = await RegionModels.whereLike({ nmKelurahan: addrData.village_text })
|
let byKl = await RegionModels.whereLike({ nmKelurahan: addrData.village_text });
|
||||||
if (byKl.length > 0) {
|
if (byKl.length > 0) {
|
||||||
addrData.village_id = byKl[0].kodeKel
|
addrData.village_id = byKl[0].kodeKel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GpsTracksModels.create2Address(addrData).catch((e) => {
|
GpsTracksModels.create2Address(addrData).catch((e) => {
|
||||||
Logger.log("error", `${schedulerName} running_error: ${JSON.stringify(e, Object.getOwnPropertyNames(e))}`)
|
Logger.log("error", `${schedulerName} running_error: ${JSON.stringify(e, Object.getOwnPropertyNames(e))}`);
|
||||||
})
|
});
|
||||||
updtData.stts_reverse_geo = GpsTracksModels.STTS_REVERSE_GEO_SC
|
updtData.stts_reverse_geo = GpsTracksModels.STTS_REVERSE_GEO_SC;
|
||||||
await GpsTracksModels.update2(tracks[i].id, updtData)
|
await GpsTracksModels.update2(tracks[i].id, updtData);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
GpsTracksModels.create2Address({
|
GpsTracksModels.create2Address({
|
||||||
@ -219,56 +227,60 @@ const go = async () => {
|
|||||||
log_reverse_geo: JSON.stringify(respData),
|
log_reverse_geo: JSON.stringify(respData),
|
||||||
crt: now,
|
crt: now,
|
||||||
crt_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
|
crt_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
|
||||||
})
|
});
|
||||||
updtData.stts_reverse_geo = GpsTracksModels.STTS_REVERSE_GEO_ER
|
updtData.stts_reverse_geo = GpsTracksModels.STTS_REVERSE_GEO_ER;
|
||||||
await GpsTracksModels.update2(tracks[i].id, updtData)
|
await GpsTracksModels.update2(tracks[i].id, updtData);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
let respData = {}
|
let respData = {};
|
||||||
if (respReverseGeo) {
|
if (respReverseGeo) {
|
||||||
if (respReverseGeo.status != 200) {
|
if (respReverseGeo.status != 200) {
|
||||||
respData.data = respReverseGeo.data
|
respData.data = respReverseGeo.data;
|
||||||
} else {
|
} else {
|
||||||
respData.msg = e.message
|
respData.msg = e.message;
|
||||||
}
|
}
|
||||||
} else if (typeof e.response != "undefined") {
|
} else if (typeof e.response != "undefined") {
|
||||||
respData.data = e.response
|
respData.data = e.response;
|
||||||
} else {
|
} else {
|
||||||
respData.msg = e.message
|
respData.msg = e.message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("typeof respData.data:", typeof respData.data);
|
||||||
|
console.log("isPlainObject:", Object.prototype.toString.call(respData.data) === "[object Object]");
|
||||||
GpsTracksModels.create2Address({
|
GpsTracksModels.create2Address({
|
||||||
device_id: tracks[i].device_id,
|
device_id: tracks[i].device_id,
|
||||||
master_id: tracks[i].id,
|
master_id: tracks[i].id,
|
||||||
lat: tracks[i].latitude,
|
lat: tracks[i].latitude,
|
||||||
lng: tracks[i].longitude,
|
lng: tracks[i].longitude,
|
||||||
stts_reverse_geo: GpsTracksModels.STTS_REVERSE_GEO_ER,
|
stts_reverse_geo: GpsTracksModels.STTS_REVERSE_GEO_ER,
|
||||||
log_reverse_geo: JSON.stringify(respData),
|
// log_reverse_geo: JSON.stringify(respData.data),
|
||||||
|
log_reverse_geo: stringify(respData.data),
|
||||||
crt: now,
|
crt: now,
|
||||||
crt_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
|
crt_format: moment.unix(now).format("YYYY-MM-DD HH:mm:ss"),
|
||||||
})
|
});
|
||||||
updtData.stts_reverse_geo = GpsTracksModels.STTS_REVERSE_GEO_ER
|
updtData.stts_reverse_geo = GpsTracksModels.STTS_REVERSE_GEO_ER;
|
||||||
await GpsTracksModels.update2(tracks[i].id, updtData)
|
await GpsTracksModels.update2(tracks[i].id, updtData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e)
|
console.error(e);
|
||||||
Logger.log("error", `${schedulerName} error: ${JSON.stringify(e)}`)
|
Logger.log("error", `${schedulerName} error: ${JSON.stringify(e)}`);
|
||||||
}
|
}
|
||||||
// })();
|
// })();
|
||||||
|
|
||||||
Logger.log("info", `${schedulerName} success do reverse geocoding ${moment().format("YYYY-MM-DD HH:mm:ss")}`)
|
Logger.log("info", `${schedulerName} success do reverse geocoding ${moment().format("YYYY-MM-DD HH:mm:ss")}`);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Logger.log("error", `${schedulerName} error: ${JSON.stringify(e)}`)
|
Logger.log("error", `${schedulerName} error: ${JSON.stringify(e)}`);
|
||||||
}
|
}
|
||||||
return true
|
return true;
|
||||||
}
|
};
|
||||||
|
|
||||||
const index = async () => {
|
const index = async () => {
|
||||||
while (1 == 1) {
|
while (1 == 1) {
|
||||||
await go()
|
await go();
|
||||||
await new Promise((r) => setTimeout(r, 300))
|
await new Promise((r) => setTimeout(r, 300));
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
index()
|
index();
|
||||||
|
|||||||
41
package-lock.json
generated
41
package-lock.json
generated
@ -21,6 +21,7 @@
|
|||||||
"ejs": "^3.1.6",
|
"ejs": "^3.1.6",
|
||||||
"express": "^4.17.2",
|
"express": "^4.17.2",
|
||||||
"firebase-admin": "^10.3.0",
|
"firebase-admin": "^10.3.0",
|
||||||
|
"flatted": "^3.3.3",
|
||||||
"formidable": "^2.0.1",
|
"formidable": "^2.0.1",
|
||||||
"gps-tracking": "^1.1.1",
|
"gps-tracking": "^1.1.1",
|
||||||
"ioredis": "^4.28.3",
|
"ioredis": "^4.28.3",
|
||||||
@ -399,6 +400,30 @@
|
|||||||
"tinycolor2": "^1.4.1"
|
"tinycolor2": "^1.4.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@jimp/core/node_modules/buffer": {
|
||||||
|
"version": "5.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||||
|
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"base64-js": "^1.3.1",
|
||||||
|
"ieee754": "^1.1.13"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@jimp/core/node_modules/mkdirp": {
|
"node_modules/@jimp/core/node_modules/mkdirp": {
|
||||||
"version": "0.5.6",
|
"version": "0.5.6",
|
||||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
|
||||||
@ -1221,9 +1246,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/buffer": {
|
"node_modules/buffer": {
|
||||||
"version": "5.7.1",
|
"version": "6.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
|
||||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "github",
|
"type": "github",
|
||||||
@ -1238,9 +1263,11 @@
|
|||||||
"url": "https://feross.org/support"
|
"url": "https://feross.org/support"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"base64-js": "^1.3.1",
|
"base64-js": "^1.3.1",
|
||||||
"ieee754": "^1.1.13"
|
"ieee754": "^1.2.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/buffer-equal": {
|
"node_modules/buffer-equal": {
|
||||||
@ -1883,6 +1910,12 @@
|
|||||||
"@google-cloud/storage": "^5.18.3"
|
"@google-cloud/storage": "^5.18.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/flatted": {
|
||||||
|
"version": "3.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
|
||||||
|
"integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
"node_modules/fn.name": {
|
"node_modules/fn.name": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
|
||||||
|
|||||||
@ -26,6 +26,7 @@
|
|||||||
"ejs": "^3.1.6",
|
"ejs": "^3.1.6",
|
||||||
"express": "^4.17.2",
|
"express": "^4.17.2",
|
||||||
"firebase-admin": "^10.3.0",
|
"firebase-admin": "^10.3.0",
|
||||||
|
"flatted": "^3.3.3",
|
||||||
"formidable": "^2.0.1",
|
"formidable": "^2.0.1",
|
||||||
"gps-tracking": "^1.1.1",
|
"gps-tracking": "^1.1.1",
|
||||||
"ioredis": "^4.28.3",
|
"ioredis": "^4.28.3",
|
||||||
|
|||||||
Reference in New Issue
Block a user