UNPKG

opensensemap-client

Version:

The library allows and improves type-based working with the openSenseMap API

13 lines (12 loc) 15.7 kB
import $ from'axios';import {object,literal,pattern,string,union,tuple,optional,number,enums,deprecated,boolean,min,array,unknown,intersection,never,record,integer,mask}from'superstruct';/* * 📦 opensensemap-client * * 🏷️ Version: 1.8.1 * 📄 License: MIT * 🕒 Build: 2025-07-12T10:21:15.428Z * 🔗 Repository: [object Object] * 👤 Author: Julian Wowra <development@julianwowra.de> */ async function ps(r,e){let t=await $.post("https://api.opensensemap.org/boxes/claim",{token:r},{headers:{Authorization:`Bearer ${e}`}});return mask(t.data,_e)}var _e=object({message:literal("Device successfully claimed!")});var n=pattern(string(),/^[a-f0-9]{24}$/),s=pattern(string(),/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/);pattern(string(),/^-?\d+(\.\d+)?,-?\d+(\.\d+)?,-?\d+(\.\d+)?,-?\d+(\.\d+)?$/);var E=union([object({lat:number(),lng:number(),height:optional(number())}),tuple([number(),number(),optional(number())])]);var k=enums(["indoor","outdoor","mobile","unknown"]),O=enums(["boxId","boxName","exposure","height","lat","lon","phenomenon","sensorType","unit"]),A=object({type:literal("Point"),coordinates:E,timestamp:s}),Ne=deprecated(object({geometry:A,type:literal("Feature")}),(r,e)=>{console.warn(`${e.path.join(".")} is deprecated. Please use 'BoxLocation' instead.`);}),Ce=object({enabled:boolean(),url:string(),topic:string(),messageFormat:enums(["json","csv"]),decodeOptions:string(),connectionOptions:string()}),Le=object({dev_id:string(),app_id:string(),profile:enums(["lora-serialization","sensebox/home","json","debug","cayenne-lpp"]),decodeOptions:optional(array(unknown())),port:min(number(),0,{exclusive:true})});enums(["homeV2Lora","homeV2Ethernet","homeV2EthernetFeinstaub","homeV2Wifi","homeV2WifiFeinstaub","homeEthernet","homeWifi","homeEthernetFeinstaub","homeWifiFeinstaub","luftdaten_sds011","luftdaten_sds011_dht11","luftdaten_sds011_dht22","luftdaten_sds011_bmp180","luftdaten_sds011_bme280","luftdaten_pms1003","luftdaten_pms1003_bme280","luftdaten_pms3003","luftdaten_pms3003_bme280","luftdaten_pms5003","luftdaten_pms5003_bme280","luftdaten_pms7003","luftdaten_pms7003_bme280","luftdaten_sps30_bme280","luftdaten_sps30_sht3x","hackair_home_v2"]);enums(["BME280","BME680","BMP180","BMP280","DHT11","DHT22","DNMS","DPS310","HDC1008","PMS 1003","PMS 3003","PMS 5003","PMS 7003","SCD30","SDS 011","SHT3X","SMT50","SOUNDLEVELMETER","SPS30","TSL45315","VEML6070","WINDSPEED"]);var F=object({_id:n,title:string(),unit:string(),sensorType:optional(string()),icon:optional(string())}),y=object({_id:n,name:string(),createdAt:s,exposure:k,model:string(),descriptiom:optional(string()),grouptag:optional(array(k)),weblink:optional(string()),image:optional(string()),currentLocation:A,loc:array(Ne),updatedAt:s,sensor:array(),lastMeasurementAt:optional(s)}),u=intersection([y,object({integrations:object({mqtt:union([object({enabled:literal(false)}),Ce]),ttn:optional(Le)}),access_token:string(),useAuth:optional(boolean())})]),T=object({_id:n,boxId:n,token:string(),createdAt:s,updatedAt:s,expiresAt:s});async function ys(r,e,t){let o=await $.post("https://api.opensensemap.org/boxes/transfer",{boxId:r,date:e},{headers:{Authorization:`Bearer ${t}`}});return mask(o.data,Fe)}var Fe=object({message:literal("Box successfully prepared for transfer"),data:T});async function Ds(r,e,t){let o=await $.delete(`https://api.opensensemap.org/boxes/${r}`,{headers:{Authorization:`Bearer ${t}`},data:{password:e}});return mask(o.data,We)}var We=object({code:literal("Ok"),message:literal("box and all associated measurements marked for deletion")});async function bs(){let r=await $.get("https://api.opensensemap.org/tags");return mask(r.data,qe)}var qe=object({code:literal("Ok"),data:array(string())});async function Ls(r){let e=await $.get(`https://api.opensensemap.org/boxes/${r}`,{params:{format:"json"}});return mask(e.data,Ke)}var Ke=y;async function Fs(r,e){e?.date&&e.date instanceof Date&&(e.date=e.date.toISOString()),e?.grouptag&&Array.isArray(e.grouptag)&&(e.grouptag=e.grouptag.join()),e?.exposure&&Array.isArray(e.exposure)&&(e.exposure=e.exposure.join());let t=await $.get("https://api.opensensemap.org/boxes",{params:Object.assign({bbox:r},e)});return mask(t.data,rt)}var rt=array(y);async function Xs(r,e){e?.["from-date"]&&e["from-date"]instanceof Date&&(e["from-date"]=e["from-date"].toISOString()),e?.["to-date"]&&e["to-date"]instanceof Date&&(e["to-date"]=e["to-date"].toISOString());let t=await $.get(`https://api.opensensemap.org/boxes/${r}/locations`,{params:e});return mask(t.data,nt)}var nt=array(A);async function Vs(r,e,t){let o=await $.get(`https://api.opensensemap.org/boxes/${r}/script`,{headers:{Authorization:`Bearer ${e}`},params:t});return mask(o.data,dt)}var dt=string();async function Ks(r,e){let t=await $.get(`https://api.opensensemap.org/boxes/transfer/${r}`,{headers:{Authorization:`Bearer ${e}`}});return mask(t.data,St)}var St=object({data:T});async function oa(r,e,t,o,a){let f=await $.post("https://api.opensensemap.org/boxes",Object.assign({name:r,exposure:e,location:t},a),{headers:{Authorization:`Bearer ${o}`}});return mask(f.data,Tt)}var Tt=object({message:literal("Box successfully created"),data:u});async function pa(r,e,t){let o=await $.delete("https://api.opensensemap.org/boxes/transfer",{headers:{Authorization:`Bearer ${t}`},data:{boxId:r,token:e}});if(o.status!==204)throw new Error("Failed to remove transfer!");return mask(o.data,At)}var At=never();async function ca(r,e,t){let o=await $.put(`https://api.opensensemap.org/boxes/${r}`,t,{headers:{Authorization:`Bearer ${e}`}});return mask(o.data,bt)}var bt=object({code:literal("Ok"),data:u});async function Ea(r,e,t,o){let a=await $.put(`https://api.opensensemap.org/boxes/transfer/${r}`,{token:e,date:t},{headers:{Authorization:`Bearer ${o}`}});return mask(a.data,Lt)}var Lt=object({message:literal("Transfer successfully updated"),data:T});async function ka(r,e,t){t?.["from-date"]&&t["from-date"]instanceof Date&&(t["from-date"]=t["from-date"].toISOString()),t?.["to-date"]&&t["to-date"]instanceof Date&&(t["to-date"]=t["to-date"].toISOString()),t?.exposure&&Array.isArray(t.exposure)&&(t.exposure=t.exposure.join());let o=await $.get("https://api.opensensemap.org/statistics/idw",{params:Object.assign({phenomenon:r,bbox:e},t)});return mask(o.data,Ft)}var Ft=union([object({code:literal("NotFound"),message:literal("no measurements found")}),object({code:literal("Ok"),data:object({breaks:array(number()),featureCollection:array(object({type:literal("FeatureCollection"),features:object({type:string(),properties:optional(object({idwValues:array(number())})),geometry:object({type:string(),coordinates:array(array(array(number())))})})})),timesteps:array(s)})})]);async function Wa(r,e,t,o){o?.["from-date"]&&o["from-date"]instanceof Date&&(o["from-date"]=o["from-date"].toISOString()),o?.["to-date"]&&o["to-date"]instanceof Date&&(o["to-date"]=o["to-date"].toISOString()),o&&Array.isArray(o.timestamps)&&(o.timestamps=o.timestamps.map(f=>f instanceof Date?f.toISOString():f));let a=await $.delete(`https://api.opensensemap.org/boxes/${r}/${e}/measurements`,{headers:{Authorization:`Bearer ${t}`},data:o});return mask(a.data,zt)}var zt=object({code:literal("Ok"),message:pattern(string(),/^Successfully deleted (all measurements|\d+ measurements|measurements between .+ and .+) of sensor .+$/)});async function Va(r,e,t){t?.["from-date"]&&t["from-date"]instanceof Date&&(t["from-date"]=t["from-date"].toISOString()),t?.["to-date"]&&t["to-date"]instanceof Date&&(t["to-date"]=t["to-date"].toISOString());let o=await $.get(`https://api.opensensemap.org/boxes/${r}/data/${e}`,{params:t});return mask(o.data,Jt)}var Jt=array(object({value:string(),location:E,createdAt:s,isOutlier:optional(boolean())}));async function Ka(r){try{let e=await $.get("https://api.opensensemap.org/boxes/data/bytag",{params:{grouptag:Array.isArray(r)?r.join():r}});return mask(e.data,sr)}catch(e){if($.isAxiosError(e)&&e.response?.status===404&&e.response.data?.message==="No senseBoxes found")return [];throw e}}var sr=array(object({boxId:n,sensorId:n,value:string(),createdAt:s}));async function sn(r,e,t){"boxId"in e&&Array.isArray(e.boxId)&&(e.boxId=e.boxId.join()),t?.["from-date"]&&t["from-date"]instanceof Date&&(t["from-date"]=t["from-date"].toISOString()),t?.["to-date"]&&t["to-date"]instanceof Date&&(t["to-date"]=t["to-date"].toISOString()),t?.columns&&Array.isArray(t.columns)&&(t.columns=t.columns.join()),t?.exposure&&Array.isArray(t.exposure)&&(t.exposure=t.exposure.join());let o=await $.get("https://api.opensensemap.org/boxes/data",{params:Object.assign({format:"json",phenomenon:r},e,t)});return mask(o.data,cr)}var cr=array(intersection([object({createdAt:s,value:string()}),record(O,optional(string()))]));var lr=object({value:string(),createdAt:s});object({_id:n,value:string(),sensor_id:n,createdAt:s,location:object({type:literal("Point"),coordinates:E})});var I=intersection([F,object({lastMeasurement:optional(lr)})]);async function xn(r,e,t){let o=await $.get(`https://api.opensensemap.org/boxes/${r}/sensors/${e}`,{params:t});return mask(o.data,Or)}var Or=optional(union([I,string()]));object({_id:n,name:optional(string()),sensors:array(I),grouptag:optional(string())});async function Mn(r,e,t,o,a){a?.createdAt&&a.createdAt instanceof Date&&(a.createdAt=a.createdAt.toISOString());let f=await $.post(`https://api.opensensemap.org/boxes/${r}/${e}`,Object.assign({value:typeof t=="string"?t:t.toString()},a),{headers:o?{Authorization:o}:{}});return mask(f.data,br)}var br=literal("Measurement saved in box");async function Nn(r,e,t){e=e.map(a=>(typeof a.value=="number"&&(a.value=a.value.toString()),a.createdAt&&a.createdAt instanceof Date&&(a.createdAt=a.createdAt.toISOString()),a));let o=await $.post(`https://api.opensensemap.org/boxes/${r}/data`,e,{headers:t?{Authorization:t}:{}});return mask(o.data,Cr)}var Cr=literal("Measurements saved in box");async function vn(r){let e=await $.get("https://api.opensensemap.org/stats",{params:r});return mask(e.data,Fr)}var Fr=union([array(number()),array(string())]);async function Qn(){let r=await $.get("https://api.opensensemap.org/");return mask(r.data,Wr)}var Wr=string();async function op(r,e,t,o,a,f,c){"boxId"in r&&Array.isArray(r.boxId)&&(r.boxId=r.boxId.join()),t instanceof Date&&(t=t.toISOString()),o instanceof Date&&(o=o.toISOString()),c?.columns&&Array.isArray(c.columns)&&(c.columns=c.columns.join()),c?.exposure&&Array.isArray(c.exposure)&&(c.exposure=c.exposure.join());let le=await $.get("https://api.opensensemap.org/statistics/descriptive",{params:Object.assign({phenomenon:e,"from-date":t,"to-date":o,operation:a,window:f,format:"json"},r,c)});return mask(le.data,Yr)}var Yr=array(intersection([object({sensorId:n}),record(O,optional(string())),record(s,number())]));async function mp(r,e){let t=await $.post("https://api.opensensemap.org/users/confirm-email",{email:r,token:e});return mask(t.data,to)}var to=object({code:literal("Ok"),message:literal("E-Mail successfully confirmed. Thank you")});async function up(r,e){let t=await $.delete("https://api.opensensemap.org/users/me",{headers:{Authorization:`Bearer ${e}`},data:{password:r}});return mask(t.data,ao)}var ao=object({code:literal("Ok"),message:literal("User and all boxes of user marked for deletion. Bye Bye!")});var io=pattern(string(),/^[a-zA-Z0-9][a-zA-Z0-9 .\-_]{2,39}$/),mo=enums(["user","admin"]),fo=enums(["de_DE","en_US"]);pattern(string(),/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/);var i=object({name:io,email:string(),role:mo,language:fo,boxes:array(n),sharedBoxes:optional(array(n)),emailIsConfirmed:boolean(),integrations:optional(object())});intersection([i,object({_id:n,unconfirmedEmail:string(),lastUpdatedBy:s,createdAt:s,updatedAt:s})]);async function Ap(r){let e=await $.get("https://api.opensensemap.org/users/me",{headers:{Authorization:`Bearer ${r}`}});return mask(e.data,xo)}var xo=object({code:literal("Ok"),data:object({me:i})});async function bp(r,e){let t=await $.get(`https://api.opensensemap.org/users/me/boxes/${r}`,{headers:{Authorization:`Bearer ${e}`}});return mask(t.data,To)}var To=object({code:literal("Ok"),data:object({box:u})});async function Lp(r,e){let t=await $.get("https://api.opensensemap.org/users/me/boxes",{params:e,headers:{Authorization:`Bearer ${r}`}});return mask(t.data,Do)}var Do=object({code:literal("Ok"),data:object({boxes:array(u),boxes_count:integer(),sharedBoxes:array(u)})});async function Pp(r,e){let t=await $.post("https://api.opensensemap.org/users/password-reset",{password:r,token:e});return mask(t.data,bo)}var bo=object({code:literal("Ok"),message:literal("Password successfully changed. You can now login with your new password")});async function Wp(r){let e=await $.post("https://api.opensensemap.org/users/refresh-auth",{token:r});return mask(e.data,No)}var No=object({code:literal("Authorized"),message:literal("Successfully refreshed auth"),data:object({user:i}),token:string(),refreshToken:string()});async function Vp(r,e,t,o){let a=await $.post("https://api.opensensemap.org/users/register",Object.assign({name:r,email:e,password:t},o));return mask(a.data,Bo)}var Bo=object({code:literal("Created"),message:literal("Successfully registered new user"),data:object({user:i}),token:string(),refreshToken:string()});async function Yp(r){let e=await $.post("https://api.opensensemap.org/users/request-password-reset",{email:r});return mask(e.data,Fo)}var Fo=object({code:literal("Ok"),message:literal("Password reset initiated")});async function ti(r){let e=await $.post("https://api.opensensemap.org/users/me/resend-email-confirmation",void 0,{headers:{Authorization:`Bearer ${r}`}});return mask(e.data,vo)}var vo=object({code:literal("Ok"),message:string()});async function ni(r,e){let t=await $.post("https://api.opensensemap.org/users/sign-in",{email:r,password:e});return mask(t.data,Vo)}var Vo=object({code:literal("Authorized"),message:literal("Successfully signed in"),data:object({user:i}),token:string(),refreshToken:string()});async function di(r){let e=await $.post("https://api.opensensemap.org/users/sign-out",void 0,{headers:{Authorization:`Bearer ${r}`}});return mask(e.data,Yo)}var Yo=object({code:literal("Ok"),message:literal("Successfully signed out")});async function xi(r,e,t){let o=await $.put("https://api.opensensemap.org/users/me",Object.assign({currentPassword:r},t),{headers:{Authorization:`Bearer ${e}`}});return mask(o.data,ss)}var rs=object({code:literal("Ok"),message:enums(["User successfully saved.","User successfully saved. E-Mail changed. Please confirm your new address. Until confirmation, sign in using your old address","User successfully saved. Password changed. Please sign in with your new password"]),data:object({me:i})}),os=object({code:literal("Ok"),message:literal("User not updated. No changed properties supplied.")}),ss=union([rs,os]); export{ka as calculateIdw,ps as claimBox,mp as confirmEmail,ys as createTransfer,Ds as deleteBox,Wa as deleteMeasurements,up as deleteUser,op as descriptive,bs as getAllTags,Ls as getBox,Xs as getBoxLocations,Fs as getBoxes,Va as getData,Ka as getDataByGroupTag,sn as getDataMulti,xn as getLatestMeasurementOfSensor,Vs as getSketch,vn as getStatistics,Ks as getTransfer,Ap as getUser,bp as getUserBox,Lp as getUserBoxes,Pp as passwordReset,oa as postNewBox,Mn as postNewMeasurement,Nn as postNewMeasurements,Qn as printRoutes,Wp as refreshAuth,Vp as register,pa as removeTransfer,Yp as requestPasswordReset,ti as resendEmailConfirmation,ni as signIn,di as signOut,ca as updateBox,Ea as updateTransfer,xi as updateUser};//# sourceMappingURL=index.mjs.map //# sourceMappingURL=index.mjs.map