{"version":3,"sources":["../../src/api/box/claimBox.ts","../../src/api/globalTypes.ts","../../src/api/box/_boxModels.ts","../../src/api/box/createTransfer.ts","../../src/api/box/deleteBox.ts","../../src/api/box/getAllTags.ts","../../src/api/box/getBox.ts","../../src/api/box/getBoxes.ts","../../src/api/box/getBoxLocations.ts","../../src/api/box/getSketch.ts","../../src/api/box/getTransfer.ts","../../src/api/box/postNewBox.ts","../../src/api/box/removeTransfer.ts","../../src/api/box/updateBox.ts","../../src/api/box/updateTransfer.ts","../../src/api/interpolation/calculateIdw.ts","../../src/api/measurement/deleteMeasurements.ts","../../src/api/measurement/getData.ts","../../src/api/measurement/getDataByGroupTag.ts","../../src/api/measurement/getDataMulti.ts","../../src/api/measurement/_measurementModels.ts","../../src/api/measurement/getLatestMeasurementOfSensor.ts","../../src/api/measurement/getLatestMeasurements.ts","../../src/api/measurement/postNewMeasurement.ts","../../src/api/measurement/postNewMeasurements.ts","../../src/api/misc/getStatistics.ts","../../src/api/misc/printRoutes.ts","../../src/api/statistic/descriptive.ts","../../src/api/user/confirmEmail.ts","../../src/api/user/deleteUser.ts","../../src/api/user/_userModels.ts","../../src/api/user/getUser.ts","../../src/api/user/getUserBox.ts","../../src/api/user/getUserBoxes.ts","../../src/api/user/passwordReset.ts","../../src/api/user/refreshAuth.ts","../../src/api/user/register.ts","../../src/api/user/requestPasswordReset.ts","../../src/api/user/resendEmailConfirmation.ts","../../src/api/user/signIn.ts","../../src/api/user/signOut.ts","../../src/api/user/updateUser.ts"],"names":["claimBox","transferToken","authorization","response","axios","mask","CLAIM_BOX_RESULT","object","literal","OPENSENSEMAP_ID","pattern","string","DATE_RFC3339","COORDINATES","union","number","optional","tuple","EXPOSURE_TYPE","enums","COLUMNS","BOX_LOCATION","BOX_LOC","deprecated","_value","ctx","MQTT","boolean","TTN","array","unknown","min","SENSOR","BOX_DATA","BOX_DATA_WITH_SECRETS","intersection","BOX_TRANSFER_INFORMATION","createTransfer","senseBoxId","expiresAt","CREATE_TRANSFER_RESULT","deleteBox","password","DELETE_BOX_RESULT","getAllTags","GET_ALL_TAGS_RESULT","getBox","GET_BOX_RESULT","getBoxes","bbox","options","GET_BOXES_RESULT","getBoxLocations","GET_BOX_LOCATIONS_RESULT","getSketch","GET_SKETCH_RESULT","getTransfer","GET_TRANSFER_RESULT","postNewBox","name","exposure","location","reponse","POST_NEW_BOX_RESULT","removeTransfer","REMOVE_TRANSFER_RESULT","never","updateBox","UPDATE_BOX_RESULT","updateTransfer","UPDATE_TRANSFER_RESULT","calculateIdw","phenomenon","CALCULATE_IDW_RESULT","deleteMeasurements","sensorId","element","DELETE_MEASUREMENTS_RESULT","getData","GET_DATA_RESULT","getDataByGroupTag","grouptag","GET_DATA_BY_GROUP_TAG_RESULT","error","getDataMulti","target","GET_DATA_MULTI_RESULT","record","LAST_MEASUREMENT","LATEST_MEASUREMENT_SENSOR","getLatestMeasurementOfSensor","GET_LATEST_MEASUREMENT_OF_SENSOR_RESULT","postNewMeasurement","value","boxAuthorization","POST_NEW_MEASUREMENT_RESULT","postNewMeasurements","data","POST_NEW_MEASUREMENTS_RESULT","getStatistics","GET_STATISTICS_RESULT","printRoutes","PRINT_ROUTES_RESULT","descriptive","fromDate","toDate","operation","window","DESCRIPTIVE_RESULT","confirmEmail","email","confirmationToken","CONFIRM_EMAIL_RESULT","deleteUser","DELETE_USER_RESULT","USER_NAME","USER_ROLE","LANGUAGE","USER_DATA","getUser","GET_USER_RESULT","getUserBox","GET_USER_BOX_RESULT","getUserBoxes","GET_USER_BOXES_RESULT","integer","passwordReset","newPassword","PASSWORD_RESET_RESULT","refreshAuth","refreshToken","REFRESH_AUTH_RESULT","register","userName","REGISTER_RESULT","requestPasswordReset","REQUEST_PASSWORD_RESET_RESULT","resendEmailConfirmation","RESEND_EMAIL_CONFIRMATION_RESULT","signIn","SIGN_IN_RESULT","signOut","SIGN_OUT_RESULT","updateUser","currentPassword","UPDATE_USER_RESULT","UPDATE_USER_RESULT_UPDATED","UPDATE_USER_RESULT_USER_NOT_UPDATED"],"mappings":"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","file":"index.cjs","sourcesContent":["import axios from 'axios';\nimport { literal, mask, object } from 'superstruct';\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-claimBox\n */\nexport async function claimBox(transferToken: string, authorization: string) {\n\tconst response = await axios.post(\n\t\t'https://api.opensensemap.org/boxes/claim',\n\t\t{\n\t\t\ttoken: transferToken\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t\t}\n\t\t}\n\t);\n\n\treturn mask(response.data, CLAIM_BOX_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/boxesController.js#L602|OpenSenseMap API code reference on GitHub}\n */\nconst CLAIM_BOX_RESULT = object({\n\tmessage: literal('Device successfully claimed!')\n});\n","import { type Infer, number, object, optional, pattern, string, tuple, union } from 'superstruct';\n\n/**\n * @see https://docs.opensensemap.org/#api-_\n */\nexport const OPENSENSEMAP_ID = pattern(string(), /^[a-f0-9]{24}$/);\nexport type OpenSenseMapID = Infer<typeof OPENSENSEMAP_ID>;\n\n/**\n * @see https://docs.opensensemap.org/#api-_\n */\nexport const DATE_RFC3339 = pattern(string(), /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,3})?Z$/);\nexport type DateRFC3339 = Infer<typeof DATE_RFC3339>;\n\n/**\n * 4 WGS84 coordinates separated by commas. You can use a tool like {@link http://bboxfinder.com|bboxfinder.com} to mark the box\n * @example \"7.645503,51.962280,7.646168,51.962515\"\n */\nexport const COORDINATES_WGS84 = pattern(string(), /^-?\\d+(\\.\\d+)?,-?\\d+(\\.\\d+)?,-?\\d+(\\.\\d+)?,-?\\d+(\\.\\d+)?$/);\nexport type CoordinatesWGS84 = Infer<typeof COORDINATES_WGS84>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/box/box.js#L31C2-L31C2|OpenSenseMap API code reference on GitHub}\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/measurement/measurement.js#L23|OpenSenseMap API code reference on GitHub}\n */\nexport const COORDINATES = union([\n\tobject({\n\t\tlat: number(),\n\t\tlng: number(),\n\t\theight: optional(number())\n\t}),\n\ttuple([number(), number(), optional(number())])\n]);\n\nexport type Coordinates = Infer<typeof COORDINATES>;\n","import {\n\tarray,\n\tboolean,\n\tdeprecated,\n\tenums,\n\ttype Infer,\n\tintersection,\n\tliteral,\n\tmin,\n\tnumber,\n\tobject,\n\toptional,\n\tstring,\n\tunion,\n\tunknown\n} from 'superstruct';\nimport { COORDINATES, DATE_RFC3339, OPENSENSEMAP_ID } from '../globalTypes';\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/box/box.js#L65|OpenSenseMap API code reference on GitHub}\n */\nexport const EXPOSURE_TYPE = enums(['indoor', 'outdoor', 'mobile', 'unknown']);\nexport type ExposureType = Infer<typeof EXPOSURE_TYPE>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/measurementsController.js#L212|OpenSenseMap API code reference on GitHub}\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/statisticsController.js#L232C29-L232C37|OpenSenseMap API code reference on GitHub}\n */\nexport const COLUMNS = enums(['boxId', 'boxName', 'exposure', 'height', 'lat', 'lon', 'phenomenon', 'sensorType', 'unit']);\nexport type Columns = Infer<typeof COLUMNS>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/box/box.js#L57|OpenSenseMap API code reference on GitHub}\n */\nexport const BOX_LOCATION = object({\n\ttype: literal('Point'),\n\tcoordinates: COORDINATES,\n\ttimestamp: DATE_RFC3339\n});\n\nexport type BoxLocation = Infer<typeof BOX_LOCATION>;\n\n/**\n * @deprecated Use `currentLocation`\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/box/box.js#L170C56-L170C63|OpenSenseMap API code reference on GitHub}\n */\nexport const BOX_LOC = deprecated(\n\tobject({\n\t\tgeometry: BOX_LOCATION,\n\t\ttype: literal('Feature')\n\t}),\n\t(_value, ctx) => {\n\t\tconsole.warn(`${ctx.path.join('.')} is deprecated. Please use 'BoxLocation' instead.`);\n\t}\n);\n\nexport type BoxLoc = Infer<typeof BOX_LOC>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/861dd9b2e9498b380b52839da84aa9ab27f1fc42/packages/models/src/box/integrations.js#L8|OpenSenseMap API code reference on GitHub}\n */\nexport const MQTT = object({\n\tenabled: boolean(),\n\turl: string(),\n\ttopic: string(),\n\tmessageFormat: enums(['json', 'csv']),\n\tdecodeOptions: string(),\n\tconnectionOptions: string()\n});\n\nexport type MQTT = Infer<typeof MQTT>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/861dd9b2e9498b380b52839da84aa9ab27f1fc42/packages/models/src/box/integrations.js#L23|OpenSenseMap API code reference on GitHub}\n */\nexport const TTN = object({\n\tdev_id: string(),\n\tapp_id: string(),\n\tprofile: enums(['lora-serialization', 'sensebox/home', 'json', 'debug', 'cayenne-lpp']),\n\tdecodeOptions: optional(array(unknown())),\n\tport: min(number(), 0, { exclusive: true })\n});\n\nexport type TTN = Infer<typeof TTN>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/953c476b192bcb051823e67c2a3b3e9891eb7bea/packages/models/src/box/sensorLayouts/index.js#L34|OpenSenseMap API code reference on GitHub}\n */\nexport const BOX_MODEL = enums([\n\t'homeV2Lora',\n\t'homeV2Ethernet',\n\t'homeV2EthernetFeinstaub',\n\t'homeV2Wifi',\n\t'homeV2WifiFeinstaub',\n\t'homeEthernet',\n\t'homeWifi',\n\t'homeEthernetFeinstaub',\n\t'homeWifiFeinstaub',\n\t'luftdaten_sds011',\n\t'luftdaten_sds011_dht11',\n\t'luftdaten_sds011_dht22',\n\t'luftdaten_sds011_bmp180',\n\t'luftdaten_sds011_bme280',\n\t'luftdaten_pms1003',\n\t'luftdaten_pms1003_bme280',\n\t'luftdaten_pms3003',\n\t'luftdaten_pms3003_bme280',\n\t'luftdaten_pms5003',\n\t'luftdaten_pms5003_bme280',\n\t'luftdaten_pms7003',\n\t'luftdaten_pms7003_bme280',\n\t'luftdaten_sps30_bme280',\n\t'luftdaten_sps30_sht3x',\n\t'hackair_home_v2'\n]);\n\nexport type BoxModel = Infer<typeof BOX_MODEL>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/953c476b192bcb051823e67c2a3b3e9891eb7bea/packages/models/src/box/sensorLayouts/index.js#L66|OpenSenseMap API code reference on GitHub}\n * @see {@link https://github.com/sensebox/openSenseMap-API/tree/953c476b192bcb051823e67c2a3b3e9891eb7bea/packages/models/src/box/sensorLayouts/sensorDefinitions|OpenSenseMap API code reference on GitHub}\n */\nexport const SENSOR_TEMPLATES = enums([\n\t'BME280',\n\t'BME680',\n\t'BMP180',\n\t'BMP280',\n\t'DHT11',\n\t'DHT22',\n\t'DNMS',\n\t'DPS310',\n\t'HDC1008',\n\t'PMS 1003',\n\t'PMS 3003',\n\t'PMS 5003',\n\t'PMS 7003',\n\t'SCD30',\n\t'SDS 011',\n\t'SHT3X',\n\t'SMT50',\n\t'SOUNDLEVELMETER',\n\t'SPS30',\n\t'TSL45315',\n\t'VEML6070',\n\t'WINDSPEED'\n]);\n\nexport type SensorTemplates = Infer<typeof SENSOR_TEMPLATES>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/sensor/sensor.js#L8|OpenSenseMap API code reference on GitHub}\n */\nexport const SENSOR = object({\n\t_id: OPENSENSEMAP_ID,\n\ttitle: string(),\n\tunit: string(),\n\tsensorType: optional(string()),\n\ticon: optional(string())\n});\n\nexport type Sensor = Infer<typeof SENSOR>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/box/box.js#L47|OpenSenseMap API code reference on GitHub}\n */\nexport const BOX_DATA = object({\n\t_id: OPENSENSEMAP_ID,\n\tname: string(),\n\tcreatedAt: DATE_RFC3339,\n\texposure: EXPOSURE_TYPE,\n\tmodel: string(),\n\tdescriptiom: optional(string()),\n\tgrouptag: optional(array(EXPOSURE_TYPE)),\n\tweblink: optional(string()),\n\timage: optional(string()),\n\tcurrentLocation: BOX_LOCATION,\n\tloc: array(BOX_LOC),\n\tupdatedAt: DATE_RFC3339,\n\tsensor: array(),\n\tlastMeasurementAt: optional(DATE_RFC3339)\n});\n\nexport type BoxData = Infer<typeof BOX_DATA>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/box/box.js#L172|OpenSenseMap API code reference on GitHub}\n */\nexport const BOX_DATA_WITH_SECRETS = intersection([\n\tBOX_DATA,\n\tobject({\n\t\tintegrations: object({\n\t\t\tmqtt: union([object({ enabled: literal(false) }), MQTT]),\n\t\t\tttn: optional(TTN)\n\t\t}),\n\t\taccess_token: string(),\n\t\tuseAuth: optional(boolean())\n\t})\n]);\n\nexport type BoxDataWithSecrets = Infer<typeof BOX_DATA_WITH_SECRETS>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/953c476b192bcb051823e67c2a3b3e9891eb7bea/packages/models/src/box/claim.js#L17|OpenSenseMap API code reference on GitHub}\n */\nexport const BOX_TRANSFER_INFORMATION = object({\n\t_id: OPENSENSEMAP_ID,\n\tboxId: OPENSENSEMAP_ID,\n\ttoken: string(),\n\tcreatedAt: DATE_RFC3339,\n\tupdatedAt: DATE_RFC3339,\n\texpiresAt: DATE_RFC3339\n});\n\nexport type BoxTransferInformation = Infer<typeof BOX_TRANSFER_INFORMATION>;\n","import axios from 'axios';\nimport { literal, mask, object } from 'superstruct';\nimport type { DateRFC3339, OpenSenseMapID } from '../globalTypes';\nimport { BOX_TRANSFER_INFORMATION } from './_boxModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-createTransfer\n */\nexport async function createTransfer(senseBoxId: OpenSenseMapID, expiresAt: DateRFC3339, authorization: string) {\n\tconst response = await axios.post(\n\t\t'https://api.opensensemap.org/boxes/transfer',\n\t\t{\n\t\t\tboxId: senseBoxId,\n\t\t\tdate: expiresAt\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t\t}\n\t\t}\n\t);\n\n\treturn mask(response.data, CREATE_TRANSFER_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/boxesController.js#L533C2-L533C3|OpenSenseMap API code reference on GitHub}\n */\nconst CREATE_TRANSFER_RESULT = object({\n\tmessage: literal('Box successfully prepared for transfer'),\n\tdata: BOX_TRANSFER_INFORMATION\n});\n","import axios from 'axios';\nimport { literal, mask, object } from 'superstruct';\nimport type { OpenSenseMapID } from '../globalTypes';\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-deleteBox\n */\nexport async function deleteBox(senseBoxId: OpenSenseMapID, password: string, authorization: string) {\n\tconst response = await axios.delete(`https://api.opensensemap.org/boxes/${senseBoxId}`, {\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t},\n\t\tdata: {\n\t\t\tpassword\n\t\t}\n\t});\n\n\treturn mask(response.data, DELETE_BOX_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/boxesController.js#L491C4-L491C4|OpenSenseMap API code reference on GitHub}\n */\nconst DELETE_BOX_RESULT = object({\n\tcode: literal('Ok'),\n\tmessage: literal('box and all associated measurements marked for deletion')\n});\n","import axios from 'axios';\nimport { array, literal, mask, object, string } from 'superstruct';\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-getAllTags\n */\nexport async function getAllTags() {\n\tconst response = await axios.get(`https://api.opensensemap.org/tags`);\n\treturn mask(response.data, GET_ALL_TAGS_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/11695a33cf0260a62aecbefd76c46735b690be62/packages/api/lib/controllers/boxesController.js#L704C5-L704C5|OpenSenseMap API code reference on GitHub}\n */\nconst GET_ALL_TAGS_RESULT = object({\n\tcode: literal('Ok'),\n\tdata: array(string())\n});\n","import axios from 'axios';\nimport { mask } from 'superstruct';\nimport type { OpenSenseMapID } from '../globalTypes';\nimport { BOX_DATA } from './_boxModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-getBox\n */\nexport async function getBox(senseBoxId: OpenSenseMapID) {\n\tconst response = await axios.get(`https://api.opensensemap.org/boxes/${senseBoxId}`, {\n\t\tparams: {\n\t\t\tformat: 'json'\n\t\t}\n\t});\n\n\treturn mask(response.data, GET_BOX_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/boxesController.js#L373|OpenSenseMap API code reference on GitHub}\n */\nconst GET_BOX_RESULT = BOX_DATA;\n","import axios from 'axios';\nimport { array, mask } from 'superstruct';\nimport type { CoordinatesWGS84, DateRFC3339 } from '../globalTypes';\nimport { BOX_DATA, type BoxModel, type ExposureType } from './_boxModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-getBoxes\n */\nexport async function getBoxes(bbox: CoordinatesWGS84, options?: GetBoxesOptions) {\n\tif (options?.date && options.date instanceof Date) {\n\t\toptions.date = options.date.toISOString();\n\t}\n\n\tif (options?.grouptag && Array.isArray(options.grouptag)) {\n\t\toptions.grouptag = options.grouptag.join();\n\t}\n\n\tif (options?.exposure && Array.isArray(options.exposure)) {\n\t\toptions.exposure = options.exposure.join();\n\t}\n\n\tconst response = await axios.get('https://api.opensensemap.org/boxes', {\n\t\tparams: Object.assign(\n\t\t\t{\n\t\t\t\tbbox\n\t\t\t},\n\t\t\toptions\n\t\t)\n\t});\n\n\treturn mask(response.data, GET_BOXES_RESULT);\n}\n\nexport type GetBoxesOptions = {\n\tdate?: DateRFC3339 | Date;\n\tphenomenon?: string;\n\tgrouptag?: string | string[];\n\tmodel?: BoxModel;\n\tclassify?: boolean;\n\tminimal?: boolean;\n\tfull?: boolean;\n\tnear?: string;\n\tmaxDistance?: number;\n\texposure?: string | ExposureType[];\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/boxesController.js#L253|OpenSenseMap API code reference on GitHub}\n */\nconst GET_BOXES_RESULT = array(BOX_DATA);\n","import axios from 'axios';\nimport { array, mask } from 'superstruct';\nimport type { DateRFC3339, OpenSenseMapID } from '../globalTypes';\nimport { BOX_LOCATION } from './_boxModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-getBoxLocations\n */\nexport async function getBoxLocations(senseBoxId: OpenSenseMapID, options?: GetBoxLocationsOptions) {\n\tif (options?.['from-date'] && options['from-date'] instanceof Date) {\n\t\toptions['from-date'] = options['from-date'].toISOString();\n\t}\n\n\tif (options?.['to-date'] && options['to-date'] instanceof Date) {\n\t\toptions['to-date'] = options['to-date'].toISOString();\n\t}\n\n\tconst response = await axios.get(`https://api.opensensemap.org/boxes/${senseBoxId}/locations`, {\n\t\tparams: options\n\t});\n\n\treturn mask(response.data, GET_BOX_LOCATIONS_RESULT);\n}\n\nexport type GetBoxLocationsOptions = {\n\t'from-date': DateRFC3339 | Date;\n\t'to-date': DateRFC3339 | Date;\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/boxesController.js#L173C3-L173C3|OpenSenseMap API code reference on GitHub}\n */\nconst GET_BOX_LOCATIONS_RESULT = array(BOX_LOCATION);\n","import axios from 'axios';\nimport { mask, string } from 'superstruct';\nimport type { OpenSenseMapID } from '../globalTypes';\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-getSketch\n */\nexport async function getSketch(senseBoxId: OpenSenseMapID, authorization: string, options?: GetSketchOptions) {\n\tconst response = await axios.get(`https://api.opensensemap.org/boxes/${senseBoxId}/script`, {\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t},\n\t\tparams: options\n\t});\n\n\treturn mask(response.data, GET_SKETCH_RESULT);\n}\n\nexport type GetSketchOptions = {\n\tserialPort?: 'Serial1' | 'Serial2';\n\tsoilDigitalPort?: 'A' | 'B' | 'C';\n\tsoundMeterPort?: 'A' | 'B' | 'C';\n\twindSpeedPort?: 'A' | 'B' | 'C';\n\tssid?: string;\n\tpassword?: string;\n\tdevEUI?: string;\n\tappEUI?: string;\n\tappKey?: string;\n\tdisplay_enabled?: boolean;\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/boxesController.js#L469C21-L469C21|OpenSenseMap API code reference on GitHub}\n */\nconst GET_SKETCH_RESULT = string();\n","import axios from 'axios';\nimport { mask, object } from 'superstruct';\nimport type { OpenSenseMapID } from '../globalTypes';\nimport { BOX_TRANSFER_INFORMATION } from './_boxModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-getTransfer\n */\nexport async function getTransfer(senseBoxId: OpenSenseMapID, authorization: string) {\n\tconst response = await axios.get(`https://api.opensensemap.org/boxes/transfer/${senseBoxId}`, {\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t}\n\t});\n\n\treturn mask(response.data, GET_TRANSFER_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/boxesController.js#L512C3-L512C3|OpenSenseMap API code reference on GitHub}\n */\nconst GET_TRANSFER_RESULT = object({\n\tdata: BOX_TRANSFER_INFORMATION\n});\n","import axios from 'axios';\nimport { literal, mask, object } from 'superstruct';\nimport type { Coordinates } from '../globalTypes';\nimport type { BoxModel, ExposureType, MQTT, Sensor, SensorTemplates, TTN } from './_boxModels';\nimport { BOX_DATA_WITH_SECRETS } from './_boxModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-postNewBox\n */\nexport async function postNewBox(\n\tname: string,\n\texposure: ExposureType,\n\tlocation: Coordinates,\n\tauthorization: string,\n\toptions?: PostNewBoxOptions\n) {\n\tconst reponse = await axios.post(\n\t\t'https://api.opensensemap.org/boxes',\n\t\tObject.assign(\n\t\t\t{\n\t\t\t\tname,\n\t\t\t\texposure,\n\t\t\t\tlocation\n\t\t\t},\n\t\t\toptions\n\t\t),\n\t\t{\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t\t}\n\t\t}\n\t);\n\n\treturn mask(reponse.data, POST_NEW_BOX_RESULT);\n}\n\nexport type PostNewBoxOptions = {\n\tdescription?: string;\n\tgrouptag?: string;\n\tmodel?: BoxModel;\n\tsensors?: Omit<Sensor, '_id'>[];\n\tsensorTemplates?: SensorTemplates[];\n\tserialPort?: 'Serial1' | 'Serial2';\n\tsoilDigitalPort?: 'A' | 'B' | 'C';\n\tsoundMeterPort?: 'A' | 'B' | 'C';\n\twindSpeedPort?: 'A' | 'B' | 'C';\n\tmqtt?: MQTT;\n\tttn?: TTN;\n\tuseAuth?: boolean;\n\tsharedBox?: boolean;\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/boxesController.js#L413|OpenSenseMap API code reference on GitHub}\n */\nconst POST_NEW_BOX_RESULT = object({\n\tmessage: literal('Box successfully created'),\n\tdata: BOX_DATA_WITH_SECRETS\n});\n","import axios from 'axios';\nimport { mask, never } from 'superstruct';\nimport type { OpenSenseMapID } from '../globalTypes';\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-removeTransfer\n */\nexport async function removeTransfer(senseBoxId: OpenSenseMapID, transferToken: string, authorization: string) {\n\tconst response = await axios.delete('https://api.opensensemap.org/boxes/transfer', {\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t},\n\t\tdata: {\n\t\t\tboxId: senseBoxId,\n\t\t\ttoken: transferToken\n\t\t}\n\t});\n\n\tif (response.status !== 204) {\n\t\tthrow new Error('Failed to remove transfer!');\n\t}\n\n\treturn mask(response.data, REMOVE_TRANSFER_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/boxesController.js#L578C3-L578C3|OpenSenseMap API code reference on GitHub}\n */\nconst REMOVE_TRANSFER_RESULT = never();\n","import axios from 'axios';\nimport { literal, mask, object } from 'superstruct';\nimport type { Coordinates, OpenSenseMapID } from '../globalTypes';\nimport type { MQTT, Sensor, TTN } from './_boxModels';\nimport { BOX_DATA_WITH_SECRETS } from './_boxModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-updateBox\n */\nexport async function updateBox(senseBoxId: OpenSenseMapID, authorization: string, options: UpdateBoxOptions) {\n\tconst reponse = await axios.put(`https://api.opensensemap.org/boxes/${senseBoxId}`, options, {\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t}\n\t});\n\n\treturn mask(reponse.data, UPDATE_BOX_RESULT);\n}\n\nexport type UpdateBoxOptions = {\n\tname?: string;\n\tgrouptag?: string[];\n\tlocation?: Coordinates;\n\tsensors?: (UpdateBoxSensorNew | UpdateBoxSensorEdited | UpdateBoxSensorDeleted)[];\n\tmqtt?: MQTT;\n\tttn?: TTN;\n\tdescription?: string;\n\timage?: string;\n\taddons?: Record<string | number, string | number>;\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/boxesController.js#L143|OpenSenseMap API code reference on GitHub}\n */\nconst UPDATE_BOX_RESULT = object({\n\tcode: literal('Ok'),\n\tdata: BOX_DATA_WITH_SECRETS\n});\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-updateBox\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/box/box.js#L855C6-L855C6|OpenSenseMap API code reference on GitHub}\n */\nexport type UpdateBoxSensorNew = Omit<Sensor, '_id'> & {\n\tnew: true;\n};\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-updateBox\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/box/box.js#L857C7-L857C7|OpenSenseMap API code reference on GitHub}\n */\nexport type UpdateBoxSensorEdited = Sensor & {\n\tedited: true;\n};\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-updateBox\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/box/box.js#L853|OpenSenseMap API code reference on GitHub}\n */\nexport type UpdateBoxSensorDeleted = Pick<Sensor, '_id'> & {\n\tdeleted: true;\n};\n","import axios from 'axios';\nimport { literal, mask, object } from 'superstruct';\nimport type { DateRFC3339, OpenSenseMapID } from '../globalTypes';\nimport { BOX_TRANSFER_INFORMATION } from './_boxModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Boxes-updateTransfer\n */\nexport async function updateTransfer(senseBoxId: OpenSenseMapID, transferToken: string, expiresAt: DateRFC3339, authorization: string) {\n\tconst response = await axios.put(\n\t\t`https://api.opensensemap.org/boxes/transfer/${senseBoxId}`,\n\t\t{\n\t\t\ttoken: transferToken,\n\t\t\tdate: expiresAt\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t\t}\n\t\t}\n\t);\n\n\treturn mask(response.data, UPDATE_TRANSFER_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/boxesController.js#L556C1-L556C2|OpenSenseMap API code reference on GitHub}\n */\nconst UPDATE_TRANSFER_RESULT = object({\n\tmessage: literal('Transfer successfully updated'),\n\tdata: BOX_TRANSFER_INFORMATION\n});\n","import axios from 'axios';\nimport { array, literal, mask, number, object, optional, string, union } from 'superstruct';\nimport type { ExposureType } from '../box/_boxModels';\nimport { type CoordinatesWGS84, DATE_RFC3339, type DateRFC3339 } from '../globalTypes';\n\n/**\n * @see https://docs.opensensemap.org/#api-Interpolation-calculateIdw\n */\nexport async function calculateIdw(phenomenon: string, bbox: CoordinatesWGS84, options?: CalculateIdwOptions) {\n\tif (options?.['from-date'] && options['from-date'] instanceof Date) {\n\t\toptions['from-date'] = options['from-date'].toISOString();\n\t}\n\n\tif (options?.['to-date'] && options['to-date'] instanceof Date) {\n\t\toptions['to-date'] = options['to-date'].toISOString();\n\t}\n\n\tif (options?.exposure && Array.isArray(options.exposure)) {\n\t\toptions.exposure = options.exposure.join();\n\t}\n\n\tconst response = await axios.get('https://api.opensensemap.org/statistics/idw', {\n\t\tparams: Object.assign({ phenomenon, bbox }, options)\n\t});\n\n\treturn mask(response.data, CALCULATE_IDW_RESULT);\n}\n\nexport type CalculateIdwOptions = {\n\t'from-date'?: DateRFC3339 | Date;\n\t'to-date'?: DateRFC3339 | Date;\n\tgridType?: 'hex' | 'square' | 'triangle';\n\tcellWidth?: number;\n\tpower?: number;\n\tnumTimeSteps?: number;\n\tnumClasses?: number;\n\texposure?: string | ExposureType[];\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/statisticsController.js#L112C7-L112C7|OpenSenseMap API code reference on GitHub}\n */\nconst CALCULATE_IDW_RESULT = union([\n\tobject({\n\t\tcode: literal('NotFound'),\n\t\tmessage: literal('no measurements found')\n\t}),\n\tobject({\n\t\tcode: literal('Ok'),\n\t\tdata: object({\n\t\t\tbreaks: array(number()),\n\t\t\tfeatureCollection: array(\n\t\t\t\tobject({\n\t\t\t\t\ttype: literal('FeatureCollection'),\n\t\t\t\t\tfeatures: object({\n\t\t\t\t\t\ttype: string(),\n\t\t\t\t\t\tproperties: optional(\n\t\t\t\t\t\t\tobject({\n\t\t\t\t\t\t\t\tidwValues: array(number())\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\tgeometry: object({\n\t\t\t\t\t\t\ttype: string(),\n\t\t\t\t\t\t\tcoordinates: array(array(array(number())))\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t),\n\t\t\ttimesteps: array(DATE_RFC3339)\n\t\t})\n\t})\n]);\n","import axios from 'axios';\nimport { literal, mask, object, pattern, string } from 'superstruct';\nimport type { DateRFC3339, OpenSenseMapID } from '../globalTypes';\n\n/**\n * @see https://docs.opensensemap.org/#api-Measurements-deleteMeasurements\n */\nexport async function deleteMeasurements(\n\tsenseBoxId: OpenSenseMapID,\n\tsensorId: OpenSenseMapID,\n\tauthorization: string,\n\toptions?: DeleteMeasurementsOptions\n) {\n\tif (options?.['from-date'] && options['from-date'] instanceof Date) {\n\t\toptions['from-date'] = options['from-date'].toISOString();\n\t}\n\n\tif (options?.['to-date'] && options['to-date'] instanceof Date) {\n\t\toptions['to-date'] = options['to-date'].toISOString();\n\t}\n\n\tif (options && Array.isArray(options.timestamps)) {\n\t\toptions.timestamps = options.timestamps.map((element) => {\n\t\t\tif (element instanceof Date) {\n\t\t\t\treturn element.toISOString();\n\t\t\t}\n\n\t\t\treturn element;\n\t\t});\n\t}\n\n\tconst response = await axios.delete(`https://api.opensensemap.org/boxes/${senseBoxId}/${sensorId}/measurements`, {\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t},\n\t\tdata: options\n\t});\n\n\treturn mask(response.data, DELETE_MEASUREMENTS_RESULT);\n}\n\nexport type DeleteMeasurementsOptions = {\n\t'from-date'?: DateRFC3339 | Date;\n\t'to-date'?: DateRFC3339 | Date;\n\ttimestamps?: Array<DateRFC3339 | Date>;\n\tdeleteAllMeasurements?: boolean;\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/sensorsController.js#L47|OpenSenseMap API code reference on GitHub}\n */\nconst DELETE_MEASUREMENTS_RESULT = object({\n\tcode: literal('Ok'),\n\tmessage: pattern(string(), /^Successfully deleted (all measurements|\\d+ measurements|measurements between .+ and .+) of sensor .+$/)\n});\n","import axios from 'axios';\nimport { array, boolean, mask, object, optional, string } from 'superstruct';\nimport type { DateRFC3339, OpenSenseMapID } from '../globalTypes';\nimport { COORDINATES, DATE_RFC3339 } from '../globalTypes';\n\n/**\n * @see https://docs.opensensemap.org/#api-Measurements-getData\n */\nexport async function getData(senseBoxId: OpenSenseMapID, sensorId: OpenSenseMapID, options?: GetDataOptions) {\n\tif (options?.['from-date'] && options['from-date'] instanceof Date) {\n\t\toptions['from-date'] = options['from-date'].toISOString();\n\t}\n\n\tif (options?.['to-date'] && options['to-date'] instanceof Date) {\n\t\toptions['to-date'] = options['to-date'].toISOString();\n\t}\n\n\tconst response = await axios.get(`https://api.opensensemap.org/boxes/${senseBoxId}/data/${sensorId}`, {\n\t\tparams: options\n\t});\n\n\treturn mask(response.data, GET_DATA_RESULT);\n}\n\nexport type GetDataOptions = {\n\t'from-date'?: DateRFC3339 | Date;\n\t'to-date'?: DateRFC3339 | Date;\n\toutliers?: 'replace' | 'mark';\n\t'outlier-window'?: number;\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/measurement/measurement.js#L154C4-L154C4|OpenSenseMap API code reference on GitHub}\n */\nconst GET_DATA_RESULT = array(\n\tobject({\n\t\tvalue: string(),\n\t\tlocation: COORDINATES,\n\t\tcreatedAt: DATE_RFC3339,\n\t\tisOutlier: optional(boolean())\n\t})\n);\n","import axios from 'axios';\nimport { array, mask, object, string } from 'superstruct';\nimport { DATE_RFC3339, OPENSENSEMAP_ID } from '../globalTypes';\n\n/**\n * @see https://docs.opensensemap.org/#api-Measurements-getDataByGroupTag\n */\nexport async function getDataByGroupTag(grouptag: string | string[]) {\n\ttry {\n\t\tconst response = await axios.get('https://api.opensensemap.org/boxes/data/bytag', {\n\t\t\tparams: {\n\t\t\t\tgrouptag: Array.isArray(grouptag) ? grouptag.join() : grouptag\n\t\t\t}\n\t\t});\n\n\t\treturn mask(response.data, GET_DATA_BY_GROUP_TAG_RESULT);\n\t} catch (error) {\n\t\tif (\n\t\t\taxios.isAxiosError<{ message?: string }>(error) &&\n\t\t\terror.response?.status === 404 &&\n\t\t\terror.response.data?.message === 'No senseBoxes found'\n\t\t) {\n\t\t\treturn [];\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/box/box.js#L807|OpenSenseMap API code reference on GitHub}\n */\nconst GET_DATA_BY_GROUP_TAG_RESULT = array(\n\tobject({\n\t\tboxId: OPENSENSEMAP_ID,\n\t\tsensorId: OPENSENSEMAP_ID,\n\t\tvalue: string(),\n\t\tcreatedAt: DATE_RFC3339\n\t})\n);\n","import axios from 'axios';\nimport { array, intersection, mask, object, optional, record, string } from 'superstruct';\nimport { type Columns, COLUMNS, type ExposureType } from '../box/_boxModels';\nimport { type CoordinatesWGS84, DATE_RFC3339, type DateRFC3339, type OpenSenseMapID } from '../globalTypes';\n\n/**\n * @see https://docs.opensensemap.org/#api-Measurements-getDataMulti\n */\nexport async function getDataMulti(phenomenon: string, target: GetDataMultiParamTarget, options?: GetDataMultiOptions) {\n\tif ('boxId' in target && Array.isArray(target.boxId)) {\n\t\ttarget.boxId = target.boxId.join();\n\t}\n\n\tif (options?.['from-date'] && options['from-date'] instanceof Date) {\n\t\toptions['from-date'] = options['from-date'].toISOString();\n\t}\n\n\tif (options?.['to-date'] && options['to-date'] instanceof Date) {\n\t\toptions['to-date'] = options['to-date'].toISOString();\n\t}\n\n\tif (options?.columns && Array.isArray(options.columns)) {\n\t\toptions.columns = options.columns.join();\n\t}\n\n\tif (options?.exposure && Array.isArray(options.exposure)) {\n\t\toptions.exposure = options.exposure.join();\n\t}\n\n\tconst response = await axios.get('https://api.opensensemap.org/boxes/data', {\n\t\tparams: Object.assign(\n\t\t\t{\n\t\t\t\tformat: 'json',\n\t\t\t\tphenomenon\n\t\t\t},\n\t\t\ttarget,\n\t\t\toptions\n\t\t)\n\t});\n\n\treturn mask(response.data, GET_DATA_MULTI_RESULT);\n}\n\nexport type GetDataMultiParamTarget =\n\t| {\n\t\t\tboxId: OpenSenseMapID | OpenSenseMapID[];\n\t  }\n\t| {\n\t\t\tbbox: CoordinatesWGS84;\n\t  };\n\nexport type GetDataMultiOptions = {\n\t'from-date'?: DateRFC3339 | Date;\n\t'to-date'?: DateRFC3339 | Date;\n\tcolumns?: string | Columns[];\n\texposure?: string | ExposureType[];\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/measurementsController.js#L239|OpenSenseMap API code reference on GitHub}\n */\nconst GET_DATA_MULTI_RESULT = array(\n\tintersection([\n\t\tobject({\n\t\t\tcreatedAt: DATE_RFC3339,\n\t\t\tvalue: string()\n\t\t}),\n\t\trecord(COLUMNS, optional(string()))\n\t])\n);\n","import { type Infer, intersection, literal, object, optional, string } from 'superstruct';\nimport { SENSOR } from '../box/_boxModels';\nimport { COORDINATES, DATE_RFC3339, OPENSENSEMAP_ID } from '../globalTypes';\n\n//\n// https://docs.opensensemap.org/#api-Measurements\n//\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/box/box.js#L155C4-L155C4|OpenSenseMap API code reference on GitHub}\n */\nexport const LAST_MEASUREMENT = object({\n\tvalue: string(),\n\tcreatedAt: DATE_RFC3339\n});\n\nexport type LastMeasurement = Infer<typeof LAST_MEASUREMENT>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/measurement/measurement.js#L8|OpenSenseMap API code reference on GitHub}\n */\nexport const MEASUREMENT = object({\n\t_id: OPENSENSEMAP_ID,\n\tvalue: string(),\n\tsensor_id: OPENSENSEMAP_ID,\n\tcreatedAt: DATE_RFC3339,\n\tlocation: object({\n\t\ttype: literal('Point'),\n\t\tcoordinates: COORDINATES\n\t})\n});\n\nexport type Measurement = Infer<typeof MEASUREMENT>;\n\nexport const LATEST_MEASUREMENT_SENSOR = intersection([\n\tSENSOR,\n\tobject({\n\t\tlastMeasurement: optional(LAST_MEASUREMENT)\n\t})\n]);\n\nexport type GetLatestMeasurement = Infer<typeof LATEST_MEASUREMENT_SENSOR>;\n","import axios from 'axios';\nimport { mask, optional, string, union } from 'superstruct';\nimport type { OpenSenseMapID } from '../globalTypes';\nimport { LATEST_MEASUREMENT_SENSOR } from './_measurementModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Measurements-getLatestMeasurementOfSensor\n */\nexport async function getLatestMeasurementOfSensor(\n\tsenseBoxId: OpenSenseMapID,\n\tsensorId: OpenSenseMapID,\n\toptions?: GetLatestMeasurementOfSensorOptions\n) {\n\tconst response = await axios.get(`https://api.opensensemap.org/boxes/${senseBoxId}/sensors/${sensorId}`, { params: options });\n\treturn mask(response.data, GET_LATEST_MEASUREMENT_OF_SENSOR_RESULT);\n}\n\nexport type GetLatestMeasurementOfSensorOptions = {\n\tonlyValue?: boolean;\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/measurementsController.js#L82C48-L82C48|OpenSenseMap API code reference on GitHub}\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/measurementsController.js#L86|OpenSenseMap API code reference on GitHub}\n */\nconst GET_LATEST_MEASUREMENT_OF_SENSOR_RESULT = optional(union([LATEST_MEASUREMENT_SENSOR, string()]));\n","import axios from 'axios';\nimport { array, mask, object, optional, string } from 'superstruct';\nimport { OPENSENSEMAP_ID, type OpenSenseMapID } from '../globalTypes';\nimport { LATEST_MEASUREMENT_SENSOR } from './_measurementModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Measurements-getLatestMeasurements\n */\nexport default async function getLatestMeasurements(senseBoxId: OpenSenseMapID, options?: GetLatestMeasurementsOptions) {\n\tconst response = await axios.get(`https://api.opensensemap.org/boxes/${senseBoxId}/sensors`, { params: options });\n\treturn mask(response.data, GET_LATEST_MEASUREMENTS_RESULT);\n}\n\nexport type GetLatestMeasurementsOptions = {\n\tcount: number;\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/measurementsController.js#L93|OpenSenseMap API code reference on GitHub}\n */\nconst GET_LATEST_MEASUREMENTS_RESULT = object({\n\t_id: OPENSENSEMAP_ID,\n\tname: optional(string()),\n\tsensors: array(LATEST_MEASUREMENT_SENSOR),\n\tgrouptag: optional(string())\n});\n","import axios from 'axios';\nimport { literal, mask } from 'superstruct';\nimport type { DateRFC3339, OpenSenseMapID } from '../globalTypes';\n\n/**\n * @see https://docs.opensensemap.org/#api-Measurements-postNewMeasurement\n */\nexport async function postNewMeasurement(\n\tsenseBoxId: OpenSenseMapID,\n\tsensorId: OpenSenseMapID,\n\tvalue: string | number,\n\tboxAuthorization?: string,\n\toptions?: PostNewMeasurementOptions\n) {\n\tif (options?.createdAt && options.createdAt instanceof Date) {\n\t\toptions.createdAt = options.createdAt.toISOString();\n\t}\n\n\tconst response = await axios.post(\n\t\t`https://api.opensensemap.org/boxes/${senseBoxId}/${sensorId}`,\n\t\tObject.assign(\n\t\t\t{\n\t\t\t\tvalue: typeof value === 'string' ? value : value.toString()\n\t\t\t},\n\t\t\toptions\n\t\t),\n\t\t{\n\t\t\theaders: boxAuthorization ? { Authorization: boxAuthorization } : {}\n\t\t}\n\t);\n\n\treturn mask(response.data, POST_NEW_MEASUREMENT_RESULT);\n}\n\nexport type PostNewMeasurementOptions = {\n\tcreatedAt?: DateRFC3339 | Date;\n\tlocation?: Location;\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/measurementsController.js#L315|OpenSenseMap API code reference on GitHub}\n */\nconst POST_NEW_MEASUREMENT_RESULT = literal('Measurement saved in box');\n","import axios from 'axios';\nimport { literal, mask } from 'superstruct';\nimport type { DateRFC3339, OpenSenseMapID } from '../globalTypes';\n\n/**\n * @see https://docs.opensensemap.org/#api-Measurements-postNewMeasurements\n */\nexport async function postNewMeasurements(senseBoxId: OpenSenseMapID, data: PostNewMeasurementsParamData, boxAuthorization?: string) {\n\tdata = data.map((element) => {\n\t\tif (typeof element.value === 'number') {\n\t\t\telement.value = element.value.toString();\n\t\t}\n\n\t\tif (element.createdAt && element.createdAt instanceof Date) {\n\t\t\telement.createdAt = element.createdAt.toISOString();\n\t\t}\n\n\t\treturn element;\n\t});\n\n\tconst response = await axios.post(`https://api.opensensemap.org/boxes/${senseBoxId}/data`, data, {\n\t\theaders: boxAuthorization ? { Authorization: boxAuthorization } : {}\n\t});\n\n\treturn mask(response.data, POST_NEW_MEASUREMENTS_RESULT);\n}\n\nexport type PostNewMeasurementsParamData = {\n\tsensor: OpenSenseMapID;\n\tvalue: string | number;\n\tcreatedAt?: DateRFC3339 | Date;\n\tlocation?: Location;\n}[];\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/measurementsController.js#L425|OpenSenseMap API code reference on GitHub}\n */\nconst POST_NEW_MEASUREMENTS_RESULT = literal('Measurements saved in box');\n","import axios from 'axios';\nimport { array, mask, number, string, union } from 'superstruct';\n\n/**\n * @see https://docs.opensensemap.org/#api-Misc-getStatistics\n */\nexport async function getStatistics(options?: GetStatisticsOptions) {\n\tconst response = await axios.get('https://api.opensensemap.org/stats', {\n\t\tparams: options\n\t});\n\n\treturn mask(response.data, GET_STATISTICS_RESULT);\n}\n\nexport type GetStatisticsOptions = {\n\thuman?: boolean;\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/statisticsController.js#L43|OpenSenseMap API code reference on GitHub}\n */\nconst GET_STATISTICS_RESULT = union([array(number()), array(string())]);\n","import axios from 'axios';\nimport { mask, string } from 'superstruct';\n\n/**\n * @see https://docs.opensensemap.org/#api-Misc-printRoutes\n */\nexport async function printRoutes() {\n\tconst response = await axios.get('https://api.opensensemap.org/');\n\treturn mask(response.data, PRINT_ROUTES_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/routes.js#L67|OpenSenseMap API code reference on GitHub}\n */\nconst PRINT_ROUTES_RESULT = string();\n","import axios from 'axios';\nimport { array, intersection, mask, number, object, optional, record, string } from 'superstruct';\nimport { type Columns, COLUMNS, type ExposureType } from '../box/_boxModels';\nimport { type CoordinatesWGS84, DATE_RFC3339, type DateRFC3339, OPENSENSEMAP_ID, type OpenSenseMapID } from '../globalTypes';\nimport type { Operation } from './_statisticModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Statistics-descriptive\n */\nexport async function descriptive(\n\ttarget: DescriptiveParamTarget,\n\tphenomenon: string,\n\tfromDate: DateRFC3339 | Date,\n\ttoDate: DateRFC3339 | Date,\n\toperation: Operation,\n\twindow: string,\n\toptions?: DescriptiveOptions\n) {\n\tif ('boxId' in target && Array.isArray(target.boxId)) {\n\t\ttarget.boxId = target.boxId.join();\n\t}\n\n\tif (fromDate instanceof Date) {\n\t\tfromDate = fromDate.toISOString();\n\t}\n\n\tif (toDate instanceof Date) {\n\t\ttoDate = toDate.toISOString();\n\t}\n\n\tif (options?.columns && Array.isArray(options.columns)) {\n\t\toptions.columns = options.columns.join();\n\t}\n\n\tif (options?.exposure && Array.isArray(options.exposure)) {\n\t\toptions.exposure = options.exposure.join();\n\t}\n\n\tconst response = await axios.get('https://api.opensensemap.org/statistics/descriptive', {\n\t\tparams: Object.assign(\n\t\t\t{\n\t\t\t\tphenomenon,\n\t\t\t\t'from-date': fromDate,\n\t\t\t\t'to-date': toDate,\n\t\t\t\toperation,\n\t\t\t\twindow,\n\t\t\t\tformat: 'json'\n\t\t\t},\n\t\t\ttarget,\n\t\t\toptions\n\t\t)\n\t});\n\n\treturn mask(response.data, DESCRIPTIVE_RESULT);\n}\n\nexport type DescriptiveParamTarget =\n\t| {\n\t\t\tboxId: OpenSenseMapID | OpenSenseMapID[];\n\t  }\n\t| {\n\t\t\tbbox: CoordinatesWGS84;\n\t  };\n\nexport type DescriptiveOptions = {\n\tcolumns?: string | Columns[];\n\texposure?: string | ExposureType[];\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/statisticsController.js#L325|OpenSenseMap API code reference on GitHub}\n */\nconst DESCRIPTIVE_RESULT = array(\n\tintersection([\n\t\tobject({\n\t\t\tsensorId: OPENSENSEMAP_ID\n\t\t}),\n\t\trecord(COLUMNS, optional(string())),\n\t\trecord(DATE_RFC3339, number())\n\t])\n);\n","import axios from 'axios';\nimport { literal, mask, object } from 'superstruct';\n\n/**\n * @see https://docs.opensensemap.org/#api-Users-confirm_email\n */\nexport async function confirmEmail(email: string, confirmationToken: string) {\n\tconst response = await axios.post('https://api.opensensemap.org/users/confirm-email', {\n\t\temail,\n\t\ttoken: confirmationToken\n\t});\n\n\treturn mask(response.data, CONFIRM_EMAIL_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/usersController.js#L236|OpenSenseMap API code reference on GitHub}\n */\nconst CONFIRM_EMAIL_RESULT = object({\n\tcode: literal('Ok'),\n\tmessage: literal('E-Mail successfully confirmed. Thank you')\n});\n","import axios from 'axios';\nimport { literal, mask, object } from 'superstruct';\n\n/**\n * @see https://docs.opensensemap.org/#api-Users-deleteUser\n */\nexport async function deleteUser(password: string, authorization: string) {\n\tconst response = await axios.delete('https://api.opensensemap.org/users/me', {\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t},\n\t\tdata: {\n\t\t\tpassword\n\t\t}\n\t});\n\n\treturn mask(response.data, DELETE_USER_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/usersController.js#L330|OpenSenseMap API code reference on GitHub}\n */\nconst DELETE_USER_RESULT = object({\n\tcode: literal('Ok'),\n\tmessage: literal('User and all boxes of user marked for deletion. Bye Bye!')\n});\n","import { type Infer, array, boolean, enums, intersection, object, optional, pattern, string } from 'superstruct';\nimport { DATE_RFC3339, OPENSENSEMAP_ID } from '../globalTypes';\n\n/**\n * The user name must consist of at least 3 and up to 40 characters and only allows to use alphanumerics (a-zA-Z0-9), dots (.), dashes (-), underscores (_) and spaces. The first character must be a letter or number.\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/user/user.js#L30|OpenSenseMap API code reference on GitHub}\n */\nexport const USER_NAME = pattern(string(), /^[a-zA-Z0-9][a-zA-Z0-9 .\\-_]{2,39}$/);\nexport type UserName = Infer<typeof USER_NAME>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/user/user.js#L88|OpenSenseMap API code reference on GitHub}\n */\nexport const USER_ROLE = enums(['user', 'admin']);\nexport type UserRole = Infer<typeof USER_ROLE>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/user/user.js#L68|OpenSenseMap API code reference on GitHub}\n */\nexport const LANGUAGE = enums(['de_DE', 'en_US']);\nexport type Language = Infer<typeof LANGUAGE>;\n\nexport const EMAIL_ADDRESS = pattern(string(), /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/);\nexport type EmailAddress = Infer<typeof EMAIL_ADDRESS>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/user/user.js#L29|OpenSenseMap API code reference on GitHub}\n */\nexport const USER_DATA = object({\n\tname: USER_NAME,\n\temail: string(),\n\trole: USER_ROLE,\n\tlanguage: LANGUAGE,\n\tboxes: array(OPENSENSEMAP_ID),\n\tsharedBoxes: optional(array(OPENSENSEMAP_ID)),\n\temailIsConfirmed: boolean(),\n\tintegrations: optional(object())\n});\n\nexport type UserData = Infer<typeof USER_DATA>;\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/models/src/user/user.js#L115|OpenSenseMap API code reference on GitHub}\n */\nexport const USER_DATA_WITH_SECRETS = intersection([\n\tUSER_DATA,\n\tobject({\n\t\t_id: OPENSENSEMAP_ID,\n\t\tunconfirmedEmail: string(),\n\t\tlastUpdatedBy: DATE_RFC3339,\n\t\tcreatedAt: DATE_RFC3339,\n\t\tupdatedAt: DATE_RFC3339\n\t})\n]);\n\nexport type UserDataWithSecrets = Infer<typeof USER_DATA_WITH_SECRETS>;\n","import axios from 'axios';\nimport { literal, mask, object } from 'superstruct';\nimport { USER_DATA } from './_userModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Users-getUser\n */\nexport async function getUser(authorization: string) {\n\tconst response = await axios.get('https://api.opensensemap.org/users/me', {\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t}\n\t});\n\n\treturn mask(response.data, GET_USER_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/usersController.js#L274|OpenSenseMap API code reference on GitHub}\n */\nconst GET_USER_RESULT = object({\n\tcode: literal('Ok'),\n\tdata: object({\n\t\tme: USER_DATA\n\t})\n});\n","import axios from 'axios';\nimport { literal, mask, object } from 'superstruct';\nimport { BOX_DATA_WITH_SECRETS } from '../box/_boxModels';\nimport type { OpenSenseMapID } from '../globalTypes';\n\n/**\n * @see https://docs.opensensemap.org/#api-Users-getUserBox\n */\nexport async function getUserBox(senseBoxId: OpenSenseMapID, authorization: string) {\n\tconst response = await axios.get(`https://api.opensensemap.org/users/me/boxes/${senseBoxId}`, {\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t}\n\t});\n\n\treturn mask(response.data, GET_USER_BOX_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/861dd9b2e9498b380b52839da84aa9ab27f1fc42/packages/api/lib/controllers/usersController.js#L281|OpenSenseMap API code reference on GitHub}\n */\nconst GET_USER_BOX_RESULT = object({\n\tcode: literal('Ok'),\n\tdata: object({\n\t\tbox: BOX_DATA_WITH_SECRETS\n\t})\n});\n","import axios from 'axios';\nimport { array, integer, literal, mask, object } from 'superstruct';\nimport { BOX_DATA_WITH_SECRETS } from '../box/_boxModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Users-getUserBoxes\n */\nexport async function getUserBoxes(authorization: string, options?: GetUserBoxesOptions) {\n\tconst response = await axios.get('https://api.opensensemap.org/users/me/boxes', {\n\t\tparams: options,\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t}\n\t});\n\n\treturn mask(response.data, GET_USER_BOXES_RESULT);\n}\n\nexport type GetUserBoxesOptions = {\n\tpage?: number;\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/861dd9b2e9498b380b52839da84aa9ab27f1fc42/packages/api/lib/controllers/usersController.js#L259|OpenSenseMap API code reference on GitHub}\n */\nconst GET_USER_BOXES_RESULT = object({\n\tcode: literal('Ok'),\n\tdata: object({\n\t\tboxes: array(BOX_DATA_WITH_SECRETS),\n\t\tboxes_count: integer(),\n\t\tsharedBoxes: array(BOX_DATA_WITH_SECRETS)\n\t})\n});\n","import axios from 'axios';\nimport { literal, mask, object } from 'superstruct';\n\n/**\n * @see https://docs.opensensemap.org/#api-Users-password_reset\n */\nexport async function passwordReset(newPassword: string, confirmationToken: string) {\n\tconst response = await axios.post('https://api.opensensemap.org/users/password-reset', {\n\t\tpassword: newPassword,\n\t\ttoken: confirmationToken\n\t});\n\n\treturn mask(response.data, PASSWORD_RESET_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/usersController.js#L193|OpenSenseMap API code reference on GitHub}\n */\nconst PASSWORD_RESET_RESULT = object({\n\tcode: literal('Ok'),\n\tmessage: literal('Password successfully changed. You can now login with your new password')\n});\n","import axios from 'axios';\nimport { literal, mask, object, string } from 'superstruct';\nimport { USER_DATA } from './_userModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Users-refresh_auth\n */\nexport async function refreshAuth(refreshToken: string) {\n\tconst response = await axios.post('https://api.opensensemap.org/users/refresh-auth', {\n\t\ttoken: refreshToken\n\t});\n\n\treturn mask(response.data, REFRESH_AUTH_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/usersController.js#L153|OpenSenseMap API code reference on GitHub}\n */\nconst REFRESH_AUTH_RESULT = object({\n\tcode: literal('Authorized'),\n\tmessage: literal('Successfully refreshed auth'),\n\tdata: object({\n\t\tuser: USER_DATA\n\t}),\n\ttoken: string(),\n\trefreshToken: string()\n});\n","import axios from 'axios';\nimport { literal, mask, object, string } from 'superstruct';\nimport { type Language, USER_DATA, type UserName } from './_userModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Users-register\n */\nexport async function register(userName: UserName, email: string, password: string, options?: RegisterOptions) {\n\tconst response = await axios.post(\n\t\t'https://api.opensensemap.org/users/register',\n\t\tObject.assign(\n\t\t\t{\n\t\t\t\tname: userName,\n\t\t\t\temail,\n\t\t\t\tpassword\n\t\t\t},\n\t\t\toptions\n\t\t)\n\t);\n\n\treturn mask(response.data, REGISTER_RESULT);\n}\n\nexport type RegisterOptions = {\n\tlanguage?: Language;\n\tintegrations?: object;\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/usersController.js#L67|OpenSenseMap API code reference on GitHub}\n */\nconst REGISTER_RESULT = object({\n\tcode: literal('Created'),\n\tmessage: literal('Successfully registered new user'),\n\tdata: object({\n\t\tuser: USER_DATA\n\t}),\n\ttoken: string(),\n\trefreshToken: string()\n});\n","import axios from 'axios';\nimport { literal, mask, object } from 'superstruct';\n\n/**\n * @see https://docs.opensensemap.org/#api-Users-request_password_reset\n */\nexport async function requestPasswordReset(email: string) {\n\tconst reponse = await axios.post('https://api.opensensemap.org/users/request-password-reset', {\n\t\temail\n\t});\n\n\treturn mask(reponse.data, REQUEST_PASSWORD_RESET_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/usersController.js#L193|OpenSenseMap API code reference on GitHub}\n */\nconst REQUEST_PASSWORD_RESET_RESULT = object({\n\tcode: literal('Ok'),\n\tmessage: literal('Password reset initiated')\n});\n","import axios from 'axios';\nimport { literal, mask, object, string } from 'superstruct';\n\n/**\n * @see https://docs.opensensemap.org/#api-Users-resend_email_confirmation\n */\nexport async function resendEmailConfirmation(authorization: string) {\n\tconst response = await axios.post('https://api.opensensemap.org/users/me/resend-email-confirmation', undefined, {\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t}\n\t});\n\n\treturn mask(response.data, RESEND_EMAIL_CONFIRMATION_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/usersController.js#L362|OpenSenseMap API code reference on GitHub}\n */\nconst RESEND_EMAIL_CONFIRMATION_RESULT = object({\n\tcode: literal('Ok'),\n\tmessage: string()\n});\n","import axios from 'axios';\nimport { literal, mask, object, string } from 'superstruct';\nimport { USER_DATA } from './_userModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Users-sign_in\n */\nexport async function signIn(email: string, password: string) {\n\tconst response = await axios.post('https://api.opensensemap.org/users/sign-in', {\n\t\temail,\n\t\tpassword\n\t});\n\n\treturn mask(response.data, SIGN_IN_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/usersController.js#L118|OpenSenseMap API code reference on GitHub}\n */\nconst SIGN_IN_RESULT = object({\n\tcode: literal('Authorized'),\n\tmessage: literal('Successfully signed in'),\n\tdata: object({\n\t\tuser: USER_DATA\n\t}),\n\ttoken: string(),\n\trefreshToken: string()\n});\n","import axios from 'axios';\nimport { literal, mask, object } from 'superstruct';\n\n/**\n * @see https://docs.opensensemap.org/#api-Users-sign_out\n */\nexport async function signOut(authorization: string) {\n\tconst response = await axios.post('https://api.opensensemap.org/users/sign-out', undefined, {\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t}\n\t});\n\n\treturn mask(response.data, SIGN_OUT_RESULT);\n}\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/usersController.js#L177|OpenSenseMap API code reference on GitHub}\n */\nconst SIGN_OUT_RESULT = object({\n\tcode: literal('Ok'),\n\tmessage: literal('Successfully signed out')\n});\n","import axios from 'axios';\nimport { enums, literal, mask, object, union } from 'superstruct';\nimport { type Language, USER_DATA } from './_userModels';\n\n/**\n * @see https://docs.opensensemap.org/#api-Users-updateUser\n */\nexport async function updateUser(currentPassword: string, authorization: string, options: UpdateUserOptions) {\n\tconst response = await axios.put(\n\t\t'https://api.opensensemap.org/users/me',\n\t\tObject.assign(\n\t\t\t{\n\t\t\t\tcurrentPassword\n\t\t\t},\n\t\t\toptions\n\t\t),\n\t\t{\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${authorization}`\n\t\t\t}\n\t\t}\n\t);\n\n\treturn mask(response.data, UPDATE_USER_RESULT);\n}\n\nexport type UpdateUserOptions = {\n\temail?: string;\n\tlanguage?: Language;\n\tname?: string;\n\tnewPassword?: string;\n\tintegrations?: object;\n};\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/2e645bdc4c80e668720b5eaaf384a35d2909569e/packages/api/lib/controllers/usersController.js#L303|OpenSenseMap API code reference on GitHub}\n */\nconst UPDATE_USER_RESULT_UPDATED = object({\n\tcode: literal('Ok'),\n\tmessage: enums([\n\t\t'User successfully saved.',\n\t\t'User successfully saved. E-Mail changed. Please confirm your new address. Until confirmation, sign in using your old address',\n\t\t'User successfully saved. Password changed. Please sign in with your new password'\n\t]),\n\tdata: object({\n\t\tme: USER_DATA\n\t})\n});\n\n/**\n * @see {@link https://github.com/sensebox/openSenseMap-API/blob/11695a33cf0260a62aecbefd76c46735b690be62/packages/api/lib/controllers/usersController.js#L320|OpenSenseMap API code reference on GitHub}\n */\nconst UPDATE_USER_RESULT_USER_NOT_UPDATED = object({\n\tcode: literal('Ok'),\n\tmessage: literal('User not updated. No changed properties supplied.')\n});\n\nconst UPDATE_USER_RESULT = union([UPDATE_USER_RESULT_UPDATED, UPDATE_USER_RESULT_USER_NOT_UPDATED]);\n"]}