@evercam/api 1.0.0-000bac2be

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +7 -0
  2. package/dist/api/api/3dFirebaseApi.d.ts +215 -0
  3. package/dist/api/api/adminApi.d.ts +381 -0
  4. package/dist/api/api/aiApi.d.ts +251 -0
  5. package/dist/api/api/authzApi.d.ts +40 -0
  6. package/dist/api/api/client/axios.d.ts +14 -0
  7. package/dist/api/api/client/customErrors.d.ts +90 -0
  8. package/dist/api/api/client/index.d.ts +5 -0
  9. package/dist/api/api/client/interceptors.d.ts +10 -0
  10. package/dist/api/api/client/swr/Swr.d.ts +14 -0
  11. package/dist/api/api/client/swr/SwrStore.d.ts +10 -0
  12. package/dist/api/api/evercamApi.d.ts +365 -0
  13. package/dist/api/api/evercamLabsApi.d.ts +34 -0
  14. package/dist/api/api/exNvrApi.d.ts +43 -0
  15. package/dist/api/api/index.d.ts +14 -0
  16. package/dist/api/api/ingestApi.d.ts +161 -0
  17. package/dist/api/api/ptzApi.d.ts +45 -0
  18. package/dist/api/api/videoWallApi.d.ts +9 -0
  19. package/dist/api/api/weatherApi.d.ts +9 -0
  20. package/dist/api/api/webRtcApi.d.ts +22 -0
  21. package/dist/api/api/workflowsApi.d.ts +15 -0
  22. package/dist/api/index.d.ts +3 -0
  23. package/dist/api/types/360.d.ts +364 -0
  24. package/dist/api/types/aconex.d.ts +143 -0
  25. package/dist/api/types/admin.d.ts +51 -0
  26. package/dist/api/types/aiConfigs.d.ts +244 -0
  27. package/dist/api/types/analytics.d.ts +612 -0
  28. package/dist/api/types/anpr.d.ts +143 -0
  29. package/dist/api/types/auditLogs.d.ts +116 -0
  30. package/dist/api/types/authz.d.ts +132 -0
  31. package/dist/api/types/autodesk.d.ts +29 -0
  32. package/dist/api/types/automation.d.ts +123 -0
  33. package/dist/api/types/axios.d.ts +71 -0
  34. package/dist/api/types/bim.d.ts +176 -0
  35. package/dist/api/types/camera.d.ts +542 -0
  36. package/dist/api/types/comments.d.ts +64 -0
  37. package/dist/api/types/company.d.ts +115 -0
  38. package/dist/api/types/compare.d.ts +72 -0
  39. package/dist/api/types/connector.d.ts +21 -0
  40. package/dist/api/types/coolify.d.ts +36 -0
  41. package/dist/api/types/countries.d.ts +500 -0
  42. package/dist/api/types/credentials.d.ts +6 -0
  43. package/dist/api/types/detections.d.ts +117 -0
  44. package/dist/api/types/drone.d.ts +106 -0
  45. package/dist/api/types/errors.d.ts +61 -0
  46. package/dist/api/types/gateReport.d.ts +322 -0
  47. package/dist/api/types/gateReportManagement.d.ts +170 -0
  48. package/dist/api/types/hammertech.d.ts +98 -0
  49. package/dist/api/types/hdd.d.ts +88 -0
  50. package/dist/api/types/index.d.ts +71 -0
  51. package/dist/api/types/ingest.d.ts +234 -0
  52. package/dist/api/types/kit.d.ts +375 -0
  53. package/dist/api/types/map.d.ts +16 -0
  54. package/dist/api/types/media.d.ts +120 -0
  55. package/dist/api/types/notification.d.ts +107 -0
  56. package/dist/api/types/nvr.d.ts +36 -0
  57. package/dist/api/types/oauth.d.ts +62 -0
  58. package/dist/api/types/observationEvents.d.ts +141 -0
  59. package/dist/api/types/observations.d.ts +84 -0
  60. package/dist/api/types/planner.d.ts +125 -0
  61. package/dist/api/types/posthog.d.ts +53 -0
  62. package/dist/api/types/procore.d.ts +229 -0
  63. package/dist/api/types/progressPhoto.d.ts +78 -0
  64. package/dist/api/types/project.d.ts +259 -0
  65. package/dist/api/types/recording.d.ts +118 -0
  66. package/dist/api/types/recycleBin.d.ts +14 -0
  67. package/dist/api/types/ring.d.ts +53 -0
  68. package/dist/api/types/roi.d.ts +19 -0
  69. package/dist/api/types/routeParams.d.ts +53 -0
  70. package/dist/api/types/router.d.ts +86 -0
  71. package/dist/api/types/shared.d.ts +199 -0
  72. package/dist/api/types/shares.d.ts +45 -0
  73. package/dist/api/types/sim.d.ts +114 -0
  74. package/dist/api/types/siteAnalytics.d.ts +285 -0
  75. package/dist/api/types/siteAnalyticsManagement.d.ts +127 -0
  76. package/dist/api/types/siteView.d.ts +78 -0
  77. package/dist/api/types/smartSeach.d.ts +5 -0
  78. package/dist/api/types/snapshots.d.ts +104 -0
  79. package/dist/api/types/socket.d.ts +4 -0
  80. package/dist/api/types/sso.d.ts +55 -0
  81. package/dist/api/types/storageProvider.d.ts +19 -0
  82. package/dist/api/types/storyblok.d.ts +27 -0
  83. package/dist/api/types/streaming.d.ts +97 -0
  84. package/dist/api/types/systemCheck.d.ts +11 -0
  85. package/dist/api/types/tag.d.ts +12 -0
  86. package/dist/api/types/time.d.ts +7 -0
  87. package/dist/api/types/timelapse.d.ts +95 -0
  88. package/dist/api/types/user.d.ts +357 -0
  89. package/dist/api/types/videoWall.d.ts +66 -0
  90. package/dist/api/types/voyageControl.d.ts +6 -0
  91. package/dist/api/types/weather.d.ts +153 -0
  92. package/dist/api/types/widget.d.ts +252 -0
  93. package/dist/api/types/workflows.d.ts +108 -0
  94. package/dist/api/types/xweather.d.ts +12 -0
  95. package/dist/api/utils.d.ts +10 -0
  96. package/dist/index.d.ts +2 -0
  97. package/dist/index.js +4397 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/index.umd.cjs +2 -0
  100. package/dist/index.umd.cjs.map +1 -0
  101. package/dist/shared/api/index.d.ts +3 -0
  102. package/dist/shared/components/timelinePlayer/providers/index.d.ts +3 -0
  103. package/dist/shared/components/timelinePlayer/providers/timelineAnprProvider.d.ts +17 -0
  104. package/dist/shared/components/timelinePlayer/providers/timelineDataProvider.d.ts +13 -0
  105. package/dist/shared/components/timelinePlayer/providers/timelineLuminanceProvider.d.ts +16 -0
  106. package/dist/shared/types/components.d.ts +512 -0
  107. package/dist/shared/types/customDataTableFilters.d.ts +10 -0
  108. package/dist/shared/types/imagePlayer.d.ts +41 -0
  109. package/dist/shared/types/index.d.ts +7 -0
  110. package/dist/shared/types/observations.d.ts +25 -0
  111. package/dist/shared/types/rbac.d.ts +67 -0
  112. package/dist/shared/types/timeline.d.ts +10 -0
  113. package/package.json +52 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.cjs","sources":["../types/360.ts","../types/aconex.ts","../types/analytics.ts","../types/anpr.ts","../types/media.ts","../types/bim.ts","../types/camera.ts","../types/compare.ts","../types/drone.ts","../types/errors.ts","../types/gateReport.ts","../types/hdd.ts","../types/ingest.ts","../types/map.ts","../types/connector.ts","../types/notification.ts","../types/nvr.ts","../types/procore.ts","../types/progressPhoto.ts","../types/project.ts","../types/recording.ts","../types/roi.ts","../types/routeParams.ts","../types/router.ts","../types/shares.ts","../types/sim.ts","../types/systemCheck.ts","../types/planner.ts","../types/storageProvider.ts","../types/streaming.ts","../types/timelapse.ts","../types/user.ts","../types/videoWall.ts","../types/hammertech.ts","../types/weather.ts","../types/comments.ts","../types/detections.ts","../types/observations.ts","../types/shared.ts","../types/kit.ts","../types/auditLogs.ts","../types/snapshots.ts","../types/siteAnalytics.ts","../types/siteAnalyticsManagement.ts","../types/widget.ts","../types/countries.ts","../types/automation.ts","../types/posthog.ts","../types/authz.ts","../types/ring.ts","../types/siteView.ts","../types/aiConfigs.ts","../types/gateReportManagement.ts","../types/workflows.ts","../types/observationEvents.ts","../utils.ts","../api/client/customErrors.ts","../api/client/interceptors.ts","../../../node_modules/idb-keyval/dist/index.js","../api/client/swr/SwrStore.ts","../api/client/swr/Swr.ts","../api/client/axios.ts","../api/adminApi.ts","../api/videoWallApi.ts","../api/3dFirebaseApi.ts","../api/aiApi.ts","../api/webRtcApi.ts","../api/weatherApi.ts","../api/evercamLabsApi.ts","../api/evercamApi.ts","../api/ptzApi.ts","../api/ingestApi.ts","../api/exNvrApi.ts","../api/authzApi.ts","../api/workflowsApi.ts"],"sourcesContent":["import { DateType } from \"@evercam/api/types/time\"\nimport { GeoPoint, PaginationParams, Point3D } from \"@evercam/api/types/shared\"\n\nexport type _360OverlayPosition = {\n northEast: GeoPoint\n northWest: GeoPoint\n southEast: GeoPoint\n southWest: GeoPoint\n}\n\nexport type ForgeViewport = {\n name: string\n eye: number[]\n target: number[]\n worldUpVector?: number[]\n}\n\nexport type ForgeView = {\n name: string\n viewport: ForgeViewport\n timestamp: string\n}\n\nexport type _360CameraRotation = {\n azimuthAngle: number\n polarAngle: number\n}\n\nexport type _360Geolocation = {\n latitude: number\n longitude: number\n}\n\nexport type _360Marker3D = {\n cameraPosition: Point3D\n geolocation: _360Geolocation\n nextRoomId: _360MakerId\n position: Point3D\n rotation: {\n _order: \"XYZ\" | string\n _x: number\n _y: number\n _z: number\n isEuler: boolean\n }\n}\n\nexport type _360Tag = {\n id: string\n tagType: string\n comment: string\n creationDate: number\n currentRoom: _360MakerId\n position: Point3D\n cameraRotation: _360CameraRotation\n}\n\nexport type _360FloorId = string | number\n\nexport type _360Walk = Record<_360FloorId, _360Floor>\n\nexport type _360MakerId = string\n\nexport type _360Floor = {\n _3DMarkers: _360Marker3D[]\n cameraRotation: _360CameraRotation\n fbxModel: string\n fbxModelHQ?: string\n pointCloudModelHQ?: string\n initialMarker: _360MakerId\n modelViewerFeatureFlag: boolean\n imagesOnlyFeatureFlag?: boolean\n forgeBIMFeatureFlag?: boolean\n isForgeGravityEnabled?: boolean\n bimHeight?: number\n initialForgeView?: ForgeView | null\n enhancedLightFeatureFlag?: boolean\n calibrationDetails?: Record<string, unknown>\n route: {\n cameraHeadingOffset: string\n overlayID: number\n track: string\n }\n sceneScale: number\n steps: number\n tags?: Record<string, _360Tag>\n}\n\nexport type _360WalkV2 = {\n archive: string\n date: string\n deviceSerial: string | null\n endPosition: string | null\n floor: string\n floorId: number\n id: number\n images: string[]\n insertedAt: string\n mobileAudios: string[]\n mobileAudiosArchive: string\n mobilePhotos: string[]\n mobilePhotosArchive: string\n model: string\n name: string\n processingStatus: string\n projectId: string\n report: string\n processingLog: string\n hasSteps?: boolean\n route: unknown | null\n startPosition: string | null\n tusLinks: unknown | null\n updatedAt: string\n uploadedBy: string\n videoArchive: string\n videos: string[]\n}\n\nexport type _360FloorV2 = {\n id: _360FloorId\n assets: _360WalkV2[]\n projectId: string\n name: string\n mapStyle: string\n hasOverlay: boolean\n isCalibrated: boolean\n createdBy: string | null\n overlayPosition: _360OverlayPosition\n insertedAt: string\n updatedAt: string\n deletedAt: string | null\n}\n\nexport type _360Scene = {\n date: string // DD-MM-YYYY\n dateID: string | number\n floors: {\n floorID: _360FloorId\n name: string\n isValidated?: boolean\n }[]\n polarAngle: number\n azimuthAngle: number\n}\n\nexport enum _360PinType {\n Default = \"Default\",\n}\n\nexport type _360Pin = {\n position: Point3D\n pinType: _360PinType\n pinId?: string\n cameraExid?: string\n name: string\n currentRoom?: _360MakerId\n cameraRotation?: _360CameraRotation\n}\n\nexport type _360SceneRoute = {\n cameraHeadingOffset?: number\n overlayID?: number\n track?: string\n}\n\nexport type _360ProjectListItem = {\n integrationType: string\n projectId: string\n projectName: string\n providerID: string\n providerPrefix: string\n providerSuffix: string\n timeline: string\n uniqueId: string\n requiresValidation?: boolean\n}\n\nexport type _360ProjectJsonResponse = {\n dates: _360Scene[]\n [key: string]: any\n}\n\nexport type MobileCaptureSnapshot = {\n id: string | number\n projectId?: string\n uploadedBy: string\n updatedAt: string //YYYY-MM-DDTHH:mm:SS.MS (ISO)\n assetType: string //mobile_photos or mobile_audios\n thumbnailUrl: string //presigned S3 URL\n}\n\nexport enum _360UrlParams {\n DateId = \"dateId\",\n Date = \"date\",\n Floor = \"floor\",\n Marker = \"marker\",\n PolarAngle = \"polarAngle\",\n AzimuthAngle = \"azimuthAngle\",\n Zoom = \"zoom\",\n User = \"user\",\n ViewerMode = \"viewer_mode\",\n ProjectId = \"projectId\",\n Unit = \"unit\",\n LockDate = \"lockDate\",\n LockFloor = \"lockFloor\",\n LockMarker = \"lockMarker\",\n IsWidget = \"isWidget\",\n MediaLocked = \"mediaLocked\",\n Debug = \"debug\",\n RequiresValidation = \"requires_validation\",\n CommentId = \"comment_id\",\n}\n\nexport enum _360AssetType {\n Video = \"video\",\n Image = \"image\",\n Model = \"model\",\n Route = \"route\",\n MobilePhoto = \"mobile_photos\",\n MobileAudio = \"mobile_audios\",\n}\n\nexport enum _360AssetLabel {\n Walks = \"walks\",\n MobilePhotos = \"mobilePhotos\",\n}\n\nexport enum _360IntergrationType {\n Evercam = \"Evercam\",\n Matterport = \"Matterport\",\n OpenSpace = \"Openspace\",\n HoloBuilder = \"Holobuilder\",\n DroneDeploy = \"Dronedeploy\",\n}\n\nexport enum PathMarkerColor {\n Start = \"#00e74c\",\n End = \"#fd7567\",\n Default = \"#2196F3\",\n}\n\nexport type _360AssetsQueryParams = PaginationParams & {\n projectId: string\n date: DateType\n floor: string\n name: string\n id: string\n}\n\nexport type _360AssetsRequestPayload = {\n projectId: string\n date: DateType\n floor: string\n uploadedBy?: string\n}\n\nexport type DrawingsRequestPayload = PaginationParams & {\n projectId?: string\n name?: string\n changedBy?: string\n mapStyle?: string\n startDate?: string\n endDate?: string\n id?: number\n paginate?: boolean\n withAsset?: boolean\n includeDeleted?: boolean\n}\n\nexport type GenerateFloorPayload = {\n overlay?: {\n url: string\n title: string\n fileExtension: string\n }\n changedBy: string\n name?: string\n mapStyle?: string\n overlayPositionCorners: _360OverlayPosition\n}\n\nexport type _360QueueQueryParams = {\n projectId?: string\n}\n\nexport type _360AssetsUploadPayload = {\n targetPointsCount: number\n assetType: string\n upload: {\n url: string\n title: string\n fileExtension: string\n }[]\n deviceSerial?: string\n startPosition?: string\n endPosition?: string\n isTimelapse?: boolean\n isImagesOnly?: boolean\n}\n\nexport type Generate360MapRequestPayload = {\n dateId: string | number\n floorId: string\n cameraOffset: string | number\n startPoint: string\n endPoint: string\n drawingId?: number\n markers?: Array<{ position: { x: number; y: number; z: number } }>\n startPointIndex?: number\n endPointIndex?: number\n}\n\nexport enum EModelsType {\n FBX = \"FBX\",\n PointCloud = \"PLY\",\n}\n\nexport type _360FloorRef = {\n projectID: string\n dateID: string | number\n floorID: _360FloorId\n}\n\nexport type _360Vector3 = { x: number; y: number; z: number }\n\nexport type _360MarkerData = {\n cameraPosition: _360Vector3\n nextRoomId: string\n position: _360Vector3\n // Absent until the GPX is applied.\n geolocation?: { latitude: number; longitude: number }\n rotation: {\n _order: string\n _x: number\n _y: number\n _z: number\n isEuler: boolean\n x?: number\n y?: number\n z?: number\n }\n}\n\nexport type _360Route = {\n overlayID?: number\n track?: string\n cameraHeadingOffset?: number\n}\n\nexport type _360CalibrationDetails = {\n baseOriginOf360Viewer?: _360Vector3\n baseOriginOfForgeViewer?: _360Vector3\n rotationMatrix?: { elements: number[] }\n scaleMatrix?: { elements: number[] }\n}\n\nexport type _360FloorData = {\n _3DMarkers: _360MarkerData[]\n fbxModel: string | null\n fbxModelHQ: string | null\n pointCloudModelHQ: string | null\n initialMarker: string\n cameraRotation: _360CameraRotation\n steps: number\n route: _360Route | null\n sceneScale: number\n modelViewerFeatureFlag: boolean\n imagesOnlyFeatureFlag: boolean\n forgeBIMFeatureFlag: boolean\n isForgeGravityEnabled: boolean\n bimHeight?: number | null\n initialForgeView: ForgeView | null\n calibrationDetails: _360CalibrationDetails\n enhancedLightFeatureFlag: boolean\n}\n\nexport type _360PinData = {\n position: _360Vector3\n pinType: string\n name: string\n pinId?: string\n cameraExid?: string\n currentRoom?: string\n cameraRotation?: { polarAngle: number; azimuthAngle: number }\n}\n","export type AconexUserProject = {\n id: number\n name: string\n shortName: string\n startDate: string\n endDate: string\n active: boolean\n hidden: boolean\n}\n\nexport type AconexDocumentSchema = {\n dataType: AconexDocumentDataType\n identifier: AconexIdentifiers\n fieldName: string\n modifiedFieldName?: string\n mandatoryStatus: AconexMandatoryStatus\n schemaValues?: Array<{ id: string; value: string }>\n}\n\nexport type AconexDocumentTypeSchema = {\n dataType: AconexDocumentDataType\n identifier: AconexIdentifiers\n fieldName: string\n modifiedFieldName?: string\n mandatoryStatus: AconexMandatoryStatus\n specifications?: Array<AconexFieldSpecification>\n}\n\nexport type AconexDocumentSchemaField = {\n dataType: AconexDocumentDataType\n identifier: AconexIdentifiers\n schemaValues?: Array<{ id: string; value: string }>\n fieldName: string\n modifiedFieldName?: string\n mandatoryStatus: AconexMandatoryStatus\n componentType?: AconexFormComponentType\n items?: Array<any>\n disabled?: boolean\n specifications?: Array<AconexFieldSpecification>\n}\nexport type AconexFormSchema = Record<\n AconexIdentifiers | string,\n AconexDocumentSchemaField\n>\n\nexport type AconexFieldSpecification = {\n name: string\n options: Array<string>\n}\n\nexport enum AconexDocumentDataType {\n String = \"STRING\",\n Boolean = \"BOOLEAN\",\n Ratio = \"RATIO\",\n Integer = \"INTEGER\",\n Double = \"DOUBLE\",\n Long = \"LONG\",\n Date = \"DATE\",\n Complex = \"COMPLEX\",\n SingleLineText = \"SINGLE_LINE_TEXT\",\n MultiLineText = \"MULTI_LINE_TEXT\",\n SingleSelect = \"SINGLE_SELECT\",\n MultiSelect = \"MULTI_SELECT\",\n User = \"USER\",\n Number = \"NUMBER\",\n}\n\nexport enum AconexFormComponentType {\n Select = \"SelectField\",\n Text = \"TextField\",\n DateTime = \"DateTimeField\",\n Switch = \"SwitchField\",\n}\n\nexport enum AconexMandatoryStatus {\n Mandatory = \"MANDATORY\",\n NotMandatory = \"NOT_MANDATORY\",\n}\n\nexport type AconexAuthCallbackParams = {\n code: string\n location: string\n}\n\nexport type AconexEditedImageUploadRequestPayload = {\n projectExid: string\n snapshot: string\n}\n\nexport enum AconexIdentifiers {\n DocumentNumber = \"DocumentNumber\",\n DocumentTypeId = \"DocumentTypeId\",\n Revision = \"Revision\",\n HasFile = \"HasFile\",\n AccessList = \"AccessList\",\n AsBuiltRequired = \"AsBuiltRequired\",\n Attribute1 = \"Attribute1\",\n Attribute2 = \"Attribute2\",\n Attribute3 = \"Attribute3\",\n Attribute4 = \"Attribute4\",\n Author = \"Author\",\n AuthorisedBy = \"AuthorisedBy\",\n Category = \"Category\",\n Check1 = \"Check1\",\n Check2 = \"Check2\",\n Comments = \"Comments\",\n Comments2 = \"Comments2\",\n ContractNumber = \"ContractNumber\",\n ContractDeliverable = \"ContractDeliverable\",\n ContractorDocumentNumber = \"ContractorDocumentNumber\",\n ContractorRev = \"ContractorRev\",\n Date1 = \"Date1\",\n Date2 = \"Date2\",\n DateApproved = \"DateApproved\",\n DateCreated = \"DateCreated\",\n DateForReview = \"DateForReview\",\n DateReviewed = \"DateReviewed\",\n Discipline = \"Discipline\",\n DocumentStatusId = \"DocumentStatusId\",\n MilestoneDate = \"MilestoneDate\",\n PackageNumber = \"PackageNumber\",\n PercentageComplete = \"PercentageComplete\",\n PlannedSubmissionDate = \"PlannedSubmissionDate\",\n PrintSize = \"PrintSize\",\n ProjectField1 = \"ProjectField1\",\n ProjectField2 = \"ProjectField2\",\n ProjectField3 = \"ProjectField3\",\n Reference = \"Reference\",\n RevisionDate = \"RevisionDate\",\n Scale = \"Scale\",\n SelectList1 = \"SelectList1\",\n SelectList2 = \"SelectList2\",\n SelectList3 = \"SelectList3\",\n SelectList4 = \"SelectList4\",\n SelectList5 = \"SelectList5\",\n SelectList6 = \"SelectList6\",\n SelectList7 = \"SelectList7\",\n SelectList8 = \"SelectList8\",\n SelectList9 = \"SelectList9\",\n SelectList10 = \"SelectList10\",\n TagNumber = \"TagNumber\",\n Title = \"Title\",\n ToClientDate = \"ToClientDate\",\n UploadDate = \"UploadDate\",\n UploadedBy = \"UploadedBy\",\n Vdrcode = \"Vdrcode\",\n VendorDocumentNumber = \"VendorDocumentNumber\",\n VendorRev = \"VendorRev\",\n AutoNumber = \"AutoNumber\",\n}\n","export enum AnalyticsEventPageId {\n Timeline = \"Timeline\",\n Chat = \"Chat\",\n Recordings = \"Recordings\",\n Liveview = \"LiveView\",\n Compare = \"Compare\",\n BimCompare = \"BimCompare\",\n Sharing = \"Sharing\",\n Timelapse = \"Timelapse\",\n Project = \"Project\",\n AllProjects = \"AllProjects\",\n Tutorials = \"Tutorials\",\n SystemCheck = \"SystemCheck\",\n ProjectMapView = \"ProjectMapView\",\n AccountMapView = \"AccountMapView\",\n Automations = \"Automations\",\n ProgressPhotosUnsubscribe = \"ProgressPhotosUnsubscribe\",\n VideoWall = \"VideoWall\",\n ProjectSettings = \"ProjectSettings\",\n ProjectSettingsCameraSettings = \"ProjectSettings-CameraSettings\",\n ProjectSettingsMembers = \"ProjectSettings-Members\",\n ProjectSettingsOverview = \"ProjectSettings-Overview\",\n ProjectSettingsDangerZone = \"ProjectSettings-DangerZone\",\n Settings = \"Settings\",\n SettingsAccount = \"Settings-Account\",\n SettingsConnectors = \"Settings-Connectors\",\n MediaHub = \"MediaHub\",\n MediaOveriew = \"MediaOveriew\",\n GateReport = \"GateReport\",\n Bim = \"Bim\",\n Drone = \"Drone\",\n ThreeSixty = \"360\",\n Planner = \"Planner\",\n Widgets = \"Widgets\",\n Company = \"Company\",\n EmbeddedLive = \"EmbeddedLive\",\n EmbeddedRecordings = \"EmbeddedRecordings\",\n EmbeddedBimCompare = \"EmbeddedBimCompare\",\n GateReportInfo = \"GateReportInfo\",\n BimInfo = \"BimInfo\",\n DroneInfo = \"DroneInfo\",\n ThreeSixtyInfo = \"360Info\",\n BimCompareInfo = \"BimCompareInfo\",\n TimelineInfo = \"TimelineInfo\",\n WeatherReport = \"WeatherReport\",\n PpeReport = \"PpeReport\",\n SmartSearch = \"SmartSearch\",\n Drawings = \"Drawings\",\n}\n\nexport enum AnalyticsEvent {\n // Global events\n PageView = \"PageView\",\n OpenCompanyPage = \"OpenCompanyPage\",\n OpenSettings = \"OpenSettings\",\n ToggleHelpDialog = \"ToggleHelpDialog\",\n\n // Layout events\n LayoutToggleRightSidebar = \"Layout-ToggleRightSidebar\",\n LayoutResizeRightSidebar = \"Layout-ResizeRightSidebar\",\n LayoutThemeMode = \"Layout-ThemeMode\",\n\n // Features toggle events\n Xray = \"Xray-Toggle\",\n Weather = \"Weather-Toggle\",\n MarkUpTool = \"MarkUpTool-Toggle\",\n Comment = \"Comment-Toggle\",\n Compare = \"Compare-Toggle\",\n DownloadMediaOpen = \"DownloadMedia-Open\",\n\n // App settings events\n SettingsAccountUpdatePassword = \"UpdatePassword\",\n SettingsAccountUpdatePersonalInformation = \"UpdatePersonalInformation\",\n SettingsAccountRevokeSession = \"RevokeSession\",\n SettingsAccountCancelRevokeSession = \"CancelRevokeSession\",\n SettingsAccountRevokeAuthorizedApp = \"RevokeAuthorizedApp\",\n SettingsAccountClickRowsPerPage = \"ClickRowsPerPage\",\n SettingsAccountOpenDeleteAccountDialog = \"DeleteAccount\",\n SettingsConnectorsConnectToProcore = \"ConnectToProcore\",\n SettingsConnectorsConnectToAconex = \"ConnectToAconex\",\n SettingsConnectorsConnectToAutodesk = \"ConnectToAutodesk\",\n SettingsConnectorsConnectToVoyageControl = \"ConnectToVoyageControl\",\n SettingsConnectorsContactUsButtonClick = \"ClickContactUs\",\n SettingsConnectorsRemoveAconexConnection = \"RemoveAconex\",\n SettingsConnectorsRemoveAutodeskConnection = \"RemoveAutodesk\",\n SettingsConnectorsRemoveProcoreConnection = \"RemoveProcore\",\n SettingsConnectorsRemoveVoyageControlConnection = \"RemoveVoyageControl\",\n SettingsConnectorsToggleConnectorPromptDialog = \"ToggleConnectorPromptDialog\",\n SettingsConnectorsToggleVoyageControlDialog = \"ToggleVoyageControlDialog\",\n SettingsConnectorsConnectToHammertech = \"ConnectToHammertech\",\n SettingsConnectorsRemoveHammertechConnection = \"RemoveHammertech\",\n SettingsConnectorsToggleHammertechDialog = \"ToggleHammertechDialog\",\n\n // Widgets Creation Dialog Events\n WidgetsSelectTypeThreeSixty = \"Widgets-SelectType360\",\n WidgetsSelectProject = \"SelectProject\",\n WidgetsSelect360Date = \"Select360Date\",\n WidgetsSelect360Floor = \"Select360Floor\",\n WidgetsSelect360Marker = \"Select360Marker\",\n Widgets360LockMedia = \"360LockMedia\",\n\n // Widgets Events\n WidgetsPauseWidget = \"PauseWidget\",\n WidgetsEditWidget = \"EditWidget\",\n WidgetsOpenCredentials = \"OpenCredentials\",\n WidgetsCopyEmbeddedCode = \"CopyEmbeddedCode\",\n WidgetsCopyIFrameCode = \"CopyIFrameCode\",\n WidgetsCopyURLCode = \"CopyURLCode\",\n WidgetsDeleteWidget = \"DeleteWidget\",\n\n WidgetsAddWidgetClick = \"AddWidget\",\n WidgetsCancelClick = \"Cancel\",\n WidgetsEditHeight = \"EditHeight\",\n WidgetsEditHeightResolutionType = \"EditHeightResolutionType\",\n WidgetsEditWidth = \"EditWidth\",\n WidgetsEditWidthResolutionType = \"EditWidthResolutionType\",\n WidgetsLayout = \"ClickLayout\",\n WidgetsSaveClick = \"Save\",\n WidgetsSelectCamera = \"SelectCamera\",\n WidgetsSelectTypeBIMCompare = \"SelectTypeBIMCompare\",\n WidgetsSelectTypeLiveView = \"SelectTypeLiveView\",\n WidgetsSelectTypeRecordings = \"SelectTypeRecordings\",\n WidgetsSelectTypeVideoWall = \"SelectTypeVideoWall\",\n WidgetsSettingRefreshRate = \"EditRefreshRate\",\n WidgetsSettingRestrictRecentImagesInput = \"EditRestrictRecentImagesInput\",\n WidgetsSettingToggleBIMCompareDarkMode = \"ToggleBIMDarkMode\",\n WidgetsSettingToggleBIMCompareTimeLine = \"ToggleBIMTimeline\",\n WidgetsSettingToggleBIMCompareCalendar = \"ToggleBIMCalendar\",\n WidgetsSettingToggleDownload = \"ToggleDownload\",\n WidgetsSettingToggleFullScreen = \"ToggleFullScreen\",\n WidgetsSettingTogglePlayPause = \"TogglePlayPause\",\n WidgetsSettingToggleRecordingsCalendar = \"ToggleRecordingsCalendar\",\n WidgetsSettingToggleRecordingsDarkMode = \"ToggleRecordingsDarkMode\",\n WidgetsSettingToggleRestrictRecentImages = \"ToggleRestrictRecentImages\",\n WidgetsSettingToggleZoom = \"ToggleZoom\",\n WidgetsTogglePublicWidget = \"TogglePublicWidget\",\n WidgetsToggleRestrictRecordingsRange = \"ToggleRestrictRecordingsRange\",\n\n // Player events\n PlayerSelectCamera = \"Player-SelectCamera\",\n PlayerDownload = \"Player-Download\",\n PlayerToggleFullscreen = \"Player-ToggleFullscreen\",\n PlayerEnableLive = \"Player-EnableLive\",\n PlayerTogglePlayback = \"Player-TogglePlayback\",\n PlayerSelectSpeed = \"Player-SelectSpeed\",\n PlayerSelectQuality = \"Player-SelectQuality\",\n PlayerJumptoNextTicks = \"Player-JumptoNextTicks\",\n PlayerJumptoPreviousTicks = \"Player-JumptoPreviousTicks\",\n PlayerSwitchMode = \"Player-SwitchMode\",\n PlayerZoomIn = \"Player-ZoomIn\",\n PlayerZoomOut = \"Player-ZoomOut\",\n\n // PTZ camera events\n PTZAddPresetClick = \"PTZ-AddPresetClick\",\n PTZCreatePreset = \"PTZ-CreatePreset\",\n PTZUpdatePreset = \"PTZ-UpdatePreset\",\n PTZDeletePreset = \"PTZ-DeletePreset\",\n PTZMoveDown = \"PTZ-MoveDown\",\n PTZMoveLeft = \"PTZ-MoveLeft\",\n PTZMoveRight = \"PTZ-MoveRight\",\n PTZMoveUp = \"PTZ-MoveUp\",\n PTZPresetSelect = \"PTZ-PresetSelect\",\n PTZResetPosition = \"PTZ-ResetPosition\",\n PTZToggleCreatePresetForm = \"PTZ-ToggleCreatePresetForm\",\n PTZToggleDeletePresetDialog = \"PTZ-ToggleDeletePresetDialog\",\n PTZToggleEditPresetForm = \"PTZ-ToggleEditPresetForm\",\n PTZTogglePresetsMenu = \"PTZ-TogglePresetsMenu\",\n PTZZoomIn = \"PTZ-ZoomIn\",\n PTZZoomOut = \"PTZ-ZoomOut\",\n\n // Timeline actions\n TimelineClickEvent = \"Timeline-ClickEvent\",\n TimelineCompareMoveBeforeMarker = \"Compare-MoveBeforeMarker\",\n TimelineCompareMoveAfterMarker = \"Compare-MoveAfterMarker\",\n TimelineCompareSlide = \"Compare-Slide\",\n TimelineSelectMilestoneItem = \"Timeline-SelectMilestoneItem\",\n TimelineSelectTimestamp = \"Timeline-SelectTimestamp\",\n\n // Timeline groups visibility events\n GroupsVisibilityMobileCapture = \"GroupsVisibility-MobileCapture\",\n GroupsVisibilityAnpr = \"GroupsVisibility-Anpr\",\n GroupsVisibilityComments = \"GroupsVisibility-Comments\",\n GroupsVisibilityMediaHub = \"GroupsVisibility-MediaHub\",\n GroupsVisibilityBimMilestones = \"GroupsVisibility-BimMilestines\",\n GroupsVisibilityDroneFlights = \"GroupsVisibility-DroneFlights\",\n GroupsVisibility360Walks = \"GroupsVisibility-360Walks\",\n GroupsVisibilityExNvrVideoRecordings = \"GroupsVisibility-ExNvrVideoRecordings\",\n GroupsVisibilityLuminance = \"GroupsVisibility-Luminance\",\n\n // Comments events\n CommentsPlaceMarker = \"Comments-PlaceMarker\",\n CommentsSave = \"Comments-Save\",\n CommentsCancelSave = \"Comments-CancelSave\",\n CommentsRemove = \"Comments-Remove\",\n CommentsCancelRemove = \"Comments-CancelRemove\",\n CommentsArchive = \"Comments-Archive\",\n CommentsCancelArchive = \"Comments-CancelArchive\",\n CommentsSelect = \"Comments-Select\",\n\n // Xray events\n XrayMove = \"Xray-Move\",\n XrayMoveBeforeMarker = \"Xray-MoveBeforeMarker\",\n XrayMoveAfterMarker = \"Xray-MoveAfterMarker\",\n XrayToggleExportDialog = \"Xray-ToggleExportDialog\",\n XrayDownload = \"Xray-Download\",\n XraySaveToMediaHub = \"Xray-SaveToMediaHub\",\n XarySelectDate = \"Xray-SelectDate\",\n XarySelectLatestDate = \"Xray-SelectLatestDate\",\n XarySelectOldestDate = \"Xray-SelectOldestDate\",\n XraySendToConnector = \"Xray-SendToConnector\",\n XraySendToConnectorSent = \"Xray-SendToConnector-Sent\",\n XraySendToConnectorProcore = \"Xray-SendToConnector-Procore\",\n XraySendToConnectorProcorePhotos = \"Xray-SendToConnector-Procore-Photos\",\n XraySendToConnectorProcoreObservations = \"Xray-SendToConnector-Procore-Observations\",\n XraySendToConnectorAconex = \"Xray-SendToConnector-Aconex\",\n XraySendToConnectorAutodesk = \"Xray-SendToConnector-Autodesk\",\n XraySendToConnectorHammerTech = \"Xray-SendToConnector-HammerTech\",\n\n // Weather events\n WeatherGoBackDate = \"Weather-GoBackDate\",\n WeatherGoForwardDate = \"Weather-GoForwardDate\",\n WeatherReportExportFile = \"ExportFile\",\n WeatherReportExportType = \"ExportType\",\n WeatherReportMediaHubUploadFile = \"MediaHubUploadFile\",\n WeatherReportSelectStartDate = \"SelectStartDate\",\n WeatherReportSelectEndDate = \"SelectEndDate\",\n WeatherReportViewChart = \"ViewChart\",\n WeatherSelectDate = \"Weather-SelectDate\",\n WeatherSelectLegend = \"Weather-SelectLegend\",\n WeatherSelectProvider = \"Weather-SelectProvider\",\n WeatherSelectTempScale = \"Weather-SelectTempScale\",\n\n // Compare events\n CompareSlide = \"Slide\",\n CompareSelectBeforeDate = \"SelectBeforeDate\",\n CompareSelectBeforeLatestDate = \"SelectBeforeLatestDate\",\n CompareSelectBeforeOldestDate = \"SelectBeforeOldestDate\",\n CompareSelectAfterDate = \"SelectAfterDate\",\n CompareSelectAfterOldestDate = \"SelectAfterOldestDate\",\n CompareSelectAfterLatestDate = \"SelectAfterLatestDate\",\n CompareToggleExportDialog = \"ToggleExportDialog\",\n CompareSaveToMediaHub = \"SaveToMediaHub\",\n CompareGoToMediaHub = \"GoToMediaHub\",\n CompareDownloadAs = \"DownloadAs\",\n CompareCopyDownloadFileUrl = \"CopyDownloadFileUrl\",\n\n // Bim Compare events\n BimCompareSlide = \"BimCompare-Slide\",\n BimCompareSelectCameraDate = \"BimCompare-SelectCameraDate\",\n BimCompareSelectCameraLatestDate = \"BimCompare-SelectCameraLatestDate\",\n BimCompareSelectCameraOldestDate = \"BimCompare-SelectCameraOldestDate\",\n BimCompareSelectBimDate = \"BimCompare-SelectBimDate\",\n BimCompareSelectBimOldestDate = \"BimCompare-SelectBimOldestDate\",\n BimCompareSelectBimLatestDate = \"BimCompare-SelectBimLatestDate\",\n BimCompareSelectModel = \"BimCompare-SelectModel\",\n BimCompareChangeTransparency = \"BimCompare-ChangeTransparency\",\n BimCompareSelectTimelineDate = \"BimCompare-SelectTimelineDate\",\n BimCompareToggleExportDialog = \"BimCompare-ToggleExportDialog\",\n BimCompareSaveToMediaHub = \"BimCompare-SaveToMediaHub\",\n BimCompareGoToMediaHub = \"BimCompare-GoToMediaHub\",\n BimCompareDownloadAs = \"BimCompare-DownloadAs\",\n BimCompareCopyDownloadFileUrl = \"BimCompare-CopyDownloadFileUrl\",\n\n // Mark-up tool events\n MarkUpToolClose = \"MarkUpTool-Close\",\n MarkUpToolCopyImage = \"MarkUpTool-CopyImage\",\n MarkUpToolOpen = \"MarkUpTool-Open\",\n MarkUpToolSelectTool = \"MarkUpTool-SelectTool\",\n MarkUpToolSelectBlur = \"MarkUpTool-SelectBlur\",\n MarkUpToolSelectCrop = \"MarkUpTool-SelectCrop\",\n MarkUpToolSelectLine = \"MarkUpTool-SelectLine\",\n MarkUpToolSelectBrush = \"MarkUpTool-SelectBrush\",\n MarkUpToolSelectRectangle = \"MarkUpTool-SelectRectangle\",\n MarkUpToolSelectCircle = \"MarkUpTool-SelectCircle\",\n MarkUpToolSelectArrow = \"MarkUpTool-SelectArrow\",\n MarkUpToolSelectText = \"MarkUpTool-SelectText\",\n MarkUpToolUndo = \"MarkUpTool-Undo\",\n MarkUpToolRedo = \"MarkUpTool-Redo\",\n MarkUpToolSelectColor = \"MarkUpTool-SelectColor\",\n MarkUpToolApplyCrop = \"MarkUpTool-ApplyCrop\",\n MarkUpToolCancelCrop = \"MarkUpTool-CancelCrop\",\n MarkUpToolCancelSend = \"MarkUpTool-CancelSend\",\n MarkUpToolOpenEditName = \"MarkUpTool-OpenEditName\",\n MarkUpToolCancelEditName = \"MarkUpTool-CancelEditName\",\n MarkUpToolSaveEditedName = \"MarkUpTool-SaveEditedName\",\n MarkUpToolSaveToMediaHub = \"MarkUpTool-SaveToMediaHub\",\n MarkUpToolDownloadAs = \"MarkUpTool-DownloadAs\",\n MarkUpToolSendToConnector = \"MarkUpTool-SendToConnector\",\n MarkUpToolSendToConnectorSent = \"MarkUpTool-SendToConnector-Sent\",\n MarkUpToolSendToConnectorProcore = \"MarkUpTool-SendToConnector-Procore\",\n MarkUpToolSendToConnectorProcorePhotos = \"MarkUpTool-SendToConnector-Procore-Photos\",\n MarkUpToolSendToConnectorProcoreObservations = \"MarkUpTool-SendToConnector-Procore-Observations\",\n MarkUpToolSendToConnectorAconex = \"MarkUpTool-SendToConnector-Aconex\",\n MarkUpToolSendToConnectorAutodesk = \"MarkUpTool-SendToConnector-Autodesk\",\n MarkUpToolSendToConnectorHammerTech = \"MarkUpTool-SendToConnector-HammerTech\",\n MarkUpToolSendViaEmail = \"MarkUpTool-SendViaEmail\",\n MarkUpToolSendViaEmailSent = \"MarkUpTool-SendViaEmail-Sent\",\n\n // Recordings events\n RecordingsCancelExportDialog = \"CancelExportDialog\",\n RecordingsClickSupportLink = \"ClickSupportLink\",\n RecordingsCreateClip = \"CreateClip\",\n RecordingsToggleExportDialog = \"ToggleExportDialog\",\n RecordingToggleGateReportEvents = \"ToggleGateReportEvents\",\n RecordingsSelectDate = \"SelectDate\",\n RecordingsSelectDateClickMonthYear = \"SelectDate-ClickMonthYear\",\n RecordingsSelectLatestDate = \"SelectLatestDate\",\n RecordingsSelectOldestDate = \"SelectOldestDate\",\n\n // Sharing events\n SharingToggleAddUserDialog = \"ToggleAddUserDialog\",\n SharingToggleEditVisibilityOptionsDialog = \"ToggleEditVisibilityOptionsDialog\",\n SharingAddUser = \"AddUser\",\n SharingToggleDeleteUserDialog = \"ToggleDeleteUserDialog\",\n SharingDeleteUser = \"DeleteUser\",\n SharingSaveVisibilityOptions = \"SaveVisibilityOptions\",\n SharingCopyLink = \"CopyLink\",\n SharingResendInvite = \"ResendInvite\",\n SharingTransferOwnership = \"TransferOwnership\",\n SharingSortBy = \"SortBy\",\n SharingChangeAccessRight = \"ChangeAccessRight\",\n\n // ThreeSixty events\n ThreeSixtyGallery = \"Gallery\",\n ThreeSixtyChangeDate = \"ChangeDate\",\n ThreeSixtyChangeFloor = \"ChangeFloor\",\n ThreeSixtyCloseCompare = \"CloseCompare\",\n ThreeSixtyCloseForgeBIM = \"CloseForgeBIM\",\n ThreeSixtyDeleteComment = \"DeleteComment\",\n ThreeSixtyDisableMeasuringTool = \"DisableMeasuringTool\",\n ThreeSixtyDisableCommnetTool = \"DisableCommentTool\",\n ThreeSixtyEnableMeasuringTool = \"EnableMeasuringTool\",\n ThreeSixtyMeasuringPerformed = \"measuring_performed\",\n ThreeSixtyEnableCommentTool = \"EnableCommentTool\",\n ThreeSixtyLockCompare = \"LockCompare\",\n ThreeSixtyLockForgeBIM = \"LockForgeBIM\",\n ThreeSixtyMarkerThumbnailClicked = \"MarkerThumbnailClicked\",\n ThreeSixtyMiniMapMarkerClicked = \"MiniMapMarkerClicked\",\n ThreeSixtyOpen = \"Open\",\n ThreeSixtyOpenCompare = \"OpenCompare\",\n ThreeSixtyOpenForgeBIM = \"OpenForgeBIM\",\n ThreeSixtyOpenMarkersThumbnailsList = \"OpenMarkersThumbnailsList\",\n ThreeSixtyOpenCommentsList = \"OpenCommentsList\",\n ThreeSixtyGalleryEditWalkName = \"Gallery-EditWalkName\",\n ThreeSixtySaveComment = \"SaveComment\",\n ThreeSixtyUnarchiveComment = \"UnarchiveComment\",\n ThreeSixtyArchiveComment = \"ArchiveComment\",\n ThreeSixtyShareView = \"ShareView\",\n ThreeSixtyCommentClicked = \"CommentClicked\",\n ThreeSixtyToggleMarkersVisibility = \"ToggleMarkersVisibility\",\n ThreeSixtyToggleMinimapVisibility = \"ToggleMinimapVisibility\",\n ThreeSixtyToggleMiniModel = \"ToggleMiniModel\",\n ThreeSixtyToggleCommentsVisibility = \"ToggleCommentsVisibility\",\n ThreeSixtyToggleCameraPinsVisibility = \"toggle_camera_pins_visibility\",\n ThreeSixtyUnlockCompare = \"UnlockCompare\",\n ThreeSixtyUnlockForgeBIM = \"UnlockForgeBIM\",\n ThreeSixtyUploadAssets = \"UploadAssets\",\n\n // Drone events\n DroneAreaToolClick = \"AreaTool-Click\",\n DroneChangeDate = \"ChangeDate\",\n DroneChooseCommentType = \"ChooseCommentType\",\n DroneClickCameraLiveView = \"ClickCameraLiveView\",\n DroneClickCameraMarker = \"ClickCameraMarker\",\n DroneCompareToolClick = \"CompareTool-Click\",\n DroneCompareToolSaveToMediaHub = \"CompareToolSaveToMediaHub\",\n DroneCompareToolSliderMove = \"CompareTool-SliderMove\",\n DroneCompareToolToggleExportDialog = \"CompareToolToggleExportDialog\",\n DroneCopyLocationToClipboard = \"CopyLocationToClipboard\",\n DroneEnable2DImagery = \"Enable2DImagery\",\n DroneGenerateUploadFlight = \"GenerateUploadFlight\",\n DroneInspectionToolClick = \"InspectionTool-Click\",\n DroneMeasuringToolClick = \"MeasuringTool-Click\",\n DroneOpenHelpPanel = \"OpenHelpPanel\",\n DroneOpenImageViewer = \"OpenImageViewer\",\n DroneResetView = \"ResetView\",\n DroneSettingsToggle360PathsVisibility = \"Settings-Toggle360PathsVisibility\",\n DroneSettingsToggleCameraMarkersVisibility = \"Settings-ToggleCameraMarkersVisibility\",\n DroneSettingsToggleCommentsVisibility = \"Settings-ToggleCommentsVisibility\",\n DroneSettingsToggleAerialShotsVisibility = \"Settings-ToggleAerialShotsVisibility\",\n DroneSettingsOpenCommentsList = \"Settings-OpenCommentsList\",\n DroneShareLink = \"ShareLink\",\n DroneCommentsToolClick = \"CommentsTool-Click\",\n DroneToggleBimCompareTool = \"ToggleBimCompareTool\",\n DroneToggleFullScreen = \"ToggleFullScreen\",\n DroneToggleMapStyle = \"ToggleMapStyle\",\n DroneTogglePointCloud = \"TogglePointCloud\",\n DroneToggleGaussianSplat = \"ToggleGaussianSplat\",\n DroneToggleGlobe = \"ToggleGlobe\",\n DroneToggleQualityMode = \"ChooseQuality\",\n DroneToggleSideMenu = \"ToggleSideMenu\",\n DroneToggleImageryPlan = \"ToggleImageryPlan\",\n DroneToggleSceneMode = \"ToggleSceneMode\",\n DroneUploadFlight = \"UploadFlight\",\n DroneViewLocationInGoogleMaps = \"ViewLocationInGoogleMaps\",\n DroneVolumeToolClick = \"VolumeTool-Click\",\n DroneZoomIn = \"ZoomIn\",\n DroneZoomOut = \"ZoomOut\",\n DroneUploadSkipping = \"SkipImageUpload\", // To be removed later\n DroneSaveComment = \"SaveComment\",\n DroneUnarchiveComment = \"UnarchiveComment\",\n DroneArchiveComment = \"ArchiveComment\",\n DroneDeleteComment = \"DeleteComment\",\n DroneSaveAerialShot = \"SaveAerialShot\",\n\n // Planner events\n PlannerAddCameraClick = \"AddCameraClick\",\n PlannerAddSitePlanDrawingClick = \"AddSitePlanDrawingClick\",\n PlannerAddSitePlanClick = \"AddSitePlanClick\",\n PlannerAttachSitePlanDrawing = \"AttachSitePlanDrawing\",\n PlannerCameraMarkerEditFOVAngle = \"CameraMarker-EditFOVAngle\",\n PlannerCameraMarkerEditHeading = \"CameraMarker-EditHeading\",\n PlannerCameraMarkerEditName = \"CameraMarker-EditName\",\n PlannerCameraMarkerEditRadius = \"CameraMarker-EditRadius\",\n PlannerCameraMarkerSelectColor = \"CameraMarker-SelectColor\",\n PlannerCameraMarkerToggleVisibility = \"CameraMarker-ToggleVisibility\",\n PlannerCameraMarkerToggleDeleteDialog = \"CameraMarker-ToggleDeleteDialog\",\n PlannerCancelUploadSitePlanDrawing = \"CancelUploadSitePlanDrawing\",\n PlannerChangeLocation = \"ChangeLocation\",\n PlannerOpen = \"Open\",\n PlannerResetView = \"ResetView\",\n PlannerSitePlansList = \"SitePlansList\",\n PlannerToggleCamerasLabel = \"ToggleCamerasLabel\",\n PlannerToggleFullscreen = \"ToggleFullscreen\",\n PlannerToggleMapStyle = \"ToggleMapStyle\",\n PlannerToggleSaveSessionDialog = \"ToggleSaveSessionDialog\",\n PlannerUploadSitePlanDrawing = \"UploadSitePlanDrawing\",\n PlannerZoomIn = \"ZoomIn\",\n PlannerZoomOut = \"ZoomOut\",\n\n // Drawings\n DrawingCreateSave = \"CreateSave\",\n DrawingUpdateSave = \"UpdateSave\",\n DrawingEditName = \"EditName\",\n DrawingUpdateName = \"UpdateName\",\n DrawingToggleSaveDialog = \"ToggleSaveDialog\",\n DrawingClickHome = \"ClickHome\",\n DrawingsUploadDrawing = \"UploadDrawing\",\n DrawingsCreateDrawing = \"CreateDrawing\",\n DrawingsSelectPdfPage = \"SelectPdfPage\",\n DrawingsDeleteDrawing = \"DeleteDrawing\",\n DrawingToggleMapStyle = \"ToggleMapStyle\",\n DrawingToggleMapLabels = \"ToggleMapLabels\",\n DrawingToggleCamerasLabels = \"ToggleCamerasLabels\",\n DrawingToggleCamerasVisibility = \"ToggleCamerasVisibility\",\n DrawingToggleTransparencyMode = \"ToggleTransparencyMode\",\n DrawingChooseDrawing = \"ChooseDrawing\",\n DrawingChangeLocation = \"ChangeLocation\",\n DrawingFilterDateRange = \"FilterDateRange\",\n DrawingFilterDrawingName = \"FilterDrawingName\",\n DrawingFilterCreatedBy = \"FilterCreatedBy\",\n DrawingFilterMapStyle = \"FilterMapStyle\",\n DrawingToggleRotate = \"ToggleRotate\",\n DrawingToggleScale = \"ToggleScale\",\n DrawingOpenExistingDrawing = \"OpenExistingDrawing\",\n\n // Markers events\n MarkerClicked = \"MarkerClicked\",\n MarkerSelected = \"MarkerSelected\",\n\n // Timelapse Creator events\n TimelapseSelectCustomPeriod = \"SelectCustomPeriod\",\n TimelapseToggleCustomScheduleDialog = \"ToggleCustomScheduleDialog\",\n TimelapseSaveCustomSchedule = \"SaveCustomSchedule\",\n TimelapseToggleExportDialog = \"ToggleExportDialog\",\n TimelapseExportSelectStep = \"SelectStep\",\n TimelapseSelectOption = \"SelectOption\",\n TimelapseSelectSchedule = \"SelectSchedule\",\n TimelapseSaveToMediaHub = \"SaveToMediaHub\",\n TimelapseGoToMediaHub = \"GoToMediaHub\",\n TimelapseToggleUploadLogoDialog = \"ToggleUploadLogoDialog\",\n TimelapseUploadLogo = \"UploadLogo\",\n\n // Map View events\n MapViewChooseSatellite = \"MapView-ChooseSatellite\",\n MapViewChooseTerrain = \"MapView-ChooseMap\",\n MapViewClickCameraLink = \"MapView-ClickCameraLink\",\n MapViewToggleCameraMapInfoTooltip = \"MapView-ToggleCameraMapInfoTooltip\",\n\n // Video Wall events\n VideoWallToggleFullscreen = \"VideoWall-ToggleFullscreen\",\n VideoWallToggleCameraFullscreen = \"VideoWall-ToggleCameraFullscreen\",\n VideoWallToggleConfigDialog = \"VideoWall-ToggleConfigDialog\",\n VideoWallToggleCameraVisibility = \"VideoWall-ToggleCameraVisibility\",\n VideoWallPositionCameraOnWall = \"VideoWall-PositionCameraOnWall\",\n VideoWallSaveConfig = \"VideoWall-SaveConfig\",\n\n // Project Settings\n ProjectSettingsCameraSettingsCancelEditCameraName = \"CancelEditCameraName\",\n ProjectSettingsCameraSettingsEditCameraName = \"EditCameraName\",\n ProjectSettingsCameraSettingsEditCameraVisibility = \"EditCameraVisibility\",\n ProjectSettingsCameraSettingsSaveCameraName = \"SaveCameraName\",\n ProjectSettingsMembersApplyCamerasFilter = \"ApplyCamerasFilter\",\n ProjectSettingsMembersApplySearchFilter = \"ApplySearchFilter\",\n ProjectSettingsMembersViewRoleInfo = \"ViewRoleInfo\",\n ProjectSettingsMembersViewMemberInfo = \"ViewMemberInfo\",\n ProjectSettingsMembersBulkRemove = \"BulkRemove\",\n ProjectSettingsMembersInviteSent = \"InviteSent\",\n ProjectSettingsMembersRejectInvite = \"RejectInvite\",\n ProjectSettingsMembersAddMember = \"AddMember\",\n ProjectSettingsMembersBulkRoleUpdate = \"BulkRoleUpdate\",\n ProjectSettingsMembersDeleteCameraAccess = \"DeleteCameraAccess\",\n ProjectSettingsMembersEditCameraAccess = \"EditCameraAccess\",\n ProjectSettingsMembersShareCamera = \"ShareCamera\",\n ProjectSettingsMembersToggleAddDialog = \"ToggleAddDialog\",\n ProjectSettingsOverviewOpenInMapView = \"OpenInMapView\",\n ProjectSettingsOverviewCloseUpdateThumbnailDialog = \"CloseUpdateThumbnailDialog\",\n ProjectSettingsOverviewOpenUpdateThumbnailDialog = \"UpdateThumbnailClicked\",\n ProjectSettingsOverviewUploadNewThumbnail = \"UploadNewThumbnail\",\n ProjectSettingsOverviewUpdateThumbnail = \"UpdateThumbnail\",\n\n // Media Hub events\n MediaHubSelectFilter = \"SelectFilter\",\n MediaHubApplyFilters = \"ApplyFilters\",\n MediaHubToggleAddMediaUrlDialog = \"ToggleAddMediaUrlDialog\",\n MediaHubToggleUploadFileDialog = \"ToggleUploadFileDialog\",\n MediaHubToggleUploadLocalClipDialog = \"ToggleUploadLocalClipDialog\",\n MediaHubSaveMediaUrl = \"SaveMediaUrl\",\n MediaHubUploadFile = \"UploadFile\",\n MediaHubSelectPage = \"SelectPage\",\n MediaHubGoToNextPage = \"GoToNextPage\",\n MediaHubGoToPreviousPage = \"GoToPreviousPage\",\n\n // Media Hub Item events\n MediaDelete = \"Media-Delete\",\n MediaToggleTitleEditing = \"Media-ToggleTitleEditing\",\n MediaSaveTitle = \"Media-SaveTitle\",\n MediaDownloadAs = \"Media-DownloadAs\",\n MediaTogglePublicVisibility = \"Media-TogglePublicVisibility\",\n MediaShareToPlatform = \"Media-ShareToPlatform\",\n MediaCopyMediaLink = \"Media-CopyMediaLink\",\n MediaGoToMediaHub = \"Media-GoBackToMediaHub\",\n\n // Gate report\n GateReportCalendarTreeDateClick = \"CalendarTree-DateClick\",\n GateReportFilterEntryExit = \"FilterEntryExit\",\n GateReportFilterPlateNumber = \"FilterPlateNumber\",\n GateReportFilterVehicleTypes = \"FilterVehicleTypes\",\n GateReportOpenVehicleTypeInfo = \"OpenVehicleTypeInfo\",\n GateReportTimelineDateClick = \"Timeline-DateClick\",\n GateReportToggleThumbnails = \"ToggleThumbnails\",\n\n PpeTimelineDateClick = \"PpeTimeline-DateClick\",\n ObservationsFilterTypes = \"Observations-FilterTypes\",\n\n //Help Menu\n HelpMenuToggleMenuButton = \"HelpMenu-ToggleMenuButton\",\n HelpMenuOpenProjectContactsDialog = \"HelpMenu-OpenProjectContactsDialog\",\n HelpMenuOpenLiveChat = \"HelpMenu-OpenLiveChat\",\n HelpMenuClickTutorialsLink = \"HelpMenu-ClickTutorialsLink\",\n HelpMenuClickWhatsNewLink = \"HelpMenu-ClickWhatsNewLink\",\n HelpMenuClickUserManuaLink = \"HelpMenu-ClickUserManuaLink\",\n HelpMenuClickSupportTicketsLink = \"HelpMenu-ClickSupportTicketsLink\",\n HelpMenuClickSystemCheckLink = \"HelpMenu-ClickSystemCheckLink\",\n\n Recording = \"Recording\",\n CameraFilter = \"CameraFilter\",\n MissingEquipmentHardHat = \"MissingEquipment-HardHat\",\n MissingEquipmentHighVisibilityVest = \"MissingEquipment-HighVisibilityVest\",\n MissingEquipmentSafetyGlasses = \"MissingEquipment-SafetyGlasses\",\n MissingEquipmentSafetyGloves = \"MissingEquipment-SafteyGLoves\",\n ExportAs = \"ExportAs\",\n\n ExportPdf = \"ExportPdf\",\n ExportCsv = \"ExportCsv\",\n FilterCameras = \"FilterCameras\",\n\n // Automations - Progress Photos\n ProgressPhotoCancelPause = \"ProgressPhoto-CancelPause\",\n ProgressPhotoCancelResume = \"ProgressPhoto-CancelResume\",\n ProgressPhotoCancelDelete = \"ProgressPhoto-CancelDelete\",\n ProgressPhotoCreate = \"ProgressPhoto-Create\",\n ProgressPhotoDelete = \"ProgressPhoto-Delete\",\n ProgressPhotoEdit = \"ProgressPhoto-Edit\",\n ProgressPhotoPause = \"ProgressPhoto-Pause\",\n ProgressPhotoResume = \"ProgressPhoto-Resume\",\n ProgressPhotoResumeDelete = \"ProgressPhoto-ResumeDelete\",\n ProgressPhotoSelectType = \"ProgressPhoto-SelectType\",\n ProgressPhotoSelectCameras = \"ProgressPhoto-SelectCameras\",\n ProgressPhotoToggleSelectAllOnlineCameras = \"ProgressPhoto-ToggleSelectAllOnlineCameras\",\n ProgressPhotoToggleSelectAllCameras = \"ProgressPhoto-ToggleSelectAllCameras\",\n ProgressPhotoClearAllCameras = \"ProgressPhoto-ClearAllCameras\",\n ProgressPhotoEditCamerasSearchFilter = \"ProgressPhoto-EditCamerasSearchFilter\",\n ProgressPhotoSelectDays = \"ProgressPhoto-SelectDays\",\n ProgressPhotoSelectMember = \"ProgressPhoto-SelectMember\",\n ProgressPhotoSelectProvider = \"ProgressPhoto-SelectProvider\",\n ProgressPhotoSelectTime = \"ProgressPhoto-SelectTime\",\n ProgressPhotoSelectTimezone = \"ProgressPhoto-SelectTimezone\",\n ProgressPhotoUnsubscribeUser = \"ProgressPhoto-UnsubscribeUser\",\n\n // Automations - Comapre\n CompareSelectProvider = \"Compare-SelectProvider\",\n CompareSelectCameras = \"Compare-SelectCameras\",\n CompareEdit = \"Compare-Edit\",\n CompareSelectTimezone = \"Compare-SelectTimezone\",\n CompareSelectMember = \"Compare-SelectMember\",\n CompareToggleSelectAllOnlineCameras = \"Compare-ToggleSelectAllOnlineCameras\",\n CompareToggleSelectAllCameras = \"Compare-ToggleSelectAllCameras\",\n CompareClearAllCameras = \"Compare-ClearAllCameras\",\n CompareEditCamerasSearchFilter = \"Compare-EditCamerasSearchFilter\",\n CompareSelectType = \"Compare-SelectType\",\n CompareCreate = \"Compare-Create\",\n\n // Automations - Main Report\n AutomationsEditSearchFilter = \"EditSearchFilter\",\n AutomationsEditStatusFilter = \"EditStatusFilter\",\n AutomationsEditUsersFilter = \"EditUsersFilter\",\n AutomationsEditDaysFilter = \"EditDaysFilter\",\n AutomationsEditCamerasFilter = \"EditCamerasFilter\",\n AutomationToggleEditDialog = \"ToggleEditDialog\",\n AutomationToggleCreateDialog = \"ToggleCreateDialog\",\n AutomationTypeName = \"TypeName\",\n\n // Automations - Gate Report\n GateReportSelectType = \"GateReport-SelectType\",\n GateReportToggleSelectAllCameras = \"GateReport-ToggleSelectAllCameras\",\n GateReportToggleSelectAllOnlineCameras = \"GateReport-ToggleSelectAllOnlineCameras\",\n GateReportToggleClearAllCameras = \"GateReport-ClearAllCameras\",\n GateReportEditCamerasSearchFilter = \"GateReport-EditCamerasSearchFilter\",\n GateReportSelectDays = \"GateReport-SelectDays\",\n GateReportSelectTime = \"GateReport-SelectTime\",\n GateReportSelectTimezone = \"GateReport-SelectTimezone\",\n GateReportSelectVehicleTypes = \"GateReport-SelectVehicleTypes\",\n GateReportSelectColumn = \"GateReport-SelectColumn\",\n GateReportSelectPeriod = \"GateReport-SelectPeriod\",\n GateReportSelectExportType = \"GateReport-SelectExportType\",\n GateReportSelectMember = \"GateReport-SelectMember\",\n GateReportSelectCameras = \"GateReport-SelectCameras\",\n GateReportCreate = \"GateReport-Create\",\n GateReportEdit = \"GateReport-Edit\",\n\n CompareSelectDays = \"Compare-SelectDays\",\n CompareSelectDelay = \"Compare-SelectDelay\",\n CompareSelectTime = \"Compare-SelectTime\",\n // Smart Search\n SmartSearchToggleQueryBuilder = \"SmartSearch-ToggleQueryBuilder\",\n SmartSearchToggleQuerySelector = \"SmartSearch-ToggleQuerySelector\",\n SmartSearchDeleteComponent = \"SmartSearch-DeleteComponent\",\n SmartSearchPageChange = \"SmartSearch-PageChange\",\n SmartSearchExecuteQuery = \"SmartSearch-ExecuteQuery\",\n SmartSearchAddComponent = \"SmartSearch-AddComponent\",\n SmartSearchConnectComponent = \"SmartSearch-ConnectComponent\",\n SmartSearchUpdateComponent = \"SmartSearch-UpdateComponent\",\n SmartSearchSavedQueryClick = \"SmartSearch-SavedQueryClick\",\n SmartSearchFilterSavedQueries = \"SmartSearch-FilterSavedQueries\",\n SmartSearchThumbnailHover = \"SmartSearch-ThumbnailHover\",\n SmartSearchThumbnailError = \"SmartSearch-ThumbnailError\",\n SmartSearchViewSelected = \"SmartSearch-ViewSelected\",\n SmartSearchOptionClicked = \"SmartSearch-OptionClicked\",\n SmartSearchEditQuery = \"SmartSearch-EditQuery\",\n SmartSearchDeleteQuery = \"SmartSearch-DeleteQuery\",\n SmartSearchSaveQuery = \"SmartSearch-SaveQuery\",\n SmartSearchThumbnailPlay = \"SmartSearch-ThumbnailPlay\",\n SmartSearchExportFile = \"SmartSearch-ExportFile\",\n SmartSearchDownloadHeatmapImage = \"SmartSearch-DownloadHeatmapImage\",\n ChatToggleSidebarMode = \"Chat-ToggleSidebarMode\",\n ChatSendMessage = \"Chat-SendMessage\",\n ChatClickStarter = \"Chat-ClickStarter\",\n ChatStopResponse = \"Chat-StopResponse\",\n ChatCopyAnswer = \"Chat-CopyAnswer\",\n ChatDownloadPdf = \"Chat-DownloadPdf\",\n ChatOpenCamera = \"Chat-OpenCamera\",\n ChatNewConversation = \"Chat-NewConversation\",\n ChatOpenConversation = \"Chat-OpenConversation\",\n ChatRenameConversation = \"Chat-RenameConversation\",\n ChatDeleteConversation = \"Chat-DeleteConversation\",\n\n // Forge Bim View model management events\n ForgeBimAddModelButtonClicked = \"ForgeBim-AddModelButtonClicked\",\n ForgeBimUploadChoiceDialogOpened = \"ForgeBim-UploadChoiceDialogOpened\",\n ForgeBimModelAddMethodSelected = \"ForgeBim-ModelAddMethodSelected\",\n ForgeBimUploadChoiceDialogDismissed = \"ForgeBim-UploadChoiceDialogDismissed\",\n ForgeBimLocalModelFileSelected = \"ForgeBim-LocalModelFileSelected\",\n ForgeBimLocalModelFileRejected = \"ForgeBim-LocalModelFileRejected\",\n ForgeBimUploadModelFileToIngestStarted = \"ForgeBim-UploadModelFileToIngestStarted\",\n ForgeBimUploadModelFileToIngestCompleted = \"ForgeBim-UploadModelFileToIngestCompleted\",\n ForgeBimUploadModelFileToIngestFailed = \"ForgeBim-UploadModelFileToIngestFailed\",\n ForgeBimAccModelSelectorOpened = \"ForgeBim-AccModelSelectorOpened\",\n ForgeBimAccModelSelectorDismissed = \"ForgeBim-AccModelSelectorDismissed\",\n ForgeBimAccModelConfirmed = \"ForgeBim-AccModelConfirmed\",\n ForgeBimModelDuplicateDetected = \"ForgeBim-ModelDuplicateDetected\",\n ForgeBimUpdateModelButtonClicked = \"ForgeBim-UpdateModelButtonClicked\",\n ForgeBimReplaceModelWarningOpened = \"ForgeBim-ReplaceModelWarningOpened\",\n ForgeBimReplaceModelConfirmed = \"ForgeBim-ReplaceModelConfirmed\",\n ForgeBimReplaceModelCancelled = \"ForgeBim-ReplaceModelCancelled\",\n ForgeBimModelAdded = \"ForgeBim-ModelAdded\",\n ForgeBimModelUpdated = \"ForgeBim-ModelUpdated\",\n ForgeBimModelSaveFailed = \"ForgeBim-ModelSaveFailed\",\n ForgeBimIngestNotificationFailed = \"ForgeBim-IngestNotificationFailed\",\n}\n","import {\n BoundingBox,\n CameraExid,\n DateType,\n GateReportVehicleType,\n TimelinePrecision,\n} from \"@evercam/api/types\"\n\nexport type AnprQueryParams = {\n page?: number\n limit?: number\n direction?: { eq?: string } | string\n plateNumber?: { eq?: string } | string\n sort?: string\n fromDate?: DateType\n toDate?: DateType\n camerasExid?: CameraExid[]\n vehicleTypes?: GateReportVehicleType[]\n isDuplicate?: boolean\n isPostprocessed?: boolean\n isPlate?: boolean\n}\n\nexport type AnprCountsQueryParams = {\n precision: TimelinePrecision\n fromDate?: string\n toDate?: string\n isPublic?: boolean\n cameras?: CameraExid[]\n direction?: AnprDirection\n isPlate?: boolean\n isDuplicate?: boolean\n vehicleTypes?: GateReportVehicleType[]\n camerasExid?: CameraExid[]\n}\n\nexport enum AnprDirection {\n Left = \"reverse\",\n Arrived = \"forward\",\n Unknown = \"unknown\",\n}\n\nexport type AnprEvent = {\n id: number\n plateNumber: string\n cameraExid: CameraExid\n cameraex: CameraExid\n picName: string\n eventTime: string\n insertedAt: string\n isDuplicate: boolean\n direction: AnprDirection\n updatedAt: string\n edited?: boolean\n isPlate: boolean\n isPostprocessed: boolean\n vehicleType?: GateReportVehicleType\n contextVehicleType?: GateReportVehicleType\n anprVehicleType?: string\n anprVehicleModel?: string\n anprVehicleMake?: string\n anprVehicleColor?: string\n anprVehicleSpeed?: number\n anprSnapshotLink: string\n contextSnapshotLink: string\n mainSnapshotLink: string\n contextCamera: string\n votedVehicleType: GateReportVehicleType | string\n roiId?: number\n captureTime: DateType\n contextThumbnailUrl: string\n isPublic: boolean\n label: string\n mp4Url: string\n plateThumbnailUrl: string\n thumbnailUrl: string\n metadata: {\n evercamMetadata?: {\n anpr?: {\n bbox: BoundingBox\n label: string\n score: number\n }\n context?: {\n bbox: BoundingBox\n label: string\n score: number\n }\n }\n plateRecognizerMetadata?: {\n plateNumber?: string\n vehicleMake?: string\n vehicleType?: string\n vehicleColor?: string\n vehicleModel?: string\n vehicleOrientation?: string\n }\n }\n}\n\nexport type AnprCount = {\n date: string\n counts: Record<AnprDirection, number>\n}\n\nexport enum AnprEventStatus {\n IsPlate = \"is_plate\",\n NotPlate = \"not_plate\",\n IsDuplicate = \"is_duplicate\",\n NotDuplicate = \"not_duplicate\",\n}\n\nexport type AnprBulkUpdateRequestPayload = {\n anprEventsIds: number[]\n action: AnprEventStatus\n}\n\nexport type AnprUpdateRequestPayload = {\n plateNumber: string\n vehicleType: GateReportVehicleType\n direction: AnprDirection\n}\n\nexport enum AnprExtractionStatus {\n Pending = \"pending\",\n Running = \"running\",\n Completed = \"completed\",\n Failed = \"failed\",\n}\n\nexport enum AnprExtractionSaveMode {\n All = \"all\",\n AiDbOnly = \"ai_db_only\",\n ImagesOnly = \"images_only\",\n}\n\nexport type AnprExtraction = {\n id: number\n cameraId: number\n userId: number | null\n startDate: string\n endDate: string\n status: AnprExtractionStatus\n totalRecords: number\n error: string | null\n saveMode: AnprExtractionSaveMode\n startedAt: string | null\n completedAt: string | null\n insertedAt: string\n updatedAt: string\n}\n\nexport type AnprExtractionCreatePayload = {\n startDate: string\n endDate: string\n saveMode?: AnprExtractionSaveMode\n}\n","import type { CameraExid, Exid, DateType } from \"@evercam/api/types\"\n\nexport type MediaExid = Exid\n\nexport type Media = {\n project_exid?: string\n cameraExid?: CameraExid\n cameraName: string\n cameraTimezone: string\n createdAt: string\n fromDate: string\n id: number\n requesterEmail: string\n requesterName: string\n title: string\n toDate: string\n url?: string\n exid?: MediaExid\n embedCode?: string\n fileName?: string\n format?: string\n frames?: number\n link?: string\n public?: boolean\n type: MediaType\n status?: MediaStatus\n projectExid?: string\n thumbnailUrl?: string\n mediaUrl?: string\n camera?: string\n}\n\nexport enum MediaType {\n EditedImage = \"edit\",\n ExternalUrl = \"url\",\n Clip = \"clip\",\n File = \"file\",\n LocalClip = \"local_clip\",\n XRay = \"x-ray\",\n Timelapse = \"timelapse\",\n Compare = \"compare\",\n MobileAsset = \"mobile-asset\",\n}\n\nexport enum MediaFileType {\n Gif = \"gif\",\n Mp4 = \"mp4\",\n Png = \"png\",\n Pdf = \"pdf\",\n Jpeg = \"jpeg\",\n Csv = \"csv\",\n}\n\nexport enum MediaStatus {\n Pending = \"Pending\",\n Creating = \"Creating\",\n Processing = \"Processing\",\n Extracting = \"Extracting\",\n Uploading = \"Uploading\",\n Completed = \"Completed\",\n Failed = \"Failed\",\n NoData = \"No Data\",\n}\n\nexport enum MediaStatusId {\n Pending = 0,\n Processing = 1,\n Completed = 2,\n Failed = 3,\n}\n\nexport type MediaFilterQueryParams = {\n title?: string\n sort?: string\n sortBy?: string\n dateRange?: string | string[]\n fromDate?: string\n toDate?: string\n cameraName?: string\n requesterEmail?: string\n type?: MediaType\n cameraExid?: string\n page?: number\n limit?: number\n camera?: string\n}\n\nexport type MediaUpdateRequestPayload = {\n name?: string\n title?: string\n public?: boolean\n}\n\nexport type MediaCreateRequestPayload = {\n fromDate: DateType\n toDate: DateType\n title: string\n type: MediaType\n fileUrl?: string\n fileExtension?: string\n url?: string\n content?: string\n cameraExid?: string\n requestedBy?: string\n notes?: string\n category?: MediaCategory | ClipsCategory\n isUrgent?: boolean\n storeAsType?: MediaType\n}\n\nexport type MediaUsersResponsePayload = Array<{\n id: number\n email: string\n name: string\n}>\nexport enum ClipsCategory {\n HealthSafetySecurity = \"health_safety_security\",\n Legal = \"legal\",\n Marketing = \"marketing\",\n BestPracticies = \"best_practices\",\n}\n\nexport enum MediaCategory {\n Weather = \"weather\",\n SmartSearch = \"smart_search\",\n}\n\nexport type MediaDeleteRequestPayload = {\n timelapseIds: (string | number)[]\n compareIds: (string | number)[]\n archiveIds: (string | number)[]\n}\n","import {\n CompareLogoPosition,\n DateType,\n PaginationParams,\n} from \"@evercam/api/types\"\n\nexport enum BimModelType {\n Architectural = \"Architectural\",\n Structural = \"Structural\",\n FourD = \"4D\",\n Mep = \"Mep\",\n}\n\nexport type BimSnapshotRequestPayload = {\n model: string\n layerTimestamp: string\n apiKey: string\n apiId: string\n}\n\nexport type BimSnapshotResponsePayload = {\n imageUrl?: string\n}\n\nexport type BimModelRequestPayload = {\n model?: string\n timestamp?: string\n apiKey?: string\n apiId?: string\n}\n\nexport type BimModelResponsePayload = {\n dates?: [string]\n height?: number\n imageUrl?: string\n model?: string\n models?: [string]\n rotation?: number\n scaleX?: number\n scaleY?: number\n viewerHeight?: number\n viewerWidth?: number\n width?: number\n x?: number\n y?: number\n}\n\nexport type BimCompareExportRequestPayload = {\n name: string\n cameraExid: string\n snapshotDate: string\n bimDate: string\n embed: string\n compareExid: string\n createAnimation: boolean\n bimTransparency?: number\n model?: string\n layerId?: number\n maskId?: number\n evercamWatermark?: boolean\n logo?: CompareLogoPosition\n}\n\nexport type BimLayerResponsePayload = {\n id: number\n name: string\n insertedAt: string\n updatedAt: string\n shapes: string\n startAt: string\n}\n\nexport enum BimUploadStatus {\n Initial = 0,\n Saving = 1,\n Success = 2,\n Failed = 3,\n}\n\nexport type BimCreationPayload = {\n title: string\n software:\n | \"synchro\"\n | \"navisworks\"\n | \"revit\"\n | \"tekla\"\n | \"archicad\"\n | \"solibri\"\n | \"bim360\"\n | \"other\"\n model: string\n apiKey: string\n apiId: string\n displayName: string\n fileUrl: string\n requestor: string\n finalView: boolean\n enableDistortion: boolean\n startAt: string\n}\n\nexport enum BIMLayerTypes {\n Mask = \"mask\",\n BimMask = \"bim_mask\",\n MeasuringGrid = \"measuring_grid\",\n BimArchitectural = \"bim_architectural\",\n BimStructural = \"bim_structural\",\n Bim4D = \"bim_4d\",\n BimMep = \"bim_mep\",\n RecordingsTag = \"recordings_tag\",\n Milestone = \"milestone\",\n ForgeBimArchitectural = \"forge_bim_architectural\",\n ForgeBimStructural = \"forge_bim_structural\",\n ForgeBim4D = \"forge_bim_4d\",\n ForgeBimMep = \"forge_bim_mep\",\n}\n\nexport type BimLayersQueryParams = {\n layerType: BIMLayerTypes\n timestamp: DateType\n}\n\nexport type BIMLayerPostPayload = {\n name: string\n layerType: BIMLayerTypes\n startAt: DateType\n shapes: string\n zIndex?: number\n}\n\nexport type BIMLayer = {\n id: number\n name: string\n layerType: BIMLayerTypes\n startAt: DateType\n insertedAt: DateType\n updatedAt: DateType\n shapes: string\n}\n\nexport type BimPendingImage = {\n url: string\n s3Url: string\n}\n\nexport type BimUploadCameraParameters = {\n distortionFov: [number]\n horizontalFov: number\n verticalFov: number\n focalLength1: number\n focalLength2: number\n centerX: number\n centerY: number\n}\n\nexport type PendingBimImagesParams = {\n model: string\n apiKey: string\n apiId: string\n}\n\nexport type ProcessPendingImagesBimParams = {\n model: string\n names: string[]\n enableDistortion: boolean\n apiId: string\n apiKey: string\n}\n\nexport type BimUploadsQueryParams = PaginationParams & {\n projectId: string\n id: string\n uploadedBy: string\n}\n\nexport type BimUploadPayload = {\n upload: {\n url: string\n title: string\n fileExtension: string\n }[]\n}\n\nexport enum ForgeBimUploadMethod {\n FileUpload = \"file_upload\",\n AutodeskAcc = \"autodesk_acc\",\n}\n\nexport enum ForgeBimFileRejectionReason {\n InvalidType = \"invalid_type\",\n ExceedsSizeLimit = \"exceeds_size_limit\",\n}\n\nexport enum ForgeBimUploadStage {\n TusUpload = \"tus_upload\",\n IngestUpload = \"ingest_upload\",\n}\n\nexport enum ForgeBimDialogTrigger {\n UpdateModel = \"update_model\",\n AddModel = \"add_model\",\n InitialSetup = \"initial_setup\",\n}\n\nexport type BimUpdatedWebhookPayload = {\n eventName: \"bim.updated\"\n projectId: string\n data: {\n updatedAt: string\n bimIdentifier: string\n }\n}\n","import {\n AuditLogActionType,\n DateType,\n EntityByExid,\n KitAlarm,\n NvrDeviceType,\n PaginationParams,\n PowerSchedule,\n PowerType,\n ProjectExid,\n ProjectFeatureFlag,\n Schedule,\n ScheduleLowercase,\n TimestampPositionCoordinates,\n} from \"@evercam/api/types\"\nimport { DateRangeFilter } from \"@evercam/api/types/time\"\nimport { GeoPoint, TuplePoint2D } from \"@evercam/api/types/shared\"\n\nexport type CameraExid = string\n\nexport type CamerasByExid = EntityByExid<Camera>\n\nexport type Camera = {\n cameraPowerSchedule?: Schedule\n camPassword?: string\n camUsername?: string\n cloudRecordings: {\n frequency: number\n schedule: Schedule\n status: string\n storageDuration: string\n }\n liveViewFrequency: number | null\n createdAt: string\n description: string | null\n discoverable: boolean\n external: {\n host: string\n http: {\n camera: string\n jpg: string\n nvrJpg: string\n nvrPort: string\n port: string\n }\n rtsp: {\n h264: string\n port: string\n }\n }\n featureFlags: Array<CameraFeatureFlag>\n fovAngle: number\n fovRadius: number\n heading: number\n id: CameraExid\n exid: CameraExid\n isOnline: boolean\n isPowerScheduleActive: boolean\n isPublic: boolean\n lastOnlineAt: string\n lastPolledAt: string\n location: GeoPoint\n modelId: string\n modelName: string\n name: string\n nvrChannel: number\n nvrDeviceId: string\n nvrHost: string\n nvrHttpPort: number\n nvrModel: NvrModel\n nvrScheme: string\n nvrSnapshotEndpoint: string\n nvrStreamingEndpoint: string\n offlineReason: string\n owned: boolean\n owner: string\n pitch: string | null\n project: { id: string; name: string }\n proxyUrl: { hls: string; rtmp: string }\n ptz: boolean\n recordingFromNvr: boolean\n model?: CameraModel\n roll: string | null\n routerId: number\n status: CameraStatus\n streamingServer: string\n thumbnailUrl: string\n largeThumbnailUrl?: string\n timezone: string\n updatedAt: string\n vendorName: string\n isAccessRestricted?: boolean\n kitAlarms?: KitAlarm[]\n timestampPosition?: TimestampPositionCoordinates\n position?: number | null\n}\n\nexport type AdminCamera = {\n id: number\n exid: CameraExid\n name: string\n status: string\n description: string | null\n createdAt: string\n updatedAt: string\n lastOnlineAt: string | null\n lastPolledAt: string | null\n decommissionedAt: string | null\n deletedAt?: string | null\n projectId: number | null\n projectExid: string | null\n projectName: string | null\n projectFeatureFlags: Array<ProjectFeatureFlag | string>\n userId: number | null\n userEmail: string\n userFullname: string\n userApiId?: string\n userApiKey?: string\n isPublic: boolean\n sharedWithConstruction?: boolean\n timezone: string | null\n location?: GeoPoint | null\n fovAngle?: number | null\n fovRadius?: number | null\n heading?: number | null\n pitch?: number | null\n roll?: number | null\n cameraModel?: string | null\n cameraHost?: string | null\n cameraHttpPort?: number | null\n cameraRtspPort?: number | null\n cameraScheme?: string | null\n cameraUsername?: string | null\n cameraPassword?: string | null\n cameraPictureEndpoint?: string | null\n rtspUrl?: string | null\n httpUrl?: string | null\n deviceId?: string | null\n nvrId?: number | null\n nvrDeviceId?: string | null\n nvrModel?: NvrModel | string | null\n nvrHost?: string | null\n nvrHttpPort?: number | null\n nvrRtspPort?: number | null\n nvrScheme?: string | null\n nvrUsername?: string | null\n nvrPassword?: string | null\n nvrPictureEndpoint?: string | null\n streamEndpoint?: string | null\n routerId?: number | null\n kitId?: number | null\n powerType?: string | null\n powerSchedule?: ScheduleLowercase | Record<string, string[]>\n isPowerScheduleActive?: boolean\n discoverable?: boolean\n recordingFromNvr?: boolean\n cloudRecordingFrequency?: number | null\n cloudRecordingId?: number | null\n cloudRecordingStatus?: string | null\n cloudRecordingSchedule?: ScheduleLowercase | null\n cloudRecordingStorageDuration?: number | null\n liveViewFrequency?: number | null\n anprSources?: string[]\n storageProviders?: string[]\n featureFlags?: CameraFeatureFlag[]\n zohoId?: string | null\n offlineReason?: string | null\n macAddress?: string | null\n type?: string[]\n thumbnailUrl?: string\n}\n\nexport type CameraMapMarker = {\n isOnline: boolean\n location: GeoPoint\n needFov: boolean\n rotation: number\n fovAngle: number\n fovRadius: number\n}\n\nexport enum CameraStatus {\n Online = \"online\",\n Offline = \"offline\",\n OfflineScheduled = \"offline_scheduled\",\n Decommissioned = \"decommissioned\",\n OnHold = \"on_hold\",\n Waiting = \"waiting\",\n UnderMaintenance = \"under_maintenance\",\n WaitingForSiteVisit = \"waiting_for_site_visit\",\n}\n\nexport enum IntensityChange {\n High = \"High\",\n Moderate = \"Moderate\",\n Low = \"Low\",\n NoChange = \"No change\",\n Default = \"Default\",\n}\n\nexport const IntensityChangeColorMap: Record<IntensityChange, string> = {\n [IntensityChange.High]: \"#FF5252\",\n [IntensityChange.Moderate]: \"#FBC02D\",\n [IntensityChange.Low]: \"#006400\",\n [IntensityChange.NoChange]: \"#3ACF3A\",\n [IntensityChange.Default]: \"black\",\n}\n\nexport enum CameraFeatureFlag {\n EdgeVideo = \"edge_video\",\n BimCompare = \"bim_compare\",\n TwoDBimCompare = \"2d_bim_compare\",\n ForgeBIMCompare = \"forge_bim_compare\",\n GateReport = \"gate_report\",\n VideoStream = \"video_stream\",\n WebRTC = \"webrtc\",\n ANPR = \"anpr\",\n ReverseANPR = \"reverse_anpr\",\n PTZ = \"ptz\",\n ObjectDetection = \"object_detection\",\n Segmentation = \"segmentation\",\n SegmentationAutoLabelling = \"segmentation_auto_labelling\",\n PpeMonitoring = \"ppe_monitoring\",\n PpeOwlv2 = \"ppe_owlv2\",\n PpeGemini = \"ppe_gemini\",\n PpeYolo = \"ppe_yolo\",\n PpeV2 = \"ppe_v2\",\n NoLiveView = \"no_live_view\",\n NoRecordings = \"no_recordings\",\n Ring = \"ring\",\n CloudOnly = \"cloud_only\",\n}\n\nexport type CameraUpdateRequestPayload = {\n status?: string\n timezone?: string\n isPuclic?: boolean\n discoverable?: boolean\n fullname?: string\n lastOnline?: string\n owner?: string\n description?: string\n cameraPowerSchedule?: Schedule\n isPowerScheduleActive?: boolean\n powerSchedule?: object\n ptz?: boolean\n camUsername?: string\n camPassword?: string\n project?: { id: string; name: string }\n modelName?: string\n host?: string\n nvrChannel?: number\n nvrPortHttp?: string\n externalRtspPort?: string\n name?: string\n h264Url?: string\n snapshotUrl?: string\n nvrSnapshotUrl?: string\n routerId?: string | number\n coordinates?: Array<number>\n heading?: number\n fovAngle?: number\n fovRadius?: number\n featureFlags: CameraFeatureFlag[]\n isAccessRestricted?: boolean\n liveViewFrequency?: number | null\n}\n\nexport type CamerasResponsePayload = {\n cameras?: Camera[]\n}\n\nexport type CameraNoteResponsePayload = {\n id: number\n camera: {\n exid: string\n name: string\n }\n who: string\n noteType: string\n content: string\n pinned: boolean\n insertedAt: string\n}\n\nexport type CameraStatusLog = {\n start: string\n end: string\n state: CameraStatus\n}\n\nexport type Log = {\n details: {\n agent?: string\n country?: string\n countryCode?: string\n ip?: string\n with?: string\n message?: string\n status?: string\n type?: string\n }\n insertedAt: string\n type: string\n who: string\n}\n\nexport type NvrConfig = {\n apiUrl: string\n username?: string\n password?: string\n deviceId: string\n streamingUrl: string\n snapshotUrl: string\n bifUrl: string\n}\n\nexport enum NvrModel {\n YCam = \"y-cam\",\n Axis = \"axis\",\n Dahua = \"dahua\",\n Mobotix = \"mobotix\",\n Hikvision = \"hikvision\",\n Avigilion = \"avigilion\",\n Hanwha = \"hanwha\",\n Nxwitness = \"nxwitness\",\n ExNvr = \"ex_nvr\",\n}\n\nexport enum CameraModel {\n YCam = \"y-cam\",\n Axis = \"axis\",\n Dahua = \"dahua\",\n Mobotix = \"mobotix\",\n Milesight = \"milesight\",\n Hikvision = \"hikvision\",\n Avigilion = \"avigilion\",\n Hanwha = \"hanwha\",\n Other = \"other\",\n Ring = \"ring\",\n}\n\nexport type Footage = {\n cameraExid: string\n cameraName: string\n endDate: string | null\n startDate: string | null\n}\n\nexport type Hdd = {\n id: number\n location: string\n serialNumber: string\n hddStatus: string\n shelfBlock: string\n type: string\n size: string\n format: string\n footages: Array<Footage>\n reportedCapacity: string\n reportedFreeSpace: string\n reportedProperty: string\n reportedPath: string\n reportedHddType: string\n errorStatus: string\n canExpand: boolean\n}\n\nexport type CameraPath = {\n projectExid: ProjectExid\n cameraExid: CameraExid\n}\n\nexport type CheckCameraPortPayload = {\n address: string\n port: number\n open: boolean\n}\n\nexport type CameraCreateRequestPayload = {\n status: CameraStatus\n timezone?: string\n powerSchedule?: Schedule\n isPowerScheduleActive?: boolean\n ptz?: boolean\n name: string\n coordinates?: TuplePoint2D\n recordingFromNvr?: boolean\n CameraConfig: {\n model: CameraModel\n scheme?: \"http\" | \"https\"\n host: string\n httpPort: number\n username: string\n password: string\n rtspPort?: number\n pictureEndpoint?: string\n streamEndpoint?: string\n }\n nvr?: {\n model: NvrModel\n serial?: string\n deviceType?: NvrDeviceType\n macAddress?: string\n username: string\n password: string\n httpUrl: string\n rtspUrl?: string\n }\n cloudRecording?: {\n id?: number\n frequency: 1 | 2 | 4 | 5 | 6 | 10 | 12 | 30 | 60\n storageDuration: -1 | 1 | 7 | 30 | 90\n status: \"on\" | \"off\" | \"paused\" | \"on_scheduled\"\n schedule: Schedule\n }\n ownerId: number\n projectId: number\n}\n\nexport type CameraDeletePayload = {\n verify: string\n password: string\n}\n\nexport type CameraNote = {\n id: number\n cameraId: number\n who: string\n noteType: string\n content: string\n pinned: boolean\n insertedAt: DateType\n}\n\nexport type GetCameraNotesParams = {\n noteType?: string\n pinned?: boolean\n sort?: string\n page?: number\n limit?: number\n}\n\nexport type CreateCameraNotePayload = {\n noteType: string\n content: string\n pinned?: boolean\n}\n\nexport enum HddStatus {\n Error = \"error\",\n Idle = \"idle\",\n NotExist = \"notExist\",\n Unformatted = \"unformatted\",\n Ok = \"ok\",\n}\n\nexport type NvrQueryParams = PaginationParams & {\n ownerId: number\n cameraName: string\n cameraExid: CameraExid\n cameraIp: string\n hddStatus: HddStatus\n}\n\nexport type OfflineCamera = {\n id: number\n exid: string\n name: string\n fullname: string\n timezone: string\n status: CameraStatus\n zohoId: string\n externalHost: string\n nvrHttpPort: string\n externalRtspPort: string\n username: string\n password: string\n createdAt: DateType\n lastPolledAt: DateType\n lastOnlineAt: DateType\n powerType: PowerType\n powerSchedule: PowerSchedule\n batteryReadingsLastSeen: DateType\n batteryReadingsLastVoltage: number\n sims: {\n billPayer: string\n number: string\n provider: string\n }[]\n}\n\nexport type OfflineCameraQueryParams = PaginationParams & {\n status: CameraStatus\n cameraExid: CameraExid\n cameraName: string\n timezone: string\n cameraOwner: string\n powerType: PowerType\n powerSchedule: PowerSchedule\n batteryReadingsLastVoltage: number\n}\n\nexport type OfflineCameraNote = {\n action: AuditLogActionType\n username: string\n insertedAt: DateType\n cameraId: number\n customMessage: string\n}\n\nexport type OfflineCameraNoteResponse = {\n publicNotes: OfflineCameraNote[]\n privateNotes: OfflineCameraNote[]\n}\n\nexport type SiteVisitCamerasQueryParams = PaginationParams & {\n cameraOwner: string\n}\n\nexport type ProjectCamera = {\n apiId: string\n apiKey: string\n exid: string\n id: number\n name: string\n ownerEmail: string\n ownerFullname: string\n}\n\nexport enum DuplicatedCameraFields {\n Host = \"host\",\n CameraHttpPort = \"camera_http_port\",\n NvrHttpPort = \"nvr_http_port\",\n NvrDeviceId = \"nvr_device_id\",\n}\n\nexport type DuplicatedCameraObject = {\n exid: string\n name: string\n cameraStatus: string\n crStatus: string\n}\n\nexport type DuplicatedCameraResponse = {\n cameras: DuplicatedCameraObject[]\n host: string\n cameraHttpPort: number\n nvrHttpPort: number\n nvrDeviceId: string\n count: number\n}\n\nexport type MergeDuplicatedCameraPayload = {\n masterCamera: Record<string, unknown>\n shareeCameras: Record<string, unknown>\n}\n\nexport type FetchCameraQueryParams = PaginationParams & {\n /** Narrows the index to one project. Sent as `project_exid`. */\n projectExid: ProjectExid\n status: CameraStatus\n isPublic: boolean\n featureFlags: CameraFeatureFlag[]\n ptz: boolean\n frequency: number\n channel: number\n cameraExid: CameraExid\n cameraExids: CameraExid[]\n cameraName: string\n projectName: string\n timezone: string\n region: string\n cameraModel: CameraModel\n nvrModel: NvrModel\n cameraOwner: string\n ownerEmail: string\n isRecording: boolean\n cloudRecordingStorageDuration: number\n cameraIds: string\n hasLocation: boolean\n externalHttpPort: string\n externalRsptPort: string\n nvrHttpPort: string\n}\n\nexport enum BimType {\n TwoD = \"2D\",\n Forge = \"Forge\",\n}\n\nexport type CameraDateRangeFilter = DateRangeFilter & {\n cameraExid: CameraExid\n}\n","import { DateType, PaginationParams } from \"@evercam/api/types\"\n\nexport type Compare = {\n cameraExid: string\n createdAt: string\n embedCode: string\n embedTime: boolean\n fileName: string\n frames: number\n fromDate: string\n id: number\n exid: string\n mediaUrls: {\n gif: string\n mp4: string\n }\n public: boolean\n requesterEmail: string\n requesterName: string\n status: string\n thumbnailUrl: string\n title: string\n toDate: string\n type: string\n}\n\nexport enum CompareStatus {\n Processing = 0,\n Completed = 1,\n Failed = 2,\n}\n\nexport type CompareRequestPayload = {\n compareExid: string\n name: string\n beforeDate: string\n afterDate: string\n cameraExid: string\n embed: string\n bim?: boolean\n custom?: boolean\n options?: {\n type: string\n beforeSnap: string\n afterSnap: string\n }\n createAnimation: boolean\n evercamWatermark: boolean\n logo?: CompareLogoPosition\n}\n\nexport type CompareLogoPosition = {\n id?: number\n width: number\n height: number\n x: number\n y: number\n}\n\nexport type AdminCompare = {\n id: number\n compareExid: string\n exid: string\n projectId: string\n apiId: string\n apiKey: string\n name: string\n fullname: string\n camera: string\n status: number\n embedCode: string\n insertedAt: DateType\n}\n\nexport type AdminCompareQueryParams = PaginationParams & {\n name: string\n camera: string\n}\n","import { Point3D } from \"@evercam/api/types/shared\"\n\nexport type DroneCameraTransform = {\n position: Point3D\n direction: Point3D\n up: Point3D\n right: Point3D\n}\n\nexport type DroneModel = {\n cesiumId: number\n cesiumId2D: number\n date: string\n cesiumPointCloudId: string\n cesiumGausianSplatId: string\n pointSize: string\n maximumScreenSpaceError: number\n link: string\n trueIndex: number\n}\n\nexport type DroneProjectTransform = {\n initialCameraTransform?: DroneCameraTransform\n initial2DCameraTransform?: DroneCameraTransform\n markers?: Record<string, DroneMarker>\n imageryPlans?: Record<string, DroneImageryPlan>\n bimData?: DroneBimData\n terrainPoints?: Record<string, Point3D[]>\n projectWGS84Coordinates?: DroneProjectCoordinates | null\n tags?: Record<string, DroneTag>\n}\n\nexport type DroneProjectData = {\n models?: DroneModel[]\n transform?: DroneProjectTransform\n integrationType?: DroneProvider\n origin?: string\n params?: string\n pointSize?: number\n}\n\nexport type DroneProjectDataPatch = {\n models?: Record<number, Partial<DroneModel>>\n integrationType?: DroneProvider\n origin?: string\n params?: string\n}\n\nexport type DroneProjectCoordinates = {\n lat: number | null\n lon: number | null\n alt: number | null\n}\n\nexport type DroneTransformPatch = {\n projectWGS84Coordinates?: DroneProjectCoordinates | null\n}\n\nexport enum DroneTagType {\n AerialShot = \"AerialShot\",\n}\n\nexport type DroneTag<T extends DroneTagType = DroneTagType> = {\n id?: number\n type: T\n comment: string\n position?: Point3D\n // Stored as the JSON string produced by $cesium.getCameraTransform and\n // parsed back with JSON.parse when flying to the shot.\n cameraTransform?: string\n creationDate: string\n hyperlink?: string\n height?: number\n}\n\nexport type AerialShotPoint = DroneTag<DroneTagType.AerialShot>\n\nexport type DroneMarkerTransform = {\n fovAngle: number\n fovRadius: number\n heading: number\n height: number\n latitude: string\n longitude: string\n pitch: number\n roll: number\n scale: number\n}\n\nexport enum DroneMarkerType {\n Default = \"Default\",\n Gate = \"Gate\",\n Indoor = \"Indoor\",\n}\n\nexport type DroneMarker = {\n type: DroneMarkerType\n name: string\n cameraExid: string\n transform: DroneMarkerTransform\n}\n\nexport type DroneImageryPlan = {\n cesiumId: number\n uuid: string\n name: string\n alpha: number\n order: number\n}\n\nexport type DroneBimData = {\n cesiumId: string | null\n iModelId: string | null\n changeSetId: string | null\n isItwin: boolean\n}\n\nexport enum DroneUrlParams {\n Date = \"date\",\n}\n\nexport enum DroneProvider {\n Evercam = \"Evercam\",\n DroneDeploy = \"DroneDeploy\",\n}\n","import { AxiosError } from \"axios\"\n\nexport enum ErrorType {\n BadRequestError = \"BadRequestError\",\n NotFoundError = \"NotFoundError\",\n UnauthorizedError = \"UnauthorizedError\",\n GatewayTimeoutError = \"GatewayTimeoutError\",\n BadGatewayError = \"BadGatewayError\",\n ForbiddenError = \"ForbiddenError\",\n HlsError = \"HlsError\",\n SnapshotError = \"SnapshotError\",\n ConflictError = \"ConflictError\",\n InternalServerError = \"InternalServerError\",\n CanceledError = \"CanceledError\",\n UnhandledRejection = \"UnhandledRejection\",\n TypeError = \"TypeError\",\n}\n\nexport enum ErrorCode {\n InternalServerError = 500,\n BadGatewayError = 502,\n ServiceUnavailableError = 503,\n GatewayTimeoutError = 504,\n BadRequestError = 400,\n UnauthorizedError = 401,\n ForbiddenError = 403,\n NotFoundError = 404,\n ConflictError = 409,\n GoneError = 410,\n}\n\nexport enum EvercamApiErrorCode {\n IntegrationError = \"INTEGRATION_ERROR\",\n BadArgument = \"BAD_ARGUMENT\",\n DeviceError = \"DEVICE_ERROR\",\n UnsupportedOperation = \"UNSUPPORTED_OPERATION\",\n QuotaExceeded = \"QUOTA_EXCEEDED\",\n InvalidCredentials = \"INVALID_CREDENTIALS\",\n InvalidToken = \"INVALID_TOKEN\",\n ProviderAuthFailure = \"PROVIDER_AUTH_FAILURE\",\n ProviderEmailRequired = \"PROVIDER_EMAIL_REQUIRED\",\n PasswordReset = \"PASSWORD_RESET\",\n RequireShareRequest = \"REQUIRE_SHARE_REQUEST\",\n Generic = \"GENERIC\",\n}\n\ntype _EvercamApiError = {\n code: EvercamApiErrorCode\n message: string\n details: string\n innerError?: _EvercamApiError\n}\n\nexport type EvercamApiError = AxiosError<_EvercamApiError>\n\nexport type AppError = {\n statusCode?: number\n message?: string\n redirect?: {\n url?: string\n label?: string\n delay?: number\n }\n withSupportMessage?: boolean\n isWidget?: boolean\n}\n","import {\n AnprDirection,\n AnprEvent,\n CameraExid,\n DateType,\n PaginatedItems,\n PaginationParams,\n ProjectExid,\n RoiDirection,\n RoiShapeType,\n RoiType,\n Timestamp,\n TuplePoint2D,\n} from \"@evercam/api/types\"\n\nexport enum GateReportDetectionType {\n Auto = \"auto\",\n Manual = \"manual\",\n Cloud = \"cloud\",\n Edge = \"edge\",\n}\n\nexport enum GateReportEventType {\n Arrived = \"arrived\",\n Left = \"left\",\n}\n\nexport enum DetectionLabel {\n ArticulatedDumper = \"articulated-dumper\",\n BackhoeLoader = \"backhoe-loader\",\n CompactExcavator = \"compact-excavator\",\n ConcretePump = \"concrete-pump\",\n Dumper = \"dumper\",\n Excavator = \"excavator\",\n FlatbedSemiTrailer = \"flatbed-semi-trailer\",\n IndustrialTruck = \"industrial-truck\",\n Loader = \"loader\",\n Mewps = \"mewps\",\n MobileCrane = \"mobile-crane\",\n MobileCrusher = \"mobile-crusher\",\n OtherTruck = \"other-truck\",\n PileDrillingRig = \"pile-drilling-rig\",\n RoadVehicle = \"road-vehicle\",\n Roller = \"roller\",\n SemiTrailer = \"semi-trailer\",\n SkidSteerLoader = \"skid-steer-loader\",\n SkipTruck = \"skip-truck\",\n SmallTruck = \"small-truck\",\n TankTruck = \"tank-truck\",\n TeleHandler = \"tele-handler\",\n TippingTruck = \"tipping-truck\",\n TowerCrane = \"tower-crane\",\n TowerMountedConcreteMix = \"tower-mounted-concrete-mix\",\n TractorDozer = \"tractor-dozer\",\n TruckHead = \"truck-head\",\n TruckMixer = \"truck-mixer\",\n TruckMountedMobileCrane = \"truck-mounted-mobile-crane\",\n Unknown = \"unknown\",\n Worker = \"worker\",\n Rubble = \"rubble\",\n Puddle = \"puddle\",\n DirtGravelCementPile = \"dirt_gravel_cement_pile\",\n DetachedExcavatorBucket = \"detached_excavator_bucket\",\n IntermediateBulkContainer = \"intermediate_bulk_container\",\n WoodenPallet = \"wooden_pallet\",\n ShippingContainer = \"shipping_container\",\n AirCompressor = \"air_compressor\",\n DryMortarSilo = \"dry_mortar_silo\",\n Fence = \"fence\",\n Brick = \"brick\",\n Barrel = \"barrel\",\n Cardboard = \"cardboard\",\n CardboardBox = \"cardboard_box\",\n CementBag = \"cement_bag\",\n ConcreteBlock = \"concrete_block\",\n ConcretePipe = \"concrete_pipe\",\n ConcreteSlab = \"concrete_slab\",\n Door = \"door\",\n PlasticWrap = \"plastic_wrap\",\n ContainerOffice = \"container_office\",\n ElectricalPole = \"electrical_pole\",\n ElectricalBox = \"electrical_box\",\n FireHydrant = \"fire_hydrant\",\n FireExtinguisher = \"fire-extinguisher\",\n HoseReel = \"hose_reel\",\n Ladder = \"ladder\",\n MetalBeam = \"metal_beam\",\n MetalPipe = \"metal_pipe\",\n Pallet = \"pallet\",\n Person = \"person\",\n Pillar = \"pillar\",\n PlasticBin = \"plastic_bin\",\n PlasticBucket = \"plastic_bucket\",\n PlasticPipe = \"plastic_pipe\",\n PublicToilet = \"public_toilet\",\n Sign = \"sign\",\n SiteToolbox = \"site_toolbox\",\n StreetSink = \"street_sink\",\n TrafficBarrier = \"traffic_barrier\",\n TrafficCone = \"traffic_cone\",\n Wall = \"wall\",\n WasteContainer = \"waste_container\",\n WaterStorageTank = \"water_storage_tank\",\n Wheelbarrow = \"wheelbarrow\",\n Window = \"window\",\n WoodPlank = \"wood_plank\",\n CableReel = \"cable_reel\",\n AirConditioningSystem = \"air_conditioning_system\",\n WoodenBox = \"wooden_box\",\n PlasticBag = \"plastic_bag\",\n MaterialStack = \"material_stack\",\n}\n\nexport enum SegmentLabel {\n AirCompressor = \"air_compressor\",\n Brick = \"brick\",\n Building = \"building\",\n CableReel = \"cable_reel\",\n CementMixer = \"cement_mixer\",\n CementPile = \"cement_pile\",\n ConcreteBarrier = \"concrete_barrier\",\n ConcreteBlock = \"concrete_block\",\n ConstructionContainer = \"construction_container\",\n ConstructionSite = \"construction_site\",\n Crane = \"crane\",\n DetachedExcavatorBucket = \"detached_excavator_bucket\",\n DryMortarSilo = \"dry_mortar_silo\",\n DumpTruck = \"dump_truck\",\n Dumpster = \"dumpster\",\n Fence = \"fence\",\n FireHydrant = \"fire_hydrant\",\n GarbageBin = \"garbage_bin\",\n HoseReel = \"hose_reel\",\n Ibc = \"ibc\",\n JerryCan = \"jerry_can\",\n MetalBeam = \"metal_beam\",\n MiniDumper = \"mini_dumper\",\n Pallet = \"pallet\",\n Pipe = \"pipe\",\n Puddle = \"puddle\",\n Rebar = \"rebar\",\n Rubble = \"rubble\",\n Scaffolding = \"scaffolding\",\n ShippingContainer = \"shipping_container\",\n SiteOffice = \"site_office\",\n TrafficCone = \"traffic_cone\",\n Transformer = \"transformer\",\n Vehicle = \"vehicle\",\n Window = \"window\",\n WoodenSpool = \"wooden_spool\",\n Unknown = \"unknown\",\n}\n\nexport enum GateReportVehicleType {\n ConcretePump = DetectionLabel.ConcretePump,\n FlatbedSemiTrailer = DetectionLabel.FlatbedSemiTrailer,\n OtherTruck = DetectionLabel.OtherTruck,\n RoadVehicle = DetectionLabel.RoadVehicle,\n SemiTrailer = DetectionLabel.SemiTrailer,\n SmallTruck = DetectionLabel.SmallTruck,\n TankTruck = DetectionLabel.TankTruck,\n TippingTruck = DetectionLabel.TippingTruck,\n TruckHead = DetectionLabel.TruckHead,\n TruckMixer = DetectionLabel.TruckMixer,\n Unknown = DetectionLabel.Unknown,\n}\n\nexport type GateReportVehicleTypeItem = {\n label: string\n value: GateReportVehicleType\n}\n\nexport type GateReportEvent = {\n id: number\n vehicleTypes: GateReportVehicleType\n exid: string\n cameraExid?: string\n boundingBox: BoundingBox\n detectionType: GateReportDetectionType\n edited: boolean\n eventTime: string\n timestamp?: string\n eventType: GateReportEventType\n isPublic: boolean\n roiId: string\n truckType: GateReportVehicleType\n thumbnailUrl?: string\n}\n\nexport type GateReportVerifiedDay = {\n id: number\n day: string\n isMatched: boolean\n insertedAt: string\n updatedAt: string\n verifiedBy: string\n cameraExid: CameraExid\n projectExid: ProjectExid\n}\n\nexport type BoundingBox = {\n xmax: number\n xmin: number\n ymax: number\n ymin: number\n}\n\nexport type EventsCount = {\n in: number\n out: number\n source: GateReportDataSource\n}\n\nexport type YearlyEventCount = EventsCount & {\n year: string\n}\n\nexport type MonthlyEventCount = EventsCount & {\n month: string\n}\n\nexport type DailyEventCount = EventsCount & {\n day: string\n}\n\nexport type EventCountRequestPayload = {\n vehicleTypes?: GateReportVehicleType[]\n isPublic?: boolean\n camerasExid?: string[]\n}\n\nexport type EventCountResponsePayload = {\n days?: DailyEventCount[]\n months?: MonthlyEventCount[]\n years?: YearlyEventCount[]\n}\n\nexport enum GateReportDataSource {\n Anpr = \"anpr\",\n Events = \"events\",\n}\n\nexport type GateReportResponsePayload = {\n source: GateReportDataSource\n results: PaginatedItems<AnprEvent>\n}\n\nexport enum GateReportEventDirection {\n In = \"in\",\n Out = \"out\",\n Unknown = \"unknown\",\n}\n\nexport type GatReportRequestPayload = {\n camerasExid?: CameraExid[]\n eventType?: GateReportEventType\n fromDate?: string\n isPublic?: boolean\n toDate?: string\n vehicleTypes?: GateReportVehicleType[]\n} & PaginationParams\n\nexport enum GateReportExportType {\n Pdf = \"pdf\",\n Csv = \"csv\",\n}\n\nexport type AnprExportBaseParams = {\n vehicleTypes?: GateReportVehicleType[]\n fileType?: GateReportExportType\n fromDate?: string\n toDate?: string\n camerasExid?: CameraExid[]\n isPublic?: boolean\n columns?: string[]\n}\n\nexport type EventsExportRequestParameters = AnprExportBaseParams & {\n eventType: GateReportEventType\n}\n\nexport type AnprBasedGateReportExportRequestParams = AnprExportBaseParams & {\n direction?: AnprDirection\n}\n\nexport type LegacyAnprExportParams = AnprExportBaseParams & {\n direction?: AnprDirection\n}\n\nexport type GateReportROIShape = {\n coordinates: TuplePoint2D[]\n type: RoiShapeType\n}\n\nexport type GateReportROI = {\n cameraex?: string\n fromDate?: string\n directionFilter?: RoiDirection\n id?: number\n insertedAt?: Timestamp\n isActive?: boolean\n name?: string\n roiType?: RoiType\n updatedAt?: Timestamp\n shapes?: GateReportROIShape[]\n}\n\nexport enum GateReportProcessingStatus {\n Processed = \"processed\",\n Unprocessed = \"unprocessed\",\n}\n\nexport const VEHICLE_TYPE_IDS = Object.values(GateReportVehicleType)\n\nexport type GateReportCamera = {\n exid: number\n name: string\n status: string\n note: string\n last_published_day: DateType\n last_processed_day: DateType\n}\n\nexport type VerifiedDaysQueryParams = PaginationParams & {\n projectExid: ProjectExid\n camerasExid: CameraExid[]\n verifiedBy: string\n isMatched: boolean\n insertedAt: string[]\n updatedAt: string[]\n day: string\n}\n\nexport type VerifyDayUpdateRequestPayload = {\n camerasExid: string[]\n projectExid: string\n day: string\n isMatched: boolean\n verifiedBy: string\n}\n\nexport type ProcessedDaysQueryParams = {\n camerasExid: CameraExid[]\n isPublic: boolean\n eventType: GateReportEventType\n}\n\nexport type RoisQueryParams = {\n camerasExid: CameraExid[]\n id: number\n name: string\n fromDate: string\n roiType: RoiType\n isActive: boolean\n directionFilter: string\n sort: string\n}\n\nexport type GateReportRoiRequestPayload = {\n id: number\n cameraExid: string\n name: string\n roiType: RoiType\n isActive: true\n fromDate: string\n shapes: GateReportROIShape[]\n directionFilter: string\n note: string\n}\n","import { PaginationParams } from \"@evercam/api/types\"\n\nexport enum HddFormat {\n ExFat = \"ExFAT\",\n HikFs = \"HikFS\",\n}\n\nexport enum HddType {\n Magnetic35 = '3.5\" Magnetic',\n Magnetic25 = '2.5\" Magnetic',\n Ssd25 = '2.5\" SSD',\n}\n\nexport enum HddState {\n Blank = \"Blank\",\n InUse = \"In Use\",\n ColdStorage = \"Cold Storage\",\n}\n\nexport enum WarehouseLocationIndex {\n IEWarehouse = 1,\n Deployed = 2,\n CustomerStorage = 3,\n USWarehouse = 4,\n AUWarehouse = 5,\n UKWarehouse = 6,\n}\n\nexport enum WarehouseLocation {\n IEWarehouse = \"IE Warehouse\",\n Deployed = \"Deployed\",\n CustomerStorage = \"Customer Storage\",\n USWarehouse = \"US Warehouse\",\n AUWarehouse = \"AU Warehouse\",\n UKWarehouse = \"UK Warehouse\",\n}\n\nexport enum HddSize {\n TwoTB = \"2 TB\",\n FourTB = \"4 TB\",\n FiveTB = \"5 TB\",\n SixTB = \"6 TB\",\n EightTB = \"8 TB\",\n TenTB = \"10 TB\",\n}\n\nexport type FootageCreateUpdatePayload = {\n cameraId: string\n startDate: string\n endDate: string\n}\n\nexport type HDDCreateUpdatePayload = {\n size: string\n type: string\n format: string\n locationId: string\n serialNumber: string\n hddStatus: string\n shelfBlock: string\n}\n\nexport type HDDsQueryParams = PaginationParams & {\n id: number\n location: string\n serialNumber: string\n shelfBlock: string\n format: string\n size: string\n type: string\n hddStatus: string\n}\n\nexport type AdminHddFootage = {\n id: number\n cameraExid: string\n cameraName: string\n startDate: string | null\n endDate: string | null\n}\n\nexport type AdminHdd = {\n id: number\n size: string\n type: string\n format: string\n location: string\n errorStatus: string | null\n createdAt: string\n serialNumber: string\n hddStatus: string\n reportedCapacity: string | null\n reportedFreeSpace: string | null\n reportedHddType: string | null\n reportedPath: string | null\n reportedProperty: string | null\n shelfBlock: string\n footages: AdminHddFootage[]\n}\n","import {\n PaginationParams,\n DateType,\n JsonValue,\n TuplePoint2D,\n} from \"@evercam/api/types\"\nimport type { _360FloorV2, _360WalkV2 } from \"@evercam/api/types/360\"\n\nexport enum IngestProcessingStatus {\n Completed = \"completed\",\n Uploading = \"uploading\",\n Created = \"created\",\n Failed = \"failed\",\n Aborted = \"aborted\",\n Paused = \"paused\",\n InProgress = \"inprogress\",\n Pending = \"pending\",\n Downloading = \"downloading\",\n}\n\nexport enum MobileAssetsType {\n Audio = \"mobile_audios\",\n Photo = \"mobile_photos\",\n}\n\nexport enum IngestVersions {\n V1 = \"v1\",\n V2 = \"v2\",\n V3 = \"v3\",\n V4 = \"v4\",\n V5 = \"v5\",\n}\n\nexport enum IngestTypes {\n Drone = \"drone\",\n ThreeSixty = \"360\",\n}\n\nexport type DronesQueryParams = Omit<PaginationParams, \"sort\"> & {\n projectId: string\n consumed: string\n token: string\n processingStatus: IngestProcessingStatus\n}\n\nexport type IngestPaginatedResponse<T> = {\n items: T[]\n page: number\n limit: number\n total: number\n pageCount?: number\n}\n\nexport enum IngestProcessingStepStatus {\n Running = \"running\",\n Completed = \"completed\",\n Failed = \"failed\",\n Skipped = \"skipped\",\n}\n\nexport enum IngestProcessingRunStatus {\n Processing = \"processing\",\n Completed = \"completed\",\n Failed = \"failed\",\n}\n\nexport type IngestProcessingMetricStat = {\n avg?: number\n peak?: number\n}\n\nexport type IngestProcessingStepMetrics = {\n cpu?: IngestProcessingMetricStat\n ram?: IngestProcessingMetricStat\n gpuUtil?: IngestProcessingMetricStat\n gpuMemDevice?: IngestProcessingMetricStat\n gpuMemStep?: IngestProcessingMetricStat\n ramTotalMb?: number\n diskTotalMb?: number\n}\n\nexport type IngestProcessingStepDetail = {\n input?: Record<string, JsonValue>\n params?: Record<string, JsonValue>\n output?: Record<string, JsonValue>\n metrics?: IngestProcessingStepMetrics\n error?: string\n}\n\nexport type IngestProcessingStep = {\n name: string\n tool?: string\n status: IngestProcessingStepStatus | string\n startedAt?: string\n endedAt?: string\n durationSec?: number\n durationPct?: number\n detail?: IngestProcessingStepDetail\n}\n\nexport type IngestProcessingDiskUsage = {\n sourceMb?: number\n framesMb?: number\n resultMb?: number\n totalMb?: number\n}\n\nexport type IngestProcessingPeakUsage = {\n cpu?: number\n ram?: number\n gpuUtil?: number\n gpuMemDevice?: number\n gpuMemStep?: number\n}\n\nexport type IngestProcessingFootprint = {\n disk?: IngestProcessingDiskUsage\n peak?: IngestProcessingPeakUsage\n}\n\nexport type IngestProcessingProgress = {\n available: boolean\n status?: IngestProcessingRunStatus | string\n processingStatus?: IngestProcessingStatus | string\n currentStep?: string | null\n error?: string | null\n startedAt?: string\n steps: IngestProcessingStep[]\n footprint?: IngestProcessingFootprint\n}\n\nexport type IngestTrackedAsset = {\n id: number\n projectId: string\n name?: string\n processingStatus?: IngestProcessingStatus | string\n}\n\nexport type DroneUploadItem = {\n id: number\n projectId: string\n consumed: boolean\n token: string\n flightDate: string\n flightGeolocation: string\n modelZip: string\n orthomosaicZip: string\n reportPdf: string\n processingLog: string\n uploadedBy: string\n processingStatus: IngestProcessingStatus | string\n modelCesiumAssetId: string\n updatedAt: string\n hasTusLinks: boolean\n hasSteps: boolean\n aerialShots: AerialShotItem[]\n}\n\nexport type DroneUploadsResponse = IngestPaginatedResponse<DroneUploadItem>\n\nexport type DroneQueueResponse = {\n size: number\n assetsDrone: DroneUploadItem[]\n}\n\nexport type DroneUploadUpdateRequestPayload = {\n flightMetadata: {\n dateTime: string\n gpsAltitude: string\n gpsCoordinates: string\n }\n upload: {\n url: string\n title: string\n fileExtension: string\n }[]\n aerialShots: {\n url: string\n title: string\n fileExtension: string\n gpsLatitude: string\n gpsLongitude: string\n gpsAltitude: string\n }[]\n projectName: string\n}\n\nexport type CalculateMeasuringOperationRequestPayload = {\n date: DateType\n points: TuplePoint2D[]\n operation: string\n}\n\nexport type FlightImagesQueryParams = Partial<\n Omit<PaginationParams, \"sort\">\n> & {\n date: DateType\n}\n\nexport type AerialShotItem = {\n id: number\n droneUploadId: number\n fileLink: string\n thumbnailLink: string\n gpsLatitude: string\n gpsLongitude: string\n gpsAltitude: string\n}\n\nexport type InspectionToolRequestPayload = {\n date: DateType\n gpsAltitude: string\n gpsCoordinates: string\n}\n\nexport type _360AssetsResponse = IngestPaginatedResponse<_360WalkV2>\n\nexport type _360AssetsCountsDay = {\n day: number\n walks?: number\n mobilePhotos?: number\n [key: string]: JsonValue | undefined\n}\n\nexport type _360AssetsCountsResponse = {\n days: _360AssetsCountsDay[]\n}\n\nexport type _360QueueResponse = {\n size: number\n assets360: _360WalkV2[]\n}\n\nexport type _360FloorsResponse = IngestPaginatedResponse<_360FloorV2>\n\nexport type BimUploadItem = {\n id: number\n projectId: string\n uploadedBy: string\n files: string[]\n updatedAt: string\n archive?: string | null\n}\n\nexport type BimUploadsResponse = IngestPaginatedResponse<BimUploadItem>\n\nexport type IngestUploadInitResponse = {\n id: number\n projectId: string\n token?: string\n projectName?: string\n}\n\nexport type MobileAssetsQueryParams = Partial<\n Omit<PaginationParams, \"sort\">\n> & {\n projectId?: string\n project_id?: string\n assetType?: MobileAssetsType | string\n date?: DateType\n isPaginated?: boolean\n}\n\nexport type MobileCaptureAssetsResponse =\n | IngestPaginatedResponse<{\n id: string\n projectId?: string\n uploadedBy: string\n updatedAt: string\n assetType: string\n thumbnailUrl: string\n }>\n | Array<{\n id: string\n projectId?: string\n uploadedBy: string\n updatedAt: string\n assetType: string\n thumbnailUrl: string\n }>\n","export enum MapType {\n Hybrid = \"hybrid\",\n Terrain = \"terrain\",\n}\n\nexport type MapView = {\n east?: number\n floorID?: string\n image?: string\n mapStyle?: MapType\n name: string\n north?: number\n projectId: string\n projectName: string\n south?: number\n west?: number\n}\n","export type ConnectorDetail = {\n login: string\n hostname: string\n provider: string\n}\n\nexport enum Connector {\n Aconex = \"aconex\",\n Procore = \"procore\",\n Autodesk = \"autodesk\",\n AutodeskViewer = \"autodesk_viewer\",\n VoyageControl = \"voyage_control\",\n Ring = \"ring\",\n Email = \"email\",\n Hammertech = \"hammertech\",\n\n // Project connectors\n XWeather = \"xweather\",\n}\n\nexport enum ProcoreType {\n Observations = \"observations\",\n Photos = \"photos\",\n}\n\nexport type ConnectorResponsePayload = Array<ConnectorDetail>\n","import { CommentsScope, CommentThreeSixtyContext } from \"./comments\"\n\nexport enum NotificationType {\n CameraShare = \"camera_share\",\n CameraStatusChange = \"camera_status_changed\",\n Mention = \"mention\",\n CommentMention = \"comment_mention\",\n TimelapseCreated = \"timelapse_created\",\n TimelapseFailed = \"timelapse_failed\",\n DroneProcessing = \"drone_processing_done\",\n Processing360 = \"three_sixty_done\",\n SmartSearchExportReady = \"smart_search_export_ready\",\n SmartSearchExportFailed = \"smart_search_export_failed\",\n GateReportExportReady = \"gate_report_export_ready\",\n GateReportExportFailed = \"gate_report_export_failed\",\n PpeExportReady = \"ppe_export_ready\",\n PpeExportFailed = \"ppe_export_failed\",\n WeatherExportReady = \"weather_export_ready\",\n WeatherExportFailed = \"weather_export_failed\",\n CompareReady = \"compare_ready\",\n CompareFailed = \"compare_failed\",\n ClipExportReady = \"clip_export_ready\",\n ClipExportFailed = \"clip_export_failed\",\n NvrClipReady = \"nvr_clip_ready\",\n NvrClipFailed = \"nvr_clip_failed\",\n UploadComplete = \"upload_complete\",\n UploadFailed = \"upload_failed\",\n RingCamerasImported = \"ring_cameras_imported\",\n StorageWarning = \"storage_warning\",\n Other = \"other\",\n}\n\nexport interface NotificationContextBase {\n cameraExid?: string\n projectExid?: string\n}\n\nexport interface CameraShareContext extends NotificationContextBase {\n cameraExid: string\n projectExid: string\n shareId: number\n}\n\nexport interface CameraStatusChangeContext extends NotificationContextBase {\n cameraExid: string\n projectExid: string\n newStatus: string\n}\n\nexport interface MentionContext extends NotificationContextBase {}\n\nexport interface TimelapseCreatedContext extends NotificationContextBase {\n cameraExid: string\n projectExid: string\n archiveExid: string\n}\n\nexport interface TimelapseFailedContext extends NotificationContextBase {\n cameraExid: string\n projectExid: string\n}\n\nexport interface DroneProcessingContext extends NotificationContextBase {\n projectExid: string\n droneDate: string\n}\n\nexport interface Processing360Context extends NotificationContextBase {\n projectExid: string\n date: string\n floor: string\n}\n\nexport interface ExportNotificationContext extends NotificationContextBase {\n projectExid: string\n archiveExid?: string\n compareExid?: string\n}\n\nexport interface UploadNotificationContext extends NotificationContextBase {\n projectExid: string\n}\n\nexport interface RingCamerasImportedContext extends NotificationContextBase {\n projectExid: string\n projectName: string\n cameras: Array<{ exid: string; name: string }>\n}\n\nexport interface StorageWarningContext extends NotificationContextBase {\n projectExid: string\n cameraName: string\n}\n\nexport interface CommentMentionContext extends NotificationContextBase {\n projectExid: string\n commentId: number\n scope: CommentsScope\n commentContext: CommentThreeSixtyContext\n content?: string\n label?: string\n projectName?: string\n}\n\nexport type NotificationContext =\n | CameraShareContext\n | CameraStatusChangeContext\n | MentionContext\n | TimelapseCreatedContext\n | TimelapseFailedContext\n | DroneProcessingContext\n | Processing360Context\n | ExportNotificationContext\n | UploadNotificationContext\n | RingCamerasImportedContext\n | StorageWarningContext\n | CommentMentionContext\n\nexport type Notification = {\n id: number\n type: NotificationType\n insertedAt: string\n initiatorId: number\n initiatorFullname: string\n initiatorEmail: string\n targetId: number\n targetFullname: string\n targetEmail: string\n readTimestamp: string | null\n context: NotificationContext\n}\n","import type { NvrModel } from \"@evercam/api/types\"\n\nexport type Nvr = {\n id?: number\n deviceType: NvrDeviceType\n serial: string\n model: NvrModel\n httpUrl: string\n rtspUrl: string\n macAddress: string\n username: string\n password: string\n nerves: boolean\n}\n\nexport enum NvrDeviceType {\n Rpi4 = \"rpi4\",\n Rpi5 = \"rpi5\",\n OrinNano = \"orin_nano\",\n Giraffe = \"giraffe\",\n}\n\nexport enum NvrHddStatus {\n Error = \"error\",\n Idle = \"idle\",\n NotExist = \"notexist\",\n Ok = \"ok\",\n Unformatted = \"unformatted\",\n}\n\nexport type NvrCreatePayload = {\n serial?: string\n httpUrl: string\n rtspUrl?: string\n deviceType?: NvrDeviceType\n model: NvrModel\n username: string\n password: string\n kitId?: number\n}\n","export type ProcoreUserCompaniesResponsePayload = Array<{\n id: number\n isActive?: boolean\n name: string\n}>\n\nexport type ProcoreCompanyRequestPayload = {\n companyId: number\n}\n\nexport type ProcoreProjectRequestPayload = {\n companyId: number\n projectId: number\n}\n\nexport type ProcoreObservationListItem = {\n id: number\n name: string\n}\n\nexport type ProcoreObservationDefaultList = Array<\n ProcoreObservationListItem & {\n active: boolean\n global: boolean\n createdAt: string\n updatedAt: string\n }\n>\n\nexport type ProcoreObservationAssignee = ProcoreObservationListItem & {\n vendor: ProcoreObservationListItem\n}\n\nexport type ProcoreObservationDistributionMember =\n ProcoreObservationListItem & {\n login: string\n }\n\nexport type ProcoreObservationTrades = ProcoreObservationListItem & {\n active: boolean\n updatedAt: string\n}\n\nexport type ProcoreObservationLocation = ProcoreObservationListItem & {\n nodeName: string\n parentId: number\n createdAt: string\n updatedAt: string\n code: string\n}\n\nexport type ProcoreObservationSpecificationSection = {\n id: number\n number: string\n description: string\n label: string\n currentRevisionId: number\n}\n\nexport type ProcoreUserProject = {\n accountingProjectNumber?: number\n active: boolean\n address: string\n city: string\n company: {\n id: number\n name: string\n }\n completionDate: string\n countryCode: string\n county: string\n createdAt: string\n customFields?: object\n designatedMarketArea: string\n displayName: string\n estimatedValue: string\n id: number\n isDemo: boolean\n latitude: number\n longitude: number\n name: string\n originCode: string | number | null\n originData: string | null\n originId: number | null\n ownersProjectId: number | null\n parentJobId: number | null\n phone: string | number\n photoId: number\n projectBidTypeId: number | null\n projectNumber: string\n projectOwnerTypeId: number | null\n projectRegionId: number | null\n stage: string\n startDate: string\n stateCode: string\n storeNumber?: string\n timeZone: string\n totalValue: string\n updatedAt: string\n zip: number\n}\n\nexport type ProcoreUserProjectsResponsePayload = Array<ProcoreUserProject>\n\nexport type ProcoreToolUserAccessLevel = {\n id: ProcoreToolUserAccessLevelIds\n name: string\n}\n\nexport type ProcoreToolPermittedAction = {\n id: number\n actionName: string\n label: string\n toolName: string\n}\n\nexport type ProcoreToolPermissions = {\n id: number\n name: string\n friendlyName: string\n domainId: number\n tabGroup: string\n availableForUser: boolean\n url: string\n userAccessLevel: ProcoreToolUserAccessLevel\n permittedActions: Array<ProcoreToolPermittedAction>\n createUrl: string\n canCreate: boolean\n trial: boolean\n}\n\nexport type ProcoreUserProjectPermissionsResponsePayload = {\n tools: Array<ProcoreToolPermissions>\n}\n\nexport type ProcoreEditedImageUploadRequestPayload = {\n projectExid: string\n companyId: number\n projectId: number\n snapshot: string\n categoryId?: number\n}\n\nexport type ProcoreProjectAlbum = {\n count: number\n coverPhoto: string | null\n createdAt: string\n id: number\n links: {\n delete: string\n show: string\n update: string\n }\n name: string\n position: number\n private: boolean\n updatedAt: string\n}\n\nexport type ProcoreProjectsAlbumsPayload = Array<ProcoreProjectAlbum>\n\nexport type ProcoreObservationType = {\n id: number\n name: string\n localizedName: string\n category: string\n categoryKey: string\n companyActive: boolean\n active: boolean\n kind: string\n parentInactive: boolean\n isUse: boolean\n nameTranslations: string\n}\n\nexport type ProcoreObservationTypesResponsePayload =\n Array<ProcoreObservationType>\n\nexport type ProcoreObservationFormRequestPayload = {\n projectId: number\n companyId: number\n observationType: string\n}\n\nexport type ProcoreCustomFieldOptionsRequestPayload = {\n optionsUrl: string\n companyId: number\n}\n\nexport type ProcoreObservationForm = Record<\n string,\n ProcoreObservationField | ProcoreObservationCustomField\n>\n\nexport type ProcoreObservationField = {\n name: string\n required: boolean\n visible: boolean\n}\n\nexport type ProcoreObservationCustomField = {\n id: number\n required: boolean\n visible: boolean\n name: string\n label: string\n description: string\n customFieldDefinitionId: number\n dataType: ProcoreObservationCustomFieldDataType\n variant: string\n position: number\n row: number\n column: number\n columnWidth: number\n optionsUrl: string | null\n defaultValue: string | null\n}\n\nexport type ProcoreNextObservationAvailableNumber = {\n nextAvailableNumber: number\n}\n\nexport enum ProcoreObservationCustomFieldDataType {\n RichText = \"rich_text\",\n Date = \"date\",\n DateTime = \"datetime\",\n LovEntry = \"lov_entry\",\n LovEntries = \"lov_entries\",\n Boolean = \"boolean\",\n Vendor = \"vendor\",\n Decimal = \"decimal\",\n String = \"string\",\n LoginInformation = \"login_information\",\n LoginInformations = \"login_informations\",\n Dropdown = \"dropdown\",\n}\n\nexport enum ProcoreObservationDefaultFieldNames {\n Number = \"number\",\n Name = \"name\",\n Status = \"status\",\n Trade = \"tradeId\",\n Assignee = \"assigneeId\",\n DueDate = \"dueDate\",\n SpecificationSection = \"specificationSectionId\",\n Priority = \"priority\",\n Location = \"locationId\",\n DistributionMembers = \"distributionMemberIds\",\n Personal = \"personal\",\n Hazard = \"hazardId\",\n ContributingBehavior = \"contributingBehaviorId\",\n ContributingCondition = \"contributingConditionId\",\n Description = \"description\",\n}\n\nexport enum ProcoreTools {\n Observations = \"observations\",\n ProgressPhotos = \"images\",\n}\n\nexport enum ProcoreToolUserAccessLevelIds {\n NoAccess = 1,\n ReadOnly = 2,\n Standard = 3,\n Admin = 4,\n}\n","import {\n Automation,\n AutomationType,\n DateType,\n PaginationParams,\n} from \"@evercam/api/types\"\n\nexport type ProgressPhotosCreateUpdateRequestPayload = {\n cameraExids?: string\n notifyDays?: string\n compareDelay?: AutomationType\n notifyTime?: string\n provider?: string\n type?: string\n config?: {\n compareDelay?: AutomationType\n period?: number\n recipients?: string\n projectId?: number\n companyId?: number\n catergoryId?: string\n }\n subject?: string\n isPaused?: boolean\n timezone?: string\n}\n\nexport type ProgressPhotosUnSubscribeParams = {\n email: string\n token?: string\n}\n\nexport type ProgressPhotosResponsePayload = {\n progressPhotos: Automation[]\n}\n\nexport type ProgressPhotoItemResponsePayload = {\n progressPhotos: Automation\n}\n\nexport enum AutomationDialogType {\n Create = \"create\",\n Edit = \"edit\",\n Pause = \"pause\",\n}\n\nexport type CameraOption = {\n exid: string\n name: string\n}\n\nexport interface ProgressPhotoItem {\n id: number\n cameras: CameraOption[] | string[] | string\n insertedAt: string\n provider: string\n config: {\n recipients: string | string[]\n sendSnapshotAs: string\n }\n isPaused: boolean\n notifyDays: string | string[]\n notifyTime: string\n api_id: string\n api_key: string\n timezone: string\n exid: string\n fullname: string\n}\n\nexport type ProgressPhotosQueryParams = PaginationParams & {\n fullname: string\n recipients: string\n notifyTime: string\n timezone: string\n cameras: string\n}\n\nexport type progressPhotosHistoryQueryParams = {\n insertedAt: DateType[]\n recipients: string\n subject: string\n cameraId: string\n failedCameraId: string\n}\n\nexport type ProgressPhotosHistory = {\n id: number\n cameraIds: string\n failedCameraIds: string\n subject: string\n recipients: string\n}\n","import {\n AdminCamera,\n Camera,\n CameraExid,\n DateType,\n EntityByExid,\n Exid,\n Operator,\n PaginationParams,\n} from \"@evercam/api/types\"\n\nexport type ProjectExid = Exid\n\nexport type ProjectsByExid = EntityByExid<Project>\n\nexport type Project = {\n archiveTier?: ProjectArchiveTier\n cameras?: Array<Camera | AdminCamera>\n camerasCount?: number\n camerasRestrictionType?: string\n companyId: number\n endDate: string\n exid: ProjectExid\n featureFlags: Array<ProjectFeatureFlag>\n geographicBounds?: unknown\n id: string | number\n insertedAt?: string\n name: string\n owner?: { email?: string }\n ownerEmail?: string\n ownerName?: string\n startedAt?: string\n status?: ProjectStatus\n timezone?: string\n unrestrictedCameras?: Camera[]\n userId?: number\n zohoId?: string\n}\n\nexport type AdminProjectCameraRef = {\n exid: string\n name: string\n}\n\nexport type AdminProjectListItem = {\n id: number\n name: string\n status: ProjectStatus | string\n insertedAt: string\n timezone: string | null\n exid: ProjectExid\n endDate: string | null\n startDate: string | null\n archiveTier: ProjectArchiveTier | null\n featureFlags: Array<ProjectFeatureFlag | string>\n zohoId: string | null\n ownerEmail: string | null\n companyId: number | null\n companyName: string | null\n ownerName: string | null\n archived: boolean\n cameras?: AdminProjectCameraRef[]\n}\n\nexport type AdminProjectDetail = AdminProjectListItem & {\n userId: number\n}\n\nexport enum ProjectStatus {\n ToStart = \"To Start\",\n InProgress = \"In Progress\",\n Completed = \"Completed\",\n NotAplicable = \"Not Applicable\",\n}\n\nexport enum ProjectArchiveTier {\n Full = \"Full\",\n Partial = \"Partial\",\n Minimal = \"Minimal\",\n ScheduledForDeletion = \"Scheduled for Deletion\",\n No = \"No\",\n}\n\nexport type UpdateCameraRestrictionPayload = {\n isAccessRestricted?: boolean\n}\n\nexport type CameraPosition = {\n cameraExid: CameraExid\n position: number\n}\n\nexport type ReorderCamerasPayload = {\n positions: CameraPosition[]\n}\n\nexport type Logo = {\n id: number\n projectId: number\n name: string\n url: string\n}\n\nexport type ProjectLogoResponsePayload = Logo[]\n\nexport enum ProjectFeatureFlag {\n AnprLegacy = \"anpr_legacy\",\n DroneView = \"drone_view\",\n Bim = \"4d_bim\",\n BimItwin = \"4d_bim_itwin\",\n BimForge = \"4d_bim_forge\",\n ThreeSixtyView = \"360_view\",\n NdaMc = \"NDA/MC\",\n GateReport = \"gate_report\",\n GateReportMotionDetection = \"motion_detection\",\n FullEmpty = \"full_empty\",\n MediaHubSharing = \"archives_sharing\",\n GateReportAnprBased = \"anpr_sourced\",\n NoLicensePlate = \"no_license_plate\",\n SmartSearch = \"smart_search\",\n PpeMonitoring = \"ppe_monitoring\",\n NoGdpr = \"no_gdpr\",\n Chat = \"chat\",\n}\n\nexport type ProjectBatteryReading = {\n exid: number\n voltage: number\n lastSeen: DateType\n}\n\nexport type ThumbnailData = {\n cameraExid: CameraExid\n custom: boolean\n image: string\n}\n\nexport type ProjectsQueryParams = PaginationParams & {\n name: string\n exid: string\n status: ProjectStatus\n cameras: string\n featureFlags: Array<ProjectFeatureFlag>\n featureFlagsOperator?: Operator\n archived: string\n}\n\nexport type ProjectCreateRequestPayload = {\n projectExid?: string\n projectName: string\n ownerId: number\n cameras: string[]\n}\n\nexport type ProjectCreateResponse = {\n name: string\n exid: string\n id: number\n userId: number\n zohoId: string\n}\n\nexport type ProjectUpdateRequestPayload = {\n name: string\n timezone: string\n featureFlags: ProjectFeatureFlag[]\n cameras: string[]\n}\n\nexport type ProjectStatusStats = {\n nil: number\n Completed: number\n \"In Progress\": number\n \"Not Applicable\": number\n \"To Start\": number\n}\n\nexport type ProjectUserProperty = {\n active: boolean\n activeOneMonth: boolean\n cameraExid: string\n cameraName: string\n cameraRights: string\n email: string\n eventsCount: number\n fullname: string\n id: number\n lastSeenAt: string\n persona: string\n}\n\nexport type ProjectUsers = {\n cameras: {\n exid: string\n name: string\n }[]\n users: Record<string, ProjectUserProperty[]>\n}\n\nexport type ProjectRole = {\n id: number\n name: string\n}\n\nexport type ProjectMember = {\n id: string\n key?: string\n email: string\n fullname: string\n lastSeenAt?: string\n role: ProjectRole\n permissions?: string[]\n subRoles?: Array<{\n resourceId: string\n roleId: number\n }>\n company?: { name: string } | null\n}\n\nexport type ProjectInvite = {\n id?: string\n email: string\n role?: ProjectRole\n permissions?: string[]\n subRoles?: Array<{\n resourceId: string\n roleId: number\n }>\n invitedAt?: string\n}\n\nexport type ProjectMembersResponsePayload = {\n users: ProjectMember[]\n invites: ProjectInvite[]\n errors: ProjectUserError[]\n}\n\nexport type ProjectMembersRequestPayload = {\n roleId: number\n emails: string[]\n message?: string\n overrideRole?: Partial<{\n permissions?: string[]\n subRoles?: Array<{\n resourceId: string\n roleId: number\n }>\n }>\n}\n\nexport type ProjectInviteMembersResponsePayload = {\n users: ProjectMember[]\n invites: ProjectInvite[]\n}\n\nexport type PlaceholderThumbnailData = {\n placeholder: string\n}\n\nexport type ProjectUserError = {\n email: string\n error: Record<string, string[]>\n}\n\nexport type ProjectUsersResponsePayload = {\n users: ProjectMember[]\n invites: ProjectInvite[]\n errors: ProjectUserError[]\n}\n\nexport type MentionableUser = {\n id: number\n fullname: string\n email: string\n}\n\nexport type ProjectStorageQueryParams = PaginationParams & {\n cameraName: string\n cameraExid: CameraExid\n status: ProjectStorageStatus\n}\n\nexport type ProjectStorage = {\n id: number\n cameraExid: CameraExid\n cameraName: string\n projectExid: string\n projectName: string\n status: ProjectStorageStatus\n requestor: string\n created_at: DateType\n}\n\nexport enum ProjectStorageStatus {\n New = \"new\",\n Pending = \"pending\",\n Processing = \"processing\",\n Completed = \"completed\",\n Failed = \"failed\",\n}\n","import { ApiCredentials, PaginationParams } from \"@evercam/api/types\"\nimport { CancelToken } from \"axios\"\n\nexport type Snapshot = {\n createdAt: string\n data: string\n status?: string\n}\n\nexport type SnapshotRequestPayload = {\n apiKey?: string\n apiId?: string\n token?: string\n cancelToken?: object\n includeImage?: boolean\n view?: boolean\n}\n\nexport type AvailableDaysRequestPayload = {\n cameraId: string\n year: string\n month: string\n payload?: ApiCredentials\n cancelToken?: CancelToken\n}\nexport type AvailableDaysResponsePayload = {\n days: Array<number>\n}\n\nexport type AvailableHoursRequestPayload = {\n cameraId: string\n year: string\n month: string\n day: string\n payload?: ApiCredentials\n cancelToken?: CancelToken\n}\nexport type AvailableHoursResponsePayload = {\n hours: Array<number>\n}\n\nexport type NearestSnapshotResponsePayload = {\n snapshots: Array<{\n createdAt: string\n data: string\n notes?: string\n }>\n}\n\nexport type SnapshotRangeRequestPayload = PaginationParams & {\n from: string\n to: string\n schedule?: boolean\n count?: number\n}\nexport type SnapshotInstance = {\n createdAt: string\n notes?: string\n data?: string\n}\nexport type SnapshotRangeResponsePayload = {\n snapshots: Array<SnapshotInstance>\n}\n\nexport enum BrainTool {\n Detections = \"detections\",\n}\n\nexport enum CloudRecordingFrequency {\n EverySecond = 60,\n Every2Seconds = 30,\n Every5Seconds = 12,\n Every10Seconds = 6,\n Every15Seconds = 4,\n Every30Seconds = 2,\n Every60Seconds = 1,\n Every5Minutes = 5,\n Every10Minutes = 10,\n}\n\nexport enum CloudRecordingDuration {\n Infinity = -1,\n Day = 1,\n Week = 7,\n Month = 30,\n ThreeMonths = 90,\n}\n\nexport const CloudRecordingDurationLabel: Record<\n CloudRecordingDuration,\n string\n> = {\n [CloudRecordingDuration.Infinity]:\n \"content.cloud_recording_duration.unlimited\",\n [CloudRecordingDuration.Day]: \"content.cloud_recording_duration.day\",\n [CloudRecordingDuration.Week]: \"content.cloud_recording_duration.week\",\n [CloudRecordingDuration.Month]: \"content.cloud_recording_duration.month\",\n [CloudRecordingDuration.ThreeMonths]:\n \"content.cloud_recording_duration.three_months\",\n}\n\nexport enum CloudRecordingStatus {\n On = \"on\",\n Off = \"off\",\n Paused = \"paused\",\n OnScheduled = \"on-scheduled\",\n}\n\nexport enum SnapshotExtractionInterval {\n EverySecond = 1,\n Every5Seconds = 5,\n Every10Seconds = 10,\n Every15Seconds = 15,\n Every20Seconds = 20,\n Every30Second = 30,\n EveryMinute = 60,\n Every5Minutes = 300,\n Every10Minutes = 600,\n Every15Minutes = 900,\n Every20Minutes = 1200,\n Every30Minutes = 1800,\n EveryHour = 3600,\n Every2Hours = 7200,\n Every6Hours = 21600,\n Every12Hours = 43200,\n Every24Hours = 86400,\n}\n\nexport enum VpnServer {\n None = \"None\",\n WireGuard1 = \"WireGuard1\",\n WireGuard2 = \"WireGuard2\",\n WireGuard3 = \"WireGuard3\",\n WireGuard4 = \"WireGuard4\",\n WireGuard5 = \"WireGuard5\",\n WireGuard6 = \"WireGuard6\",\n WireGuard7 = \"WireGuard7\",\n WireGuard8 = \"WireGuard8\",\n WireGuard9 = \"WireGuard9\",\n WireGuard10 = \"WireGuard10\",\n WgHub = \"WgHub\",\n}\n","export enum RoiType {\n Gate = \"gate\",\n AnprContext = \"anpr_context\",\n ExclusionZone = \"exclusion_zone\",\n WorkflowArea = \"workflow_area\",\n SiteAnalytics = \"site_analytics\",\n Ppe = \"ppe_roi\",\n}\n\nexport enum RoiShapeType {\n Polygon = \"polygon\",\n Line = \"line\",\n Direction = \"direction\",\n Rectangle = \"rectangle\",\n}\n\nexport enum RoiDirection {\n Arrived = \"arrived\",\n Left = \"left\",\n Bidirectional = \"arrived,left\",\n}\n","export type RouteParams = {\n projectExid?: string\n cameraExid?: string\n mediaExid?: string\n timestamp?: string\n fromDate?: string\n toDate?: string\n}\n\nexport enum UrlParamValue {\n True = \"true\",\n False = \"false\",\n}\n\nexport enum TimelineUrlParam {\n CameraExid = \"cameraExid\",\n Timestamp = \"timestamp\",\n FromDate = \"fromDate\",\n ToDate = \"toDate\",\n Live = \"live\",\n Video = \"video\",\n OverlayType = \"overlayType\",\n ShowOverlay = \"showOverlay\",\n ShowCompare = \"showCompare\",\n Sidebar = \"sidebar\",\n ThreeSixtyId = \"_360Id\",\n DroneId = \"droneId\",\n MediaId = \"mediaId\",\n}\n\nexport enum Timeline360UrlParams {\n Show360 = \"show360\",\n}\n\nexport enum TimelineDroneUrlParams {\n ShowDrone = \"showDrone\",\n}\n\nexport enum TimelineMediaUrlParams {\n ShowMedia = \"showMedia\",\n}\n\nexport enum TimelineBimUrlParams {\n ShowBim = \"showBim\",\n}\n\nexport enum TimelineExNvrRecordingsUrlParams {\n ShowExNvrRecordings = \"showExNvrRecordings\",\n}\n\nexport enum TimelineAnprUrlParams {\n ShowAnpr = \"showAnpr\",\n}\n\nexport enum TimelineMobileCaptureUrlParams {\n ShowMobileCapture = \"showMobileCapture\",\n}\n\nexport enum TimelineCommentsUrlParams {\n ShowComments = \"showComments\",\n SelectedCommentId = \"selectedCommentId\",\n}\n\nexport type TimelineUrlParams = Record<\n | TimelineUrlParam\n | TimelineMediaUrlParams\n | TimelineBimUrlParams\n | TimelineExNvrRecordingsUrlParams\n | TimelineAnprUrlParams\n | TimelineMobileCaptureUrlParams\n | TimelineCommentsUrlParams,\n string | null\n>\n","import { Camera, PaginationParams, Project, Sim } from \"@evercam/api/types\"\nexport type RouterBillPayer = { name: string }\n\nexport type SimProvider = { name: string }\n\nexport type Router = {\n id?: number\n kitId: number | null\n routerType: string\n routerUserId: string\n routerPassword: string\n serialNumber: number | null\n rmsUrl?: string\n externalHost?: string\n routerHttpPort: number | null\n vpnPassword: string\n vpnUserId: string\n vpnServer: string\n netbirdUrl: string\n status: RouterStatus\n powerType: PowerType\n powerSchedule: string\n battery?: {\n lastVoltage: number\n lastSeen: string\n }\n sims: Array<Pick<Sim, \"id\" | \"number\">>\n billPayers?: Array<RouterBillPayer>\n simProviders?: Array<SimProvider>\n projects?: Pick<Project, \"exid\" | \"id\" | \"name\">[]\n cameras?: Pick<Camera, \"id\" | \"name\">[]\n}\n\nexport enum PowerType {\n Mains = \"mains\",\n Battery = \"battery\",\n Solar = \"solar\",\n Generator = \"generator\",\n Other = \"other\",\n}\n\nexport enum PowerSchedule {\n Schedule = \"schedule\",\n FullTime = \"24/7\",\n}\n\nexport enum RouterStatus {\n Active = \"active\",\n Inactive = \"inactive\",\n}\n\nexport enum RouterScanInputMode {\n Qr = \"qr\",\n Manual = \"manual\",\n}\n\nexport type RouterQueryParams = PaginationParams & {\n routerType: string\n vpnServer: string\n serialNumber: string\n}\n\nexport type RouterCreatePayload = {\n serialNumber: number\n vpnUserId?: string\n vpnPassword?: string\n routerType: string\n routerUserId?: string\n routerPassword?: string\n routerHttpPort: number\n powerType: PowerType\n powerSchedule: PowerSchedule\n vpnServer?: string\n netbirdUrl?: string\n}\n\nexport type RouterQRScanResult = {\n raw: string\n timestamp: string\n sn?: string\n m?: string\n u?: string\n pw?: string\n t?: string\n s?: string\n p?: string\n i?: string\n b?: string\n boxId?: string\n isDuplicate?: boolean\n}\n","import type { DateType } from \"@evercam/api/types\"\n\nexport type ShareRequest = {\n cameraId: string\n createdAt: DateType | number\n email: string\n id: number\n rights: string\n sharerEmail: string\n sharerName: string\n userId: number\n}\n\nexport type Share = {\n cameraId: string\n createdAt: DateType | number\n email: string\n fullname: string\n id: number\n lastSeenAt: DateType\n rights: string\n sessionCount: number\n sharerEmail: string\n sharerId: number\n sharerName: string\n userId: number\n isUserAccessRestricted: boolean\n}\n\nexport type ShareDeletionRequestPayload = {\n email?: string\n key?: string\n origin?: string\n}\n\nexport type SharedUsersResponsePayload = Array<{\n email: string\n name: string\n}>\n\nexport type ShareCreateResponsePayload = {\n shares: Share[]\n shareRequests: ShareRequest[]\n}\n\nexport enum InviteStatus {\n Pending = 0,\n Cancelled = -1,\n Used = 1,\n Failed = -2,\n}\n","import { PaginationParams } from \"@evercam/api/types\"\nexport enum SmsCommands {\n Cellular = \"cellular\",\n Gpson = \"gpson\",\n GPS = \"gps\",\n IPUnblock = \"ipunblock\",\n IOStatus = \"iostatus\",\n IOSet = \"ioset\",\n MonitoringStatus = \"monitoring_status\",\n MobileOn = \"mobileon\",\n MobileOff = \"mobileoff\",\n Reboot = \"reboot\",\n Restore = \"restore\",\n RmsOn = \"rms_on\",\n RmsConnect = \"rms_connect\",\n RmsStatus = \"rms_status\",\n SwitchSIM = \"switch_sim\",\n Status = \"status\",\n SshOn = \"sshon\",\n SshOff = \"sshoff\",\n Uci = \"uci\",\n VpnOn = \"vpnon\",\n VpnOff = \"vpnoff\",\n VpnStatus = \"vpnstatus\",\n WifiOn = \"wifion\",\n WifiOff = \"wifioff\",\n Wakeup = \"wakeup\",\n WebOn = \"webon\",\n WebOff = \"weboff\",\n}\n\nexport enum SmsStatuses {\n Delivered = \"Delivered\",\n Accepted = \"accepted\",\n Pending = \"Pending\",\n}\n\nexport type SimCreateUpdatePayload = {\n number: string\n simProvider: string\n billPayer?: string\n pin1?: string\n pin2?: string\n puk?: string\n iccid?: string\n description?: string\n cameraId: string[]\n}\n\nexport type SimsQueryParams = PaginationParams & {\n simProvider: string\n number: string\n billPayer: string\n iccid: string\n cameraName: string\n description: string\n}\n\nexport type Sim = {\n id: number\n number: string\n simProvider: string\n billPayer: string\n lastSms: string\n pin1: string\n pin2: string\n puk: string\n iccid: string\n description: string\n lastSmsAt: string\n cameras: {\n name: string\n exid: string\n id: number\n }[]\n}\n\nexport type SendSmsPayload = {\n number: string\n smsMessage: string\n}\n\nexport type SendSmsResponse = {\n status: number\n errorText: string\n}\n\nexport type SmsHistory = {\n insertedAt: string\n type: string\n status: string\n text: string\n deliveryDatetime: string\n}\n\nexport type SmsHistoryResponse = {\n singleSimSms: SmsHistory[]\n}\n\nexport type Sms = {\n id: number\n from: string\n fromName: string\n to: string\n toName: string\n messageId: string\n status: string\n text: string\n type: string\n insertedAt: string\n deliveryDatetime: string\n}\n\nexport type SmsQueryParams = PaginationParams & {\n dateRange: string\n fromName: string\n toName: string\n fromNumber: string\n toNumber: string\n smsText: string\n smsType: string\n smsStatus: SmsStatuses\n deliveryDatetime: string\n}\n","export enum PerformanceStatus {\n Pending = \"pending\",\n Done = \"done\",\n}\nexport enum WebGLExtensions {\n OESTextureFloat = \"OES_texture_float\",\n EXTFloatBlend = \"EXT_float_blend\",\n EXTTextureFilterAnisotropic = \"EXT_texture_filter_anisotropic\",\n OESElementIndexUint = \"OES_element_index_uint\",\n WEBGLDebugRendererInfo = \"WEBGL_debug_renderer_info\",\n}\n","import { GeoPoint, TuplePoint2D } from \"./shared\"\nimport { MapType } from \"./map\"\n\nexport type PlannerListItem = {\n id: string\n projectId: string\n projectName: string\n projectLocation: string\n createdDate: string\n updatedDate: string\n owner?: string\n lastUpdatedBy?: string\n camerasCount?: number\n hasPlan?: boolean\n thumbnailUrl?: string\n projectMapType?: MapType\n sessionId?: string\n}\n\nexport type PolygonPath = TuplePoint2D[]\n\nexport type PolygonCoordinates = PolygonPath[]\n\nexport interface GeoJSONPolygon {\n type: \"Polygon\"\n coordinates: PolygonCoordinates\n}\n\nexport enum PlannerUrlParams {\n SitePlanId = \"site_plan_id\",\n IsNewSitePlan = \"is_new_site_plan\",\n IsBoundsMode = \"is_bounds_mode\",\n ProjectPosition = \"project_position\",\n DealId = \"deal_id\",\n}\n\nexport enum EDistortImageModes {\n Edit = \"edit\",\n FreeRotate = \"freeRotate\",\n Lock = \"lock\",\n Rotate = \"rotate\",\n Scale = \"scale\",\n Pan = \"drag\",\n}\n\nexport enum EMapTypes {\n Blank = \"Blank\",\n Satellite = \"Satellite\",\n Street = \"Street\",\n GoogleSatellite = \"hybrid\",\n GoogleStreet = \"roadmap\",\n GoogleTerrain = \"terrain\",\n}\n\nexport enum EMarkers {\n CameraMarker = \"cameraMarker\",\n ThreeSixtyMarker = \"threeSixtyMarkers\",\n}\n\nexport enum EPageType {\n List = \"list\",\n Item = \"item\",\n}\n\nexport enum ERoles {\n Admin = \"admin\",\n User = \"user\",\n}\n\nexport type PlannerOverlay = {\n imageUrl?: string\n corners?: {\n topLeft: GeoPoint\n topRight: GeoPoint\n bottomLeft: GeoPoint\n bottomRight: GeoPoint\n } | null\n}\n\nexport type PlannerCameraMarker = {\n name?: string\n location?: GeoPoint\n heading?: number\n fovAngle?: number\n fovRadius?: number\n isVisible?: boolean\n color?: string\n}\n\nexport type SitePlanBounds = {\n northEast: GeoPoint\n southWest: GeoPoint\n}\n\nexport type SitePlan = {\n id?: string\n projectId?: string\n owner?: string\n lastUpdatedBy?: string\n projectName?: string\n projectLocation?: string\n projectMapType?: EMapTypes\n projectBounds?: SitePlanBounds\n overlay?: PlannerOverlay\n markers?: PlannerCameraMarker[]\n thumbnailUrl?: string\n createdDate?: string\n updatedDate?: string\n}\n\nexport interface IDrawControl {\n _toolbars: {\n draw: {\n _activeMode: { handler: { disable(): void; completeShape(): void } }\n _modes: { polygon: { handler: { enable(): void } } }\n }\n edit: {\n _modes: {\n edit: { handler: { enable(): void; disable(): void; save(): void } }\n }\n }\n }\n}\n","import type { DateType } from \"@evercam/api/types\"\n\nexport type StorageProvider = {\n id?: number\n cameraId: number\n type: string\n provider: string\n url: string\n startDate: DateType\n endDate: DateType\n config: Record<string, any>\n insertedAt?: DateType\n}\n\nexport type StorageProvidersResponsePayload = {\n providers: StorageProvider[]\n}\n\nexport enum ProjectStorageProvider {\n Seaweedfs = \"seaweedfs\",\n S3 = \"s3\",\n}\n","import { KitMetricData } from \"@evercam/api/types\"\nexport type ExNvrLoginResponse = { accessToken: string }\n\nexport type ExNvrRecordingInterval = {\n active: boolean\n startDate: string\n endDate: string\n}\n\nexport type ExNvrDeviceConfig = {\n id: string\n name: string\n type: string\n state: ExNvrDeviceState\n credentials: {\n password: string\n username: string\n }\n mac: string\n url: string\n insertedAt: string\n updatedAt: string\n settings: {\n storageAddress: string\n overrideOnFullDisk: boolean\n overrideOnFullDiskThreshold: number\n generateBif: boolean\n }\n vendor: string\n model: string\n streamConfig: {\n filename: string | null\n duration: string | null\n temporaryPath: string | null\n snapshotUri: string\n streamUri: string\n subStreamUri: string\n }\n timezone: string\n}\n\nexport enum ExNvrFootageAvailableStatus {\n Available = \"Available\",\n NotAvailable = \"Not Available\",\n}\n\nexport enum ExNvrDeviceState {\n Recording = \"recording\",\n Failed = \"failed\",\n Stopped = \"stopped\",\n}\n\nexport type ExNvrCpuStatus = {\n load: number[]\n numCores: number\n}\n\nexport type ExNvrMemoryStatus = {\n systemTotalMemory: number\n freeMemory: number\n totalMemory: number\n bufferedMemory: number\n cachedMemory: number\n totalSwap: number\n freeSwap: number\n availableMemory: number\n}\n\nexport type ExNvrSolarChargerStatus = {\n v: number\n vpv: number\n ppv: number\n i: number\n il: number\n load: string\n relayState: string\n offReason: number\n h19: number\n h20: number\n h21: number\n h22: number\n h23: number\n err: number\n cs: string\n fw: string\n pid: string\n serialNumber: string\n}\n\nexport type ExNvrSystemStatus = {\n version: string\n cpu: ExNvrCpuStatus\n memory: ExNvrMemoryStatus\n solarCharger: ExNvrSolarChargerStatus\n}\n\nexport enum ExNvrMetricId {\n CpuLoad = \"cpu_load\",\n RamUsage = \"ram_usage\",\n}\n\nexport type ExNvrMetric = KitMetricData & {\n metricId: ExNvrMetricId\n value: number\n}\n","import { Point2D, Schedule } from \"@evercam/api/types\"\n\nexport enum TimelapseStatus {\n Pending = 11,\n Completed = 5,\n Failed = 7,\n}\n\nexport enum TimelapseDuration {\n ThirtySeconds = 30,\n SixtySeconds = 60,\n NintySeconds = 90,\n TwoMinutes = 120,\n}\n\nexport type TimelapseVideoOptions = {\n width?: number\n height?: number\n removeTimestamp: boolean\n smoothTransition: boolean\n evercamWatermark: boolean\n sectionBlur?: boolean\n timestampPosition?: TimestampPositionCoordinates\n blurRegions?: BlurRegionCoordinates[]\n}\n\nexport type TimestampPositionCoordinates = {\n x: number\n y: number\n w: number\n h: number\n}\n\nexport type BlurRegionCoordinates = Point2D[]\n\nexport type TimelapseLogoOptions = {\n id?: number\n x: number\n y: number\n width: number\n height: number\n}\n\nexport enum TimelapseScheduleType {\n Continuous = \"continuous\",\n WorkingHours = \"workingHours\",\n Custom = \"custom\",\n}\n\nexport enum TimelapsePeriod {\n Day = 1,\n Week = 7,\n Month = 30,\n WholeProject = \"whole_project\",\n Custom = \"custom\",\n}\n\nexport enum TimelapseType {\n Hour = \"hour\",\n Day = \"day\",\n Week = \"week\",\n Month = \"month\",\n Year = \"year\",\n FullProject = \"full_project\",\n}\n\nexport type TimelapseCreationRequestPayload = {\n title: string\n duration: number\n fromDatetime: string\n toDatetime: string\n cameraExid: string\n schedule: Schedule\n videoOptions: TimelapseVideoOptions\n logo?: TimelapseLogoOptions\n}\n\nexport type TimelapseCreationResponsePayload = {\n Timelapse: {\n camera: string\n createdAt: string\n fromDate: string\n id: number\n duration: number\n requestor: string\n schedule: Schedule\n status: number\n toDate: string\n updatedAt: string\n }\n}\n\nexport type TimelapseSnapshotRequestPayload = {\n from: string\n to: string\n schedule: string\n count: number\n}\n\nexport type TimelapseSnapshotResponsePayload = {\n snapshots: string[]\n}\n\nexport enum TimelapseExportStep {\n Format = 1,\n Effects = 2,\n Confirm = 3,\n Finish = 4,\n}\n","import type { CameraExid, PaginationParams } from \"@evercam/api/types\"\nimport { Role, RoleSubRole } from \"@evercam/api/types/authz\"\n\nexport type User = {\n id?: number\n fullname?: string\n firstname: string\n lastname: string\n email: string\n telephone: string\n country: string\n isAdmin: boolean\n persona: Persona\n companyId?: string | number\n companyName?: string\n companyExid?: string\n features?: Array<UserFeatureFlag>\n confirmedAt?: string\n createdAt?: string\n lastLoginAt?: string\n token?: string\n updatedAt?: string\n evercamAccount?: boolean\n}\n\nexport type AdminUser = {\n id: number\n fullname: string\n firstname: string\n email: string\n telephone: string\n country: string\n isAdmin: boolean\n companyId: string\n companyName: string\n companyExid: string\n features: Array<UserFeatureFlag>\n active: boolean\n cameraShares: number\n camerasCount: number\n camerasOwned: number\n countryId: number\n countryName: string\n createdAt: string\n integrations: string[]\n lastSeenAt: string\n lastLoginAt: string\n lastname: string\n persona: string\n projects: string[]\n projectsCount: number\n referralUrl?: string\n snapmailCount: number\n zohoId: string\n}\n\nexport enum UserFeatureFlag {\n CompanyAdmin = \"company-admin\",\n VideoWalls = \"video-walls\",\n MassCameraSharing = \"mass-camera-sharing\",\n ProjectSharing = \"project-sharing\",\n}\n\nexport type ProjectUser = User & {\n lastSeenAt: string\n active: boolean\n activeOneMonth: boolean\n eventsCount: string\n cameraExid: string\n cameraRights: string\n}\n\nexport enum ContactRole {\n SalesExecutive = \"Sales Executive\",\n CustomerSuccessManager = \"Customer Success Manager\",\n}\n\nexport enum Persona {\n HQ = \"HQ\",\n PM = \"PM\",\n QS = \"QS\",\n Marketing = \"Marketing\",\n HS = \"H&S\",\n DI = \"DI\",\n Other = \"Other\",\n}\n\nexport type UpdatePasswordRequestPayload = {\n token: string\n password: string\n}\n\nexport type Credentials = {\n apiKey: string\n apiId: string\n}\n\nexport type LoginRequestPayload = {\n username: string\n password: string\n redirectToZoho?: boolean\n}\n\nexport type RemotePasswordUpdateRequestPayload = {\n currentPassword: string\n newPassword: string\n}\n\nexport type AuthPasswordOption = {\n type: \"password\"\n}\n\nexport type AuthSsoOption = {\n type: \"sso\"\n name: string\n scope: string\n prompt: string | null\n exid: string\n clientId: string\n iconUrl: string\n loginUrl: string\n responseType: string\n}\n\nexport type AuthOption = AuthPasswordOption | AuthSsoOption\n\nexport type AuthOptionsResponsePayload = {\n options: AuthOption[]\n}\n\nexport type AuthProviderConfigPayload = {\n name: string\n scope: string\n prompt: string | null\n exid: string\n clientId: string\n iconUrl: string\n loginUrl: string\n responseType: string\n}\n\nexport type LogoutParams = {\n token: string\n fromAdmin?: boolean\n}\n\nexport type ConfirmUserRequestPayload = {\n c: string\n}\n\nexport type DeleteActiveSessionRequestPayload = {\n authorization: string\n}\n\nexport type UserSession = {\n browser: string\n createdAt: string\n id: number\n ipAddress: string\n isCurrent: boolean\n lastUsedAt: string\n os: string\n}\n\nexport type SessionsListRequestPayload = {\n authorization: string\n browser?: string\n os?: string\n ipAddress?: string\n sort: string\n limit: number\n page: number\n}\n\nexport type AuthorizedApp = {\n id: number\n clientId: string\n clientName: string\n clientDescription: string | null\n logoUrl: string | null\n scopes: string[]\n grantedAt: string\n}\n\nexport type AuthorizedAppsListRequestPayload = {\n search?: string\n sort?: string\n limit?: number\n page?: number\n}\n\nexport type SessionActivityCamSettingsDetail = {\n new: any\n old: any\n}\n\nexport type SessionActivityDetail = {\n agent: string\n camSettings: SessionActivityCamSettingsDetail\n country: string\n countryCode: string\n ip: string\n}\n\nexport type SessionActivity = {\n cameraExid: string\n details: SessionActivityDetail\n insertedAt: string\n type: string\n who: string\n}\n\nexport type SessionActivitiesListRequestPayload = {\n limit: number\n from: string\n to: string\n}\n\nexport type SignupUserRequestPayload = {\n telephone: string\n firstname: string\n lastname: string\n email: string\n password: string\n shareRequestKey: string\n referralUrl: string\n persona: string\n disablePassword: boolean\n}\n\nexport type UserUpdateRequestPayload = {\n firstname: string\n lastname: string\n email: string\n telephone: string\n country: string\n persona: string\n}\n\nexport type GoogleAuthRequestPayload = { code: string; redirectUri: string }\n\nexport type ProjectContact = {\n name: string\n role: ContactRole | string\n email?: string\n phone?: string\n photo?: string\n}\n\nexport type ProjectContactsResponsePayload = {\n data: ProjectContact[]\n}\n\nexport type UserStatsResponse = { data: { userStats: AdminUser } }\n\nexport type UserCamera = {\n id: number\n exid: string\n ownerFullname: string\n ownerEmail: string\n apiId: string\n apiKey: string\n}\n\nexport type UserCameraResponse = { data: UserCamera[] }\n\nexport type UserProject = {\n id: number\n exid: string\n name: string\n startedAt: string\n}\n\nexport type UserProjectResponse = { data: UserProject[] }\n\nexport type AdminUserUpdateRequestPayload = {\n companyId: string\n email: string\n persona: Persona\n country: string\n features: UserFeatureFlag[]\n}\n\nexport type AdminQueryParams = PaginationParams & {\n email: string\n fullname: string\n}\n\nexport type Admin = {\n id: number\n fullname: string\n email: string\n createdAt: string\n updatedAt: string\n lastSignInAt: string\n signInCount: number\n lastSignInIp: string\n apiId: string\n apiKey: string\n}\n\nexport type ImpersonateUserResponse = {\n id: string\n firstname: string\n lastname: string\n telephone: string\n email: string\n isAdmin: boolean\n persona: Persona\n country: string\n companyId: number\n companyExid: string\n companyName: string\n evercamAccount: boolean\n createdAt: string\n updatedAt: string\n confirmedAt: string\n lastLoginAt: string\n features: UserFeatureFlag[]\n token: string\n}\n\nexport type AdminUserQueryParams = PaginationParams & {\n fullname: string\n email: string\n telephone: string\n persona: Persona\n companyName: string\n camerasCount: string\n projectsCount: string\n snapmailCount: string\n camerasOwned: string\n cameraShares: string\n createdAtDate: string\n lastLoginAtDate: string\n integrations: \"procore\" | \"aconex\" | \"autodesk\"\n features: UserFeatureFlag.ProjectSharing | UserFeatureFlag.VideoWalls\n}\n\nexport type SuppressionsQueryParams = PaginationParams & {\n id: number\n email: string\n source: string\n}\n\nexport type Suppression = {\n id: number\n email: string\n source: string\n insertedAt: string\n updatedAt: string\n}\n\ntype Email = string\n\nexport type WsAccessRestrictionUpdate = {\n camera_id: CameraExid\n is_access_restricted: boolean\n}\n\nexport type WsUserRestrictionItem = {\n user_id: number\n camera_id: CameraExid\n is_user_access_restricted: boolean\n}\n\nexport type WsUserRestrictionUpdate = WsUserRestrictionItem[]\n\n/**\n * Backend WebSocket event payload:\n * {\n * user: {\n * \"someone@domain.com\": {camera_id, is_access_restricted} OR [{...}, {...}]\n * }\n * }\n */\nexport type WsRestrictionChangedPayload = {\n user: Record<Email, WsAccessRestrictionUpdate | WsUserRestrictionUpdate>\n}\n\nexport type ProjectUserWithRole = {\n id: number\n email: string\n fullname: string\n company: { id: number; name: string; exid: string }\n persona: Persona\n permissions: string[]\n role: Role\n subRoles: RoleSubRole[]\n}\n","import { Camera, Media, PaginationParams } from \"@evercam/api/types\"\n\nexport enum VideoWallItemType {\n LiveView = \"live\",\n Video = \"video\",\n Image = \"image\",\n}\n\nexport type VideoWallItem<T extends Camera | Media = Camera> = {\n value: T\n type: VideoWallItemType\n}\n\nexport type VideoWallPresetGridConfig = {\n items: VideoWallPresetItem[]\n meta?: VideoWallPresetMeta\n}\n\nexport type VideoWallPresetItem = {\n i: string | number\n x: number\n y: number\n w: number\n h: number\n camera: Camera\n weather?: Record<string, unknown>\n media?: Media\n moved?: boolean\n}\n\nexport type VideoWallPresetMeta = {\n colNum: number\n rowCount: number\n tile: number\n template: string\n gridSize: number\n}\n\nexport type VideoWallSource = \"default\" | \"widget\"\n\nexport interface VideoWall {\n id: number\n exid: string\n name: string\n source: VideoWallSource\n config: Record<string, any>\n insertedAt: string\n updatedAt: string\n user: { id: number; firstname: string; lastname: string; email: string }\n}\n\nexport interface VideoWallListParams extends PaginationParams {\n projectExid?: string\n id?: number\n exid?: string\n projectId?: number\n userId?: number\n name?: string\n project?: string\n user?: string\n source?: VideoWallSource\n}\n\nexport type VideoWallCreateUpdatePayload = {\n projectExid?: string\n name: string\n source?: VideoWallSource\n config: Record<string, unknown>\n scope?: string\n}\n","export enum HammertechRegion {\n US = \"us\",\n AU = \"au\",\n EU = \"eu\",\n}\n\nexport type HammertechConnectPayload = {\n email: string\n password: string\n tenant: string\n region: HammertechRegion\n}\n\nexport type HammertechProject = {\n projectId: string\n name: string\n}\n\nexport type HammertechLocation = {\n id: string\n name: string\n parentId: string | null\n}\n\nexport type HammertechCustomFieldDataType =\n | \"FreeText\"\n | \"TextArea\"\n | \"Number\"\n | \"Date\"\n | \"Time\"\n | \"DateTime\"\n | \"ExpiryDate\"\n | \"Checkbox\"\n | \"YesNoRadio\"\n | \"YesNoNaRadio\"\n | \"Dropdown\"\n | \"Radio\"\n | \"MultiSelectDropdown\"\n | \"ImageUpload\"\n | \"FileUpload\"\n | \"Signature\"\n | \"SignatureWithName\"\n | \"Heading\"\n | \"BigLabel\"\n | \"ExpandingLabel\"\n | \"Separator\"\n | \"NoMargin\"\n | \"Image\"\n | \"FileDownload\"\n | \"ChildForm\"\n | \"SectionStart\"\n | \"SectionEnd\"\n | \"SystemField\"\n | string\n\nexport type HammertechCustomField = {\n id: string\n internalName: string\n name?: string\n customFieldType: HammertechCustomFieldDataType\n isRequired?: boolean\n answerOptions?: string[]\n}\n\nexport type HammertechCustomFieldForm = {\n id: string\n customFields: HammertechCustomField[]\n}\n\nexport enum HammertechPriority {\n Low = \"Low\",\n Medium = \"Medium\",\n High = \"High\",\n Critical = \"Critical\",\n}\n\nexport enum HammertechClassification {\n Undefined = \"Undefined\",\n Positive = \"Positive\",\n Negative = \"Negative\",\n Neutral = \"Neutral\",\n}\n\nexport type HammertechIssueType = {\n id: string\n name: string\n forcePriority?: boolean\n suggestedPriority?: HammertechPriority | null\n canBeNegative?: boolean\n canBeNeutral?: boolean\n canBePositive?: boolean\n openIssueCustomFieldForm?: HammertechCustomFieldForm | null\n}\n\nexport type HammertechCustomFieldValue = {\n customFieldId: string\n value?: unknown\n storedFileId?: string\n}\n\nexport const HAMMERTECH_FILE_FIELD_TYPES = [\n \"imageupload\",\n \"fileupload\",\n \"signature\",\n \"signaturewithname\",\n]\n\nexport function isHammertechFileFieldType(type?: string): boolean {\n return HAMMERTECH_FILE_FIELD_TYPES.includes(String(type || \"\").toLowerCase())\n}\n\nexport function isHammertechSignatureWithName(type?: string): boolean {\n return String(type || \"\").toLowerCase() === \"signaturewithname\"\n}\n\nexport type HammertechStoredFilePayload = {\n fileName?: string\n base64FileContent: string\n annotation?: string\n id?: string\n}\n\nexport type HammertechStoredFileResponse = {\n isSuccess: boolean\n httpStatusCode: number\n messageText: string\n createdEntityId: string\n xRequestId: string\n}\n\nexport type HammertechFileFieldValue = {\n file: File | null\n name: string\n}\n\nexport type HammertechCreateIssuePayload = {\n projectId: string\n issueTypeId: string\n snapshot: string\n issueDate?: string\n description?: string\n priority?: HammertechPriority\n dueDate?: string\n classification?: HammertechClassification\n locationId?: string\n isPositiveObservation?: boolean\n isPhotoForFixRequired?: boolean\n openIssueCustomFieldFormId?: string\n openIssueCustomFieldValues?: HammertechCustomFieldValue[]\n}\n\nexport type HammertechIssueResponse = {\n id: string\n}\n","import { DateType } from \"@evercam/api/types/time\"\n\nexport type HistoryWeatherRequestPayload = {\n day: string\n provider: WeatherProvider\n}\n\nexport type WeatherReportParams = {\n startDate: string\n endDate: string\n weatherConditionIds?: number[]\n minMinTemp?: number\n maxMinTemp?: number\n minMaxTemp?: number\n maxMaxTemp?: number\n minMinPrecip?: number\n maxMinPrecip?: number\n minMaxPrecip?: number\n maxMaxPrecip?: number\n minMinWindSpeed?: number\n maxMinWindSpeed?: number\n minMaxWindSpeed?: number\n maxMaxWindSpeed?: number\n minMinHumidity?: number\n maxMinHumidity?: number\n minMaxHumidity?: number\n maxMaxHumidity?: number\n minMinPressure?: number\n maxMinPressure?: number\n minMaxPressure?: number\n maxMaxPressure?: number\n minMinClouds?: number\n maxMinClouds?: number\n minMaxClouds?: number\n maxMaxClouds?: number\n minMaxUvIndex?: number\n maxMaxUvIndex?: number\n}\n\nexport enum WeatherReportScope {\n Daily = \"daily\",\n}\n\nexport type WeatherReportRequestPayload = WeatherReportParams & {\n scope: WeatherReportScope\n includeRecent: boolean\n}\n\nexport type CurrentWeatherRequestPayload = {\n provider: WeatherProvider\n includeForecast?: boolean\n forecastDays?: number\n}\n\nexport type WeatherHourlyItem = {\n chanceoffog: number\n chanceoffrost: number\n chanceofhightemp: number\n chanceofovercast: number\n chanceofrain: number\n chanceofremdry: number\n chanceofsnow: number\n chanceofsunshine: number\n chanceofthunder: number\n chanceofwindy: number\n clouds?: number\n dewpoint: number\n feelsLike?: number\n heatindex: number\n hour?: number\n humidity?: number\n isRequestedWeather?: boolean\n precip: number\n pressure?: number\n rain?: HourlyReading\n snow?: HourlyReading\n source: string\n temp?: number\n uvIndex: number\n weather?: WeatherSummary\n windchill: number\n windDegree?: number\n windDir: string\n windgust: number\n windSpeed?: number\n wind?: {\n speed: number\n }\n}\n\nexport type WeatherResponsePayload = Array<WeatherHourlyItem>\n\nexport type WeatherSummary = {\n id?: number\n main?: string\n description?: string\n temperature?: number\n icon?: string | string[]\n weatherIndex?: number\n rain?: HourlyReading\n}\n\nexport type HourlyReading = {\n \"1h\"?: number\n \"3h\"?: number\n}\n\nexport enum WeatherProvider {\n WeatherStack = \"weather_stack\",\n XWeather = \"xweather\",\n}\n\nexport type Weatherstatus = {\n description: string\n hour: DateType\n id: number\n temp: number\n}\n\nexport type WeatherDataResponse = {\n minFeelsLike: number\n id: number\n sunhour: number\n maxFeelsLike: number\n minWindchill: number\n minPressure: number\n minWindDegree: number\n minDewpoint: number\n maxClouds: number\n maxWindgust: number\n minWindSpeed: number\n astro: {\n moonIllumination: number\n moonPhase: string\n moonrise: string\n moonset: string\n sunrise: string\n sunset: string\n }\n insertedAt: string\n maxDewpoint: number\n maxTemp: number\n minClouds: number\n weather: Weatherstatus[]\n minHeatindex: number\n minPrecip: number\n maxWindDegree: number\n maxUvIndex: number\n minHumidity: number\n maxWindSpeed: number\n minWindgust: number\n updatedAt: DateType\n maxPrecip: number\n uvIndex: number\n maxHeatindex: number\n minTemp: number\n date: string\n totalsnow: number\n maxPressure: number\n maxWindchill: number\n maxHumidity: number\n avgtemp: number\n projectId: number\n minUvIndex: number\n}\n","import {\n CameraExid,\n DateType,\n ProjectExid,\n PaginationParams,\n TuplePoint3D,\n TuplePoint2D,\n _360CameraRotation,\n} from \"@evercam/api/types\"\n\nexport enum CommentsScope {\n Recordings = \"recordings\",\n ThreeSixty = \"360\",\n Drone = \"drone\",\n Timeline = \"timeline\",\n}\n\nexport enum CommentsLabel {\n Info = \"Info\",\n Danger = \"Danger\",\n Restricted = \"Restricted\",\n}\n\nexport type CommentsRequestPayload = {\n scope: CommentsScope\n cameraExid?: CameraExid\n}\n\nexport type CommentsListRequestPayload = PaginationParams & {\n projectExid?: ProjectExid\n cameraExid?: CameraExid\n fromDate?: string\n toDate?: string\n scope?: CommentsScope\n creatorEmail?: string\n content?: string\n includeArchived?: boolean\n}\n\nexport type Comment = {\n fromDate?: string\n toDate?: string\n timestamp: string\n projectExid: ProjectExid\n updatedAt?: string\n id?: number\n cameraExid: CameraExid\n content: string\n createdAt?: string\n creatorEmail?: string\n creatorName?: string\n position2d?: TuplePoint2D\n position3d?: TuplePoint3D\n context?: Record<string, unknown>\n canDelete?: boolean\n archivedAt?: string\n label?: CommentsLabel\n}\n\nexport type CommentCreationRequestPayload = {\n fromDate?: DateType\n toDate?: DateType\n timestamp?: DateType\n scope?: CommentsScope\n projectExid?: ProjectExid\n cameraExid?: CameraExid\n content: string\n label?: CommentsLabel\n position2d?: TuplePoint2D\n position3d?: [number, number, number]\n context?: Record<string, unknown>\n}\n\nexport type CommentThreeSixtyContext = {\n floorId: string\n dateId: string\n currentRoom: string\n cameraRotation: _360CameraRotation\n}\n","import {\n type BoundingBox,\n type ProjectExid,\n type CameraExid,\n type DateType,\n DetectionLabel,\n SegmentLabel,\n type TimelineDateInterval,\n TimelinePrecision,\n CameraDateRangeFilter,\n} from \"@evercam/api/types\"\n\nexport type BaseDetectionsFilters = {\n fromDate: string | Date\n toDate: string | Date\n labels: DetectionLabel | DetectionLabel[]\n trackId?: number\n}\n\nexport type DetectionsFilters = BaseDetectionsFilters & {\n projectExid: ProjectExid\n cameraExids?: CameraExid[]\n}\n\nexport type SegmentsFilters = BaseDetectionsFilters & {\n cameraExid: CameraExid\n}\n\nexport type BBox = number[]\n\nexport type Label = DetectionLabel | PpeLabel\n\nexport type Detection = {\n bbox: BBox\n timestamp: string | Date\n label: DetectionLabel\n confidenceScore: number\n}\n\nexport type DetectionsGroup = {\n timestamp: DateType\n cameraExid: CameraExid\n trackings: Detection[]\n}\n\nexport type DetectionsCounts = {\n timestamps: number\n} & {\n [label in Label]: number\n}\n\nexport type DetectionsCountsByPeriod = {\n days: Array<{ day: string } & DetectionsCounts>\n months: Array<{ month: string } & DetectionsCounts>\n years: Array<{ year: string } & DetectionsCounts>\n}\n\nexport type Tracking = {\n trackId: number\n fromDate: string | Date\n toDate: string | Date\n detections: Detection[]\n}\n\nexport type TrackingLabel = string\n\nexport type TrackingsByLabel = Record<TrackingLabel, Tracking[]>\n\nexport type SegmentsByLabel = Record<SegmentLabel, Segment[]>\n\nexport type SegmentPolygonCoords = number[][]\n\nexport type Segment = {\n id: number\n mask?: SegmentPolygonCoords\n label: string\n timestamp: string | Date\n cameraExid?: CameraExid\n bbox?: BoundingBox\n area?: number\n}\n\nexport type SegmentSimilarityResult = {\n distance: number\n segment: Segment\n}\n\nexport type SegmentsSimilaritySearchParams = {\n cameraExid: CameraExid\n referenceId: string | number\n iouThreshold?: number\n fromDate: string\n toDate: string\n}\n\nexport type BaseCountsParams = {\n fromDate?: string\n toDate?: string\n precision?: TimelinePrecision\n trackId?: number\n labels?: DetectionLabel | DetectionLabel[]\n}\n\nexport type DetectionsCountsParams = BaseCountsParams & {\n cameraExids?: CameraExid[]\n projectExid?: ProjectExid\n modelId?: DetectionModel\n labels?: Label[]\n excludeLabels?: Label[]\n confidenceThreshold?: number\n mergedClasses?: string[]\n}\n\nexport type SegmentsCountsParams = CameraDateRangeFilter & BaseCountsParams\n\nexport type DetectionsPresenceByLabel = Record<\n DetectionLabel,\n TimelineDateInterval[]\n>\n\nexport type SegmentsPresenceByLabel = Record<\n SegmentLabel,\n TimelineDateInterval[]\n>\n\nexport type SegmentsPresenceResponse = { intervals: SegmentsPresenceByLabel }\n\nexport type LuminanceReading = {\n timestamp: string\n luminanceDelta: number\n luminanceAverage: number\n}\n\nexport enum PpeLabel {\n Helmet = \"helmet\",\n HighVisibilityVest = \"high-visibility-vest\",\n SafetyGlasses = \"safety-glasses\",\n Gloves = \"gloves\",\n Person = \"person\",\n Man = \"man\",\n Woman = \"woman\",\n}\n\nexport enum DetectionModel {\n Yolov10 = 1,\n Yolov11 = 2,\n Yolov112 = 3,\n GroundingDino = 4,\n Owlv2 = 5,\n PpeV2 = 6,\n}\n","import {\n type ProjectExid,\n type CameraExid,\n type DateType,\n type BBox,\n AiObservationFeasibilityStatus,\n ObservationEventStatus,\n DownloadFileType,\n} from \"@evercam/api/types\"\n\nexport type ObservationApproval = boolean | ObservationEventStatus.Unsure | null\n\nexport type ObservationEvent = {\n id: number\n observationTypeId: number\n observationCode: string | null\n cameraExid: CameraExid\n projectExid: ProjectExid | null\n capturedAt: DateType\n endTime: DateType | null\n confidence: number | null\n status: ObservationEventStatus\n isApproved: ObservationApproval\n reason: string | null\n personBbox: BBox | null\n modelVersion: string | null\n observationMetadata: Record<string, unknown> | null\n trigger: string\n reviewedBy: string | null\n reviewedAt: DateType | null\n}\n\nexport type ObservationType = {\n id: number\n observationCode: string\n name: string\n description: string | null\n type: string\n severity: number | null\n feasibilityStatus: AiObservationFeasibilityStatus\n}\n\nexport enum ObservationMissingItem {\n Helmet = \"helmet\",\n HighVisVest = \"high_vis_vest\",\n Gloves = \"gloves\",\n Glasses = \"glasses\",\n}\n\nexport type ObservationEventsQueryParams = {\n cameraExid?: CameraExid\n observationCode?: string\n fromDate?: string\n toDate?: string\n missingItems?: string\n status?: ObservationEventStatus\n sort?: string\n page?: number\n limit?: number\n}\n\nexport type ObservationEventsExportQueryParams = {\n cameraExid?: CameraExid\n fromDate: string\n toDate: string\n required?: string\n compliant?: boolean\n fileType: DownloadFileType\n directDownload?: boolean\n includeInvalid?: boolean\n}\n\nexport type ObservationApprovalUpdateResponse = {\n updated: boolean\n id: number | string | null\n message: string\n}\n\nexport enum ObservationCountsGranularity {\n Day = \"day\",\n Week = \"week\",\n Month = \"month\",\n}\n\nexport type ObservationEventsCountsQueryParams = {\n cameraExid?: CameraExid\n observationCode?: string\n fromDate?: string\n toDate?: string\n missingItems?: string\n status?: ObservationEventStatus\n granularity?: ObservationCountsGranularity\n}\n\nexport type ObservationEventCount = {\n bucket: DateType\n total: number\n}\n\nexport enum ObservationRequiredItem {\n Helmet = \"has_helmet\",\n HighVisVest = \"has_high_vis_vest\",\n}\n","import { DateType } from \"@evercam/api/types\"\n\nexport enum Operator {\n AND = \"and\",\n OR = \"or\",\n}\n\ntype sortby = string\ntype sortDirection = \"asc\" | \"desc\"\n\nexport type SortingUrlParam = `${sortby}|${sortDirection}`\n\nexport type JsonPrimitive = string | number | boolean | null\n\nexport type JsonValue = JsonPrimitive | JsonObject | JsonArray\n\nexport type JsonObject = {\n [key: string]: JsonValue\n}\n\nexport type JsonArray = JsonValue[]\n\nexport type BatteryReading = {\n id: number\n voltage: number\n datetime: DateType\n serialNo: string\n iValue: number\n vpvValue: number\n ppvValue: number\n csValue: number\n errValue: number\n h19Value: number\n h20Value: number\n h21Value: number\n h22Value: number\n h23Value: number\n ilValue: number\n mpptValue: number\n loadValue: number\n pValue: number\n consumedAmphours: number\n socValue: number\n timeToGo: number\n alarm: string\n relay: string\n arValue: number\n bmvValue: number\n h1Value: number\n h2Value: number\n h3Value: number\n h4Value: number\n h5Value: number\n h6Value: number\n h7Value: number\n h8Value: number\n h9Value: number\n h10Value: number\n h11Value: number\n}\n\nexport interface PaginatedItems<T> {\n from: number\n items: Array<T>\n limit: number\n page: number\n to: number\n total: number\n}\n\nexport enum UnitSystem {\n Imperial = \"imperial\",\n Metric = \"metric\",\n}\n\nexport type Timestamp = string | number\n\nexport type ScheduleUppercase = {\n Friday: string[]\n Monday: string[]\n Saturday: string[]\n Sunday: string[]\n Thursday: string[]\n Tuesday: string[]\n Wednesday: string[]\n}\n\nexport type ScheduleLowercase = {\n friday: string[]\n monday: string[]\n saturday: string[]\n sunday: string[]\n thursday: string[]\n tuesday: string[]\n wednesday: string[]\n}\n\nexport type Schedule = ScheduleUppercase | ScheduleLowercase\n\nexport type PaginationParams = {\n sort?: SortingUrlParam\n page?: number\n limit?: number\n}\n\nexport type LabsPaginationParams = {\n sortBy?: string\n sortDirection?: \"asc\" | \"desc\"\n page?: number\n limit?: number\n}\n\nexport enum MobileDevice {\n Ios = \"ios\",\n Android = \"android\",\n}\n\nexport enum _3dViewer {\n Itwin = \"itwin\",\n Cesium = \"cesium\",\n}\n\nexport enum InfoPage {\n ThreeSixtyView = \"360\",\n BIMView = \"bim\",\n BimCompare = \"bim-compare\",\n GateReport = \"gate-report\",\n DroneView = \"drone-view\",\n Compare = \"compare\",\n Timeline = \"timeline\",\n WeatherReport = \"weather-report\",\n Cameras = \"cameras\",\n}\n\nexport enum DownloadFileType {\n Jpeg = \"jpeg\",\n Pdf = \"pdf\",\n Csv = \"csv\",\n}\n\nexport type Stringified<T> = string & {\n [P in keyof T]: { \"_ value\": T[P] }\n}\n\nexport interface JSON {\n stringify<T>(\n value: T,\n replacer?: (key: string, value: unknown) => unknown,\n space?: string | number\n ): string & Stringified<T>\n\n parse<T>(\n text: Stringified<T>,\n reviver?: (key: unknown, value: unknown) => unknown\n ): T\n}\n\nexport type TuplePoint2D = [number, number]\n\nexport type TuplePoint3D = [number, number, number]\n\nexport type Point2D = {\n x: number\n y: number\n}\n\nexport type Point3D = {\n x: number\n y: number\n z: number\n}\n\nexport type GeoPoint = {\n lat: number\n lng: number\n}\n\nexport type Exid = string\n\nexport type EntityByExid<Entity extends unknown> = Record<Exid, Entity>\n\nexport type BatteryVoltage = {\n date: DateType\n max_value: number\n min_value: number\n}\n\nexport type GlobalSearchQueryParams = PaginationParams & {\n resource: \"projects\" | \"users\" | \"cameras\" | \"companies\" | \"sims\" | \"routers\"\n term: string\n email: string\n featureFlag: string\n}\n\nexport type TimelineDateInterval = {\n fromDate: string\n toDate: string\n}\n\nexport enum TimelinePrecision {\n Year = \"year\",\n Month = \"month\",\n Week = \"week\",\n Day = \"day\",\n Hour = \"hour\",\n Minute = \"minute\",\n Events = \"events\",\n}\n\nexport enum TaskStatus {\n Idle = \"idle\",\n Loading = \"loading\",\n Success = \"success\",\n Error = \"error\",\n}\n\nexport type PatchPayload<T> = Partial<T> & { [K in keyof T]?: T[K] | undefined }\n\nexport enum PtzDirection {\n Up = \"up\",\n Down = \"down\",\n Left = \"left\",\n Right = \"right\",\n}\n\nexport type MoveParams = {\n cameraExid: string\n direction: PtzDirection\n useContinuous: boolean\n}\n\nexport enum ZoomDirection {\n In = \"in\",\n Out = \"out\",\n}\n\nexport type ZoomParams = {\n cameraExid: string\n direction: ZoomDirection\n isRecordingFromNvr: boolean\n}\n","import {\n CameraExid,\n CountryCode,\n CountryId,\n DateType,\n Nvr,\n PaginationParams,\n PowerType,\n Project,\n Router,\n Schedule,\n Tag,\n} from \"@evercam/api/types\"\n\nexport type Kit = {\n alarms: KitAlarm[]\n countryCode: CountryCode\n countryId: CountryId\n countryName: string\n countryRegion: KitRegion\n id?: number\n jobId: number\n name: string\n nvr: Nvr\n powerType: PowerType\n project: Project\n projectId: number\n router: Partial<Router>\n serial: string\n status: KitStatus\n powerSchedule: Schedule\n ups: boolean\n boxId: string\n tags: Tag[]\n storages: KitStorage[]\n createdAt: string\n decommissionedAt?: string\n deletedAt?: string\n}\n\nexport enum KitSupportCheckId {\n RouterSmsRoundTrip = \"router_sms_round_trip\",\n NvrRecordingAllCameras = \"nvr_recording_all_cameras\",\n NvrRecordingThirdStream = \"nvr_recording_third_stream\",\n CamerasHaveDeviceId = \"cameras_have_device_id\",\n CamerasRecording = \"cameras_recording\",\n CamerasSdCardMounted = \"cameras_sd_card_mounted\",\n BatteryReadings = \"battery_readings\",\n}\n\nexport enum KitSupportCheckStatus {\n Passed = \"passed\",\n Failed = \"failed\",\n Skipped = \"skipped\",\n}\n\nexport type KitSupportCheck = {\n id: KitSupportCheckId\n name: string\n status: KitSupportCheckStatus\n error: string | null\n}\n\nexport type KitSupportChecklist = {\n checks: KitSupportCheck[]\n}\n\nexport type KitDiagnosticRun = {\n kitId: number\n kitSerial: string\n checks: KitSupportCheck[]\n ranAt: string\n isSeen: boolean\n}\n\nexport enum KitStatus {\n New = \"new\",\n Active = \"active\",\n Deployed = \"deployed\",\n Decommissioned = \"decommissioned\",\n}\n\nexport enum KitRegion {\n APAC = \"apac\",\n EMEA = \"emea\",\n LATAM = \"latam\",\n US = \"na\",\n}\n\nexport enum KitAlarm {\n // NVR\n NvrOffline = \"nvr_offline\",\n OfflineScheduled = \"offline_scheduled\",\n\n // Cameras\n UnknownCamera = \"unknown_camera\",\n NotRecordingCamera = \"not_recording_camera\",\n\n // Storage\n FullSD = \"full_sd\",\n FullStorage = \"full_storage\",\n HddUnmounted = \"hdd_unmounted\",\n NoHdd = \"no_hdd\",\n\n // Router\n MissingRouterInfo = \"missing_router_info\",\n\n // UPS\n AcFailure = \"ac_failure\",\n LowBattery = \"low_battery\",\n\n // Generator\n GeneratorOff = \"generator_off\",\n}\n\nexport enum KitMetricId {\n SolarCharger = \"solar_charger\",\n PanelPower = \"panel_power\",\n Fan = \"fan\",\n FanTemperature = \"fan_temperature\",\n}\n\nexport enum KitMetricPeriod {\n Last15Minutes = \"now-15m\",\n Last1Hour = \"now-1h\",\n Last24Hours = \"now-24h\",\n Last7Days = \"now-7d\",\n Last30Days = \"now-30d\",\n Last90Days = \"now-90d\",\n}\n\nexport enum GrafanaMetricId {\n SbcCpuLoad = \"SbcCpuLoad\",\n SbcSystemLoad5MnAvg = \"SbcSystemLoad5MnAvg\",\n SbcSystemLoad15MnAvg = \"SbcSystemLoad15MnAvg\",\n SbcRamUsed = \"SbcRamUsed\",\n SbcSwapUsed = \"SbcSwapUsed\",\n SbcRootFsUsed = \"SbcRootFsUsed\",\n SbcCpuCoresTotal = \"SbcCpuCoresTotal\",\n SbcRamTotal = \"SbcRamTotal\",\n SbcSwapTotal = \"SbcSwapTotal\",\n SbcRootFsTotal = \"SbcRootFsTotal\",\n SbcUptime = \"SbcUptime\",\n SbcCpuStats = \"SbcCpuStats\",\n SbcRamStats = \"SbcRamStats\",\n SbcNetworkStats = \"SbcNetworkStats\",\n SbcTimeSyncStats = \"SbcTimeSyncStats\",\n SbcTemperatureStats = \"SbcTemperatureStats\",\n SbcTimeSyncDriftStats = \"SbcTimeSyncDriftStats\",\n CameraInfo = \"CameraInfo\",\n CameraRecordingStateTimeline = \"CameraRecordingStateTimeline\",\n CameraStreamInfo = \"CameraStreamInfo\",\n LocalStorage = \"LocalStorage\",\n StorageSpaceUsed = \"StorageSpaceUsed\",\n RouterTemperature = \"RouterTemperature\",\n RouterCpuLoad = \"RouterCpuLoad\",\n RouterRamUsed = \"RouterRamUsed\",\n RouterSystemLoad5MnAvg = \"RouterSystemLoad5MnAvg\",\n RouterSwapTotal = \"RouterSwapTotal\",\n RouterRamTotal = \"RouterRamTotal\",\n RouterUptime = \"RouterUptime\",\n RouterCpuCoresTotal = \"RouterCpuCoresTotal\",\n RouterSignalReliability = \"RouterSignalReliability\",\n RouterSINR = \"RouterSINR\",\n RouterRSRP = \"RouterRSRP\",\n RouterRSRQ = \"RouterRSRQ\",\n RouterRSSI = \"RouterRSSI\",\n RouterSignalStrengthStats = \"RouterSignalStrengthStats\",\n RouterSignalQualityStats = \"RouterSignalQualityStats\",\n RouterDataConsumptionStats = \"RouterDataConsumptionStats\",\n BatteryVoltageAndCurrentStats = \"BatteryVoltageAndCurrentStats\",\n PanelVoltageAndPowerStats = \"PanelVoltageAndPowerStats\",\n ExNvrStatus = \"ExNvrStatus\",\n ExNvrVersion = \"ExNvrVersion\",\n ExNvrMemoryUsage = \"ExNvrMemoryUsage\",\n ExNvrLogs = \"ExNvrLogs\",\n}\n\nexport enum KitChartType {\n Stat = \"stat\",\n Gauge = \"gauge\",\n Graph = \"graph\",\n Table = \"table\",\n StateTimeline = \"state-timeline\",\n Logs = \"logs\",\n TimeSeries = \"timeseries\",\n BarChart = \"barchart\",\n}\n\nexport type GrafanaTimeSeriesValue = number | string | null\nexport type GrafanaTimeSeriesValues = GrafanaTimeSeriesValue[][]\n\nexport type GrafanaFieldConfig = {\n displayNameFromDS?: string\n links?: string[]\n color?: string\n custom?: {\n lineInterpolation?: string\n fillOpacity?: number\n gradientMode?: string\n lineWidth?: number\n spanNulls?: boolean\n resultType?: string\n }\n thresholds?: {\n mode: string\n steps: Array<{\n color: string\n value: number | null\n }>\n }\n unit?: string\n decimals?: number\n interval?: number\n}\n\nexport type GrafanaField = {\n name: string\n type: string\n typeInfo: {\n frame: string\n nullable?: boolean\n }\n config: GrafanaFieldConfig\n labels?: {\n [key: string]: string\n }\n values?: GrafanaTimeSeriesValues\n}\n\nexport type GrafanaSchemaMeta = {\n type?: string\n typeVersion?: number[]\n custom?: {\n resultType?: string\n frameType?: string\n }\n stats?: Array<{\n displayName: string\n value: number\n unit?: string\n }>\n executedQueryString?: string\n}\n\nexport type GrafanaSchema = {\n name?: string\n refId: string\n meta: GrafanaSchemaMeta\n fields: GrafanaField[]\n}\n\nexport type GrafanaFrame = {\n schema: GrafanaSchema\n data: {\n values: GrafanaTimeSeriesValues\n nanos?: Array<number[] | null>\n }\n}\n\nexport type KitMetricData = {\n type: KitChartType\n chartProps?: Record<string, unknown>\n}\n\nexport type GrafanaQueryResult = {\n status: number\n frames: GrafanaFrame[]\n}\n\nexport type GrafanaMetricData = KitMetricData & {\n results: {\n [key: string]: GrafanaQueryResult\n }\n}\n\nexport type EvercamMetricData = KitMetricData & {\n stats: EvercamStats[]\n}\n\nexport type GrafanaKitMetrics = Record<\n keyof typeof GrafanaMetricId,\n GrafanaMetricData\n>\n\nexport type EvercamStats = {\n [k: string]: number | string\n timestamp: string\n}\n\nexport type KitQueryParams = PaginationParams & {\n name: string\n serial: string\n status: KitStatus\n tagId: number | number[]\n}\n\nexport type AdminKit = {\n id: number\n name: string\n serial: string\n status: string\n powerType: PowerType\n location: string\n countryId: number\n countryName: string\n countryRegion: string\n nvr: Nvr\n router: {\n id: number\n serialNumber: number\n vpnUserId: string\n vpnPassword: string\n routerType: string\n routerUserId: string\n routerPassword: string\n routerHttpPort: number\n powerType: PowerType\n powerSchedule: Schedule\n vpnServer: string\n netbirdUrl: string\n sims: {\n id: number\n number: string\n }[]\n }\n project: {\n id: number\n exid: string\n name: string\n timezone: string\n status: string\n zohoId: string\n insertedAt: DateType\n }\n}\n\nexport type KitCreatePayload = {\n projectId?: number\n countryCode?: string\n name: string\n status: KitStatus\n powerType: PowerType\n config: {\n region: KitRegion\n }\n}\n\nexport type KitMetricStatsEntry = {\n timestamp: string\n voltage: number\n current: number\n panelVoltage: number\n panelPower: number\n}\n\nexport type KitFanStatsEntry = {\n timestamp: string\n speed: number\n internalTemperature: number\n externalTemperature: number | null\n}\n\nexport type KitUpdatePayload = {\n countryId: number\n name: string\n kitSerial: string\n kitStatus: KitStatus\n type: string\n}\n\nexport enum KitStorageTransport {\n Sata = \"sata\",\n Nvme = \"nvme\",\n Usb = \"usb\",\n}\n\nexport type KitStorageRequestPayload = {\n kitId: number\n}\n\nexport type KitStorage = {\n id: number\n serial: string\n status: string\n type: string\n metadata: {\n formFactor: string\n }\n model: string\n insertedAt: string\n updatedAt: string\n vendor: string\n kitId: number\n capacity: number\n freeSpace: number\n tran: KitStorageTransport\n}\n\nexport type KitFootageRequestPayload = {\n cameraId: CameraExid\n storageId: number\n}\n\nexport type KitFootage = {\n id: number\n startDate: string\n endDate: string\n cameraId: number\n storageId: number\n}\n\nexport type KitAlarmItem = {\n id: number\n kitId: number\n alarm: KitAlarm\n startDate: string\n endDate: string | null\n}\n\nexport type KitBox = {\n id: string\n gatewaySerial: string\n gatewayMac: string\n gatewayConfig: Record<string, unknown> | null\n insertedAt: string\n updatedAt: string\n}\n\nexport type KitBoxCreatePayload = {\n id?: string\n gatewaySerial: string\n gatewayMac: string\n gatewayConfig?: Record<string, unknown>\n}\n\nexport type KitBoxQueryParams = PaginationParams & {\n id: string\n gatewaySerial: string\n gatewayMac: string\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { CameraStatus, DateType, PaginationParams } from \"@evercam/api/types\"\n\nexport enum AuditLogActionType {\n VH_STATUS = \"vh_status\",\n CR_UPDATED = \"cr_updated\",\n CR_CREATED = \"cr_created\",\n ONLINE = \"online\",\n OFFLINE = \"offline\",\n ON_HOLD = \"on_hold\",\n WAITING = \"waiting\",\n DECOMMISSIONED = \"decommissioned\",\n UNDER_MAINTENANCE = \"under_maintenance\",\n WAITING_FOR_SITE_VISIT = \"waiting_for_site_visit\",\n SMS = \"sms\",\n CUSTOM = \"custom\",\n SIM = \"sim\",\n LOGIN = \"login\",\n LOGOUT = \"logout\",\n CREATE = \"create\",\n UPDATE = \"update\",\n DELETE = \"delete\",\n DEVICE_SETTINGS = \"device_settings\",\n LINK_SIM_WITH_ROUTER = \"link_sim_with_router\",\n UNLINK_SIM_FROM_ROUTER = \"unlink_sim_from_router\",\n LINK_CAMERA_WITH_ROUTER = \"link_camera_with_router\",\n UNLINK_CAMERA_FROM_ROUTER = \"unlink_camera_from_router\",\n SHARE = \"share\",\n UPDATE_SHARE = \"update_share\",\n DELETE_SHARE = \"delete_share\",\n SHARE_REQUEST = \"share_request\",\n DELETE_SHARE_REQUEST = \"delete_share_request\",\n TRANSFER_OWNERSHIP = \"transfer_ownership\",\n BIM_NOTE = \"bim_note\",\n GATE_REPORT_NOTE = \"gate_report_note\",\n}\n\nexport enum AuditLogEntity {\n Cameras = \"cameras\",\n Projects = \"projects\",\n Layers = \"layers\",\n Routers = \"routers\",\n Sims = \"sims\",\n Hdds = \"hdds\",\n Nvr = \"nvr\",\n Archives = \"archives\",\n Users = \"users\",\n Rois = \"rois\",\n Kits = \"kits\",\n Roles = \"roles\",\n Tags = \"tags\",\n KitsTags = \"kits_tags\",\n Oauth = \"oauth\",\n StorageProviders = \"storage_providers\",\n}\n\nexport type AuditLog = {\n id: number\n action: AuditLogActionType\n details: Record<string, any>\n insertedAt: DateType\n entity: string\n user_details: {\n browser: string\n country: string\n countryCode: string\n device: string | null\n ip: string\n os: string | null\n }\n who: string\n}\n\nexport type AuditLogsParams = PaginationParams & {\n routerId: number\n cameraId: number\n entity: string\n byRouter: boolean\n byCamera: boolean\n byProject: boolean\n action: string\n}\n\nexport type CameraLogsQueryParams = {\n historyDays: number\n accountId?: string\n status: CameraStatus[]\n}\n\nexport type CameraLogItem = {\n start: DateType\n state: CameraStatus\n end: DateType\n}\n\nexport type CameraLog = {\n data: CameraLogItem[]\n measure: string\n}\n\nexport type CameraAuditLog = {\n id: number\n action: AuditLogActionType\n details: {\n error_body?: string\n exid: string\n id: number\n name: string\n reason?: string\n }\n insertedAt: DateType\n entity: string\n user_details: {\n ip: string\n country: string\n countryCode: string\n agent: string\n }\n who: string\n}\n\nexport type CameraAuditLogsQueryParams = PaginationParams & {\n from: string\n to: string\n action: AuditLogActionType[]\n}\n","import {\n CameraExid,\n DateType,\n PaginationParams,\n Schedule,\n} from \"@evercam/api/types\"\n\nexport type SnapshotExtractionQyeryParams = PaginationParams & {\n camera: string // search by camera name\n cameraExid: CameraExid\n status: SnapshotExtractionStatus\n}\n\nexport enum SnapshotExtractionStatus {\n Cancelling = \"canceling\",\n Cancelled = \"cancelled\",\n Completed = \"completed\",\n Failed = \"failed\",\n Pending = \"pending\",\n Processing = \"processing\",\n}\n\nexport enum SnapshotExtractionType {\n Cloud = \"cloud\",\n Local = \"local\",\n Timelapse = \"timelapse\",\n}\n\nexport type SnapshotExtraction = {\n id: number\n cameraId: number\n cameraExid: CameraExid\n cameraName: string\n fromDate: DateType\n toDate: DateType\n type: SnapshotExtractionType\n notes: string\n status: SnapshotExtractionStatus\n interval: number\n requestor: string\n jpegsToDropbox: boolean\n injectTo_cr: Boolean\n schedule: Schedule\n created_at: DateType\n jpegCount?: number\n obanJobId?: number\n}\n\nexport type SnapshotTestPayload = {\n cameraExid?: CameraExid\n camUsername: string\n camPassword: string\n externalUrl: string\n jpgUrl: string\n}\n\nexport type SnapshotTestResponse = {\n status: string\n data: string\n}\n\nexport type SnapshotEmailDeliveryRequestPayload = {\n snapshot: string\n recipients?: string[]\n message?: string\n}\n\nexport type SnapshotEmailDeliveryResponsePayload = {\n warning?: string\n}\n\nexport type DeleteSnapshotQueryParams = {\n fromDate: DateType\n toDate: DateType\n adminEmail: string\n adminFullname: string\n}\n\nexport type SnapshotTransfer = {\n id: number\n sourceCamera: SnapshotTransferCamera\n targetCamera: SnapshotTransferCamera\n fromDate: DateType\n toDate: DateType\n overwriteExisting?: boolean | null\n deleteSource?: boolean | null\n requestor: SnapshotTransferRequestor\n status: SnapshotTransferStatus\n insertedAt: DateType\n attempts?: number | null\n errorMessage?: string | null\n snapshotsTransferred?: number | null\n}\n\nexport type SnapshotTransferCamera = {\n id: number\n exid: CameraExid\n name: string\n}\n\nexport type SnapshotTransferRequestor = {\n email: string\n firstname: string\n lastname: string\n}\n\nexport enum SnapshotTransferStatus {\n Completed = \"completed\",\n Failed = \"failed\",\n Processing = \"processing\",\n Pending = \"pending\",\n Cancelled = \"cancelled\",\n}\n\nexport type TransferCloudRecordingsQueryParams = PaginationParams & {\n targetCameraExid: CameraExid\n fromDate: DateType\n toDate: DateType\n overwriteExisting?: boolean\n deleteSource?: boolean\n adminEmail?: string\n adminFullname?: string\n}\n","import {\n BBox,\n BoundingBox,\n DateType,\n Schedule,\n ScheduleLowercase,\n CameraExid,\n DetectionModel,\n PaginationParams,\n PpeLabel,\n ProjectExid,\n CameraDateRangeFilter,\n CameraFeatureFlag,\n TimelineDateInterval,\n Camera,\n AdminCamera,\n _360FloorV2,\n _360FloorId,\n PaginatedItems,\n DateRangeFilter,\n TuplePoint2D,\n} from \"@evercam/api/types\"\nimport { DetectionLabel, DownloadFileType } from \"@evercam/api/types\"\n\nexport enum SiteAnalyticsMode {\n Detections = \"detections\",\n Segments = \"segments\",\n}\n\nexport type SmartSearchObjectPart = {\n id?: string\n type: SmartSearchComponentType.Object\n value: DetectionLabel\n}\n\nexport type SmartSearchOperatorPart = {\n id?: string\n type: SmartSearchComponentType.Operator\n value: SmartSearchOperatorType\n}\n\nexport type SmartSearchConditionPart = {\n id?: string\n type: SmartSearchComponentType.Condition\n value: SmartSearchCondition | SmartSearchConditionData\n}\n\nexport type SmartSearchViewPart = {\n id?: string\n type: SmartSearchComponentType.View\n value: SiteAnalyticsView\n}\n\nexport type SmartSearchAreaPart = {\n id?: string\n type: SmartSearchComponentType.Area\n value: BBox\n}\n\nexport type SmartSearchTimePart = {\n id?: string\n type: SmartSearchComponentType.Time\n value: Schedule | ScheduleLowercase\n}\n\nexport type SmartSearchDateRangePart = {\n id?: string\n type: SmartSearchComponentType.DateRange\n value: DateRangeFilter\n}\n\nexport type SmartSearchPart =\n | SmartSearchObjectPart\n | SmartSearchOperatorPart\n | SmartSearchConditionPart\n | SmartSearchViewPart\n | SmartSearchAreaPart\n | SmartSearchTimePart\n | SmartSearchDateRangePart\n\nexport type SmartSearchPartOrGroup = SmartSearchPart | SmartSearchPart[]\n\nexport enum SmartSearchComponentType {\n Condition = \"condition\",\n Object = \"object\",\n Area = \"in_area\",\n Time = \"time\",\n Operator = \"operator\",\n View = \"view\",\n DateRange = \"date_range\",\n Heatmap = \"heatmap\",\n}\n\nexport type SmartSearchPartType =\n | SmartSearchComponentType\n | SmartSearchCondition\n\nexport type SmartSearchComponentData = {\n id: string\n type: SmartSearchComponentType\n parts: SmartSearchPartOrGroup[]\n}\n\nexport enum SmartSearchCondition {\n InArea = \"in_area\",\n Intersects = \"intersects\",\n Time = \"time\",\n}\n\nexport type SmartSearchConditionData = {\n condition: SmartSearchCondition\n value: string | BoundingBox | DetectionLabel | Date\n}\n\ntype SmartSearchBackendConditionBase = {\n target: SmartSearchTargets\n}\n\nexport type SmartSearchSelectionCondition = SmartSearchBackendConditionBase & {\n type: SmartSearchConditionTypes.Selection\n operator: SmartSearchOperators\n attribute: string\n value: string | number | string[]\n}\n\nexport type SmartSearchSpatialCondition = SmartSearchBackendConditionBase & {\n type: SmartSearchConditionTypes.Spatial\n operator: SmartSearchOperators\n reference: {\n target: SmartSearchTargets\n attribute: string\n value: string | number | string[]\n }\n}\n\nexport type SmartSearchAreaCondition = SmartSearchBackendConditionBase & {\n type: SmartSearchConditionTypes.Area\n operator: SmartSearchOperators\n polygon: BBox\n}\n\nexport type SmartSearchGeoAreaCondition = SmartSearchBackendConditionBase & {\n type: SmartSearchConditionTypes.GeoArea\n operator: SmartSearchOperators\n polygon: BBox\n}\n\nexport type SmartSearchBackendQueryCondition =\n | SmartSearchSelectionCondition\n | SmartSearchSpatialCondition\n | SmartSearchAreaCondition\n | SmartSearchGeoAreaCondition\n\nexport type SmartSearchBackendQuery = {\n returnTargets: SmartSearchTargets[]\n rulesLogic: SmartSearchOperatorType\n rules: {\n logic: SmartSearchOperatorType\n conditions: SmartSearchBackendQueryCondition[]\n }[]\n returnType: SmartSearchReturnType\n timeSchedule?: Schedule\n}\n\nexport enum SmartSearchTargets {\n Tracking = \"tracking\",\n Segments = \"segments\",\n}\n\nexport enum SmartSearchReturnType {\n All = \"all\",\n FirstLastSeen = \"first_last_seen\",\n}\n\nexport enum SmartSearchOperatorType {\n And = \"AND\",\n Or = \"OR\",\n}\n\nexport enum SmartSearchOperators {\n Near = \"near\",\n Far = \"far\",\n Intersects = \"intersects\",\n DoesNotIntersect = \"does_not_intersect\",\n Inside = \"inside\",\n Outside = \"outside\",\n DistanceBelow = \"distance_below\",\n DistanceAbove = \"distance_above\",\n Area = \"in_area\",\n Equal = \"=\",\n}\n\nexport enum SmartSearchConditionTypes {\n Selection = \"selection\",\n Spatial = \"spatial\",\n Area = \"area\",\n GeoArea = \"in_geo_area\",\n Iou = \"iou\",\n Near = \"near\",\n Far = \"far\",\n}\n\nexport type SmartSearchOptionValue =\n | DetectionLabel\n | SmartSearchOperatorType\n | SmartSearchConditionData\n | DateRangeFilter\n | SiteAnalyticsView\n\nexport type SmartSearchBackendQueryPayload = {\n name: string\n description: string\n query: SmartSearchBackendQuery\n fromDate?: DateType\n toDate?: DateType\n author: string\n createdAt: DateType\n params?: { start: string; end: string }\n}\n\nexport type SavedQuery = {\n description: string\n id: number\n query: SmartSearchBackendQuery\n params: Record<string, string>\n components?: Omit<SmartSearchPart, \"id\">[]\n toDate?: DateType\n createdAt?: DateType\n cameraExid: string\n name: string\n fromDate?: DateType\n author?: string\n}\n\nexport type DetectionsRequestParams = {\n projectExid: ProjectExid\n cameraExids: CameraExid[]\n fromDate?: string\n toDate?: string\n labels?: Array<DetectionLabel | PpeLabel>\n modelId?: DetectionModel\n trackId?: number\n thresholds?: string[]\n excludeLabels?: Array<DetectionLabel | PpeLabel>\n mergedClasses?: Array<string>\n confidenceThreshold?: number\n} & PaginationParams\n\nexport type DetectionsExportRequestParams = DetectionsRequestParams & {\n fileType: DownloadFileType\n columns?: string[]\n directDownload?: boolean\n}\n\nexport type SmartSearchHeatmapPoint = {\n coordinates: TuplePoint2D\n detectionsCount: number\n}\n\nexport type SmartSearchHeatmapData = {\n label: string\n points: SmartSearchHeatmapPoint[]\n}\n\nexport type SmartSearchNearConfig = {\n sourceLabels: DetectionLabel[]\n targetLabel?: DetectionLabel\n}\n\nexport type HeatmapIntersectionsRequestParams = CameraDateRangeFilter &\n SmartSearchNearConfig\n\nexport type SmartSearchSidebarItem = {\n key: string\n displayLabel: string\n data: SmartSearchHeatmapData\n imagePath?: string\n}\n\nexport enum SiteAnalyticsViewType {\n Camera = \"camera\",\n ThreeSixty = \"360\",\n}\n\nexport type SiteAnalyticsCameraView = {\n type: SiteAnalyticsViewType.Camera\n id: CameraExid\n value: Camera | AdminCamera\n}\n\nexport type SiteAnalytics360View = {\n type: SiteAnalyticsViewType.ThreeSixty\n id: _360FloorId\n value: _360FloorV2\n}\n\nexport type SiteAnalyticsView = SiteAnalyticsCameraView | SiteAnalytics360View\n\nexport type SiteAnalyticsProcessingStatusPayload = {\n projectExid?: ProjectExid\n fromDate?: DateType\n toDate?: DateType\n cameraExid?: CameraExid\n drawingId?: string\n features?: CameraFeatureFlag[]\n}\n\nexport type SiteAnalyticsProcessingStatus = {\n projectExid: ProjectExid\n viewType: SiteAnalyticsViewType\n viewId: string\n feature: CameraFeatureFlag\n processedIntervals: TimelineDateInterval[]\n}\n\nexport type SmartSearchRequestPayload = PaginationParams & {\n cameraExids?: CameraExid[]\n drawingIds?: _360FloorId[]\n walkIds?: string[]\n markerIds?: string[]\n payload: SmartSearchBackendQuery\n fromDate?: string\n toDate?: string\n threshold?: number\n}\n\ntype SmartSearchResultItemBase = {\n area: number\n bbox: BBox\n cameraExid?: CameraExid\n centroid: number[]\n confidenceScore: number\n drawingId?: _360FloorId\n label: DetectionLabel\n modelId: DetectionModel\n projectExid: ProjectExid\n segmentId?: number\n trackId: number\n walkId?: string | number\n}\n\nexport type SmartSearchResultItemFirstLastSeen = SmartSearchResultItemBase & {\n firstSeen: DateType\n firstSeenMarkerId?: string | number\n lastSeen: DateType\n lastSeenMarkerId?: string | number\n}\n\nexport type SmartSearchResultItemAll = SmartSearchResultItemBase & {\n walkId?: string | number\n markerId?: string | number\n geolocation?: number[]\n mask?: number[][]\n timestamp: DateType\n}\n\ntype SmartSearchResultItemByType = {\n [SmartSearchReturnType.FirstLastSeen]: SmartSearchResultItemFirstLastSeen\n [SmartSearchReturnType.All]: SmartSearchResultItemAll\n}\n\nexport type SmartSearchResponse<\n R extends SmartSearchReturnType = SmartSearchReturnType.FirstLastSeen\n> = PaginatedItems<SmartSearchResultItemByType[R]>\n\nexport type SmartSearchMinifiedPart = {\n t: SmartSearchComponentType\n v: unknown\n}\n\nexport type SmartSearchMinifiedComponent = {\n t: SmartSearchComponentType\n p: SmartSearchMinifiedPart[]\n}\n","import {\n CameraExid,\n DateType,\n PaginationParams,\n ProjectExid,\n} from \"@evercam/api/types\"\n\nexport enum VisionProvider {\n Gemini = \"gemini\",\n Gemma = \"gemma\",\n}\n\nexport const VISION_PROVIDER_OPTIONS = [\n { text: \"Gemini (hosted, billed per call)\", value: VisionProvider.Gemini },\n { text: \"Gemma 4 31B (self-hosted, free)\", value: VisionProvider.Gemma },\n]\n\nexport type SiteAnalyticsCoolifyStatus = {\n appUuid: string | null\n name: string | null\n serverUuid: string | null\n serverName: string | null\n appUrl: string | null\n status: string | null\n isRunning: boolean\n updatedAt: string | null\n}\n\nexport type SiteAnalyticsProjectMeta = {\n exid: ProjectExid\n name: string | null\n timezone: string | null\n featureFlags: string[] | null\n}\n\nexport type SiteAnalyticsCameraMeta = {\n exid: CameraExid\n name: string | null\n status: string | null\n featureFlags: string[] | null\n}\n\nexport type SiteAnalyticsManagedApp = {\n id: number\n projectExid: ProjectExid\n cameraExid: CameraExid\n coolifyAppId: string | null\n\n appVersion: string\n modelId: number | null\n\n startDate: DateType | null\n endDate: DateType | null\n startHour: number\n endHour: number\n\n source: string\n override: boolean\n timeIncreaseFrequency: number\n skipWeekends: boolean\n tracking: boolean\n observations: boolean\n visionProvider?: VisionProvider | null\n\n insertedAt: DateType | null\n updatedAt: DateType | null\n\n coolify: SiteAnalyticsCoolifyStatus | null\n project: SiteAnalyticsProjectMeta | null\n camera: SiteAnalyticsCameraMeta | null\n\n lastTrackingAt: DateType | null\n}\n\nexport type CreateSiteAnalyticsAppPayload = {\n projectExid: ProjectExid\n cameraExid: CameraExid\n coolifyServerUuid: string\n\n appVersion?: string\n modelId?: number | null\n startDate?: DateType | null\n endDate?: DateType | null\n startHour?: number\n endHour?: number\n source?: string\n override?: boolean\n skipWeekends?: boolean\n timeIncreaseFrequency?: number\n tracking?: boolean\n observations?: boolean\n observationPromptId?: number | null\n visionProvider?: VisionProvider\n}\n\nexport type UpdateSiteAnalyticsAppPayload = Partial<\n Omit<\n CreateSiteAnalyticsAppPayload,\n \"projectExid\" | \"cameraExid\" | \"coolifyServerUuid\"\n >\n>\n\nexport type ModelOption = {\n modelId: number\n version: string\n}\n\nexport type SiteAnalyticsAppConfigFormValue = {\n appVersion: string\n modelId: number | null\n startDate: string | null\n endDate: string | null\n startHour: number\n endHour: number\n source: string\n override: boolean\n timeIncreaseFrequency: number\n skipWeekends: boolean\n}\n\nexport type SiteAnalyticsManagementListParams = PaginationParams & {\n projectExid?: ProjectExid\n includeStatus?: boolean\n}\n\nexport type CreateSiteAnalyticsAppResponse = {\n created: boolean\n id: number | null\n data: SiteAnalyticsManagedApp | null\n count: number | null\n message: string\n}\n\nexport type DeleteSiteAnalyticsAppResponse = {\n deleted: boolean\n count: number\n message: string\n}\n\nexport type ObservationConfigActivity = {\n observationTypeId: number\n every: number | null\n}\n\nexport type ObservationConfig = {\n id: number\n cameraExid: CameraExid\n projectExid: ProjectExid | null\n enabled: boolean\n activities: ObservationConfigActivity[]\n createdBy: string | null\n insertedAt: DateType | null\n updatedAt: DateType | null\n}\n\nexport type UpsertObservationConfigPayload = {\n projectExid?: ProjectExid\n enabled: boolean\n activities: ObservationConfigActivity[]\n}\n","import { CameraExid, PaginationParams } from \"@evercam/api/types\"\nimport type { JsonObject } from \"@evercam/api/types\"\nimport { VideoWallPresetGridConfig } from \"@evercam/api/types/videoWall\"\n\nexport enum DelayUnit {\n Minute = \"Minutes\",\n Hour = \"Hours\",\n Day = \"Days\",\n}\n\nexport enum CommonWidgetSettingsKeys {\n Width = \"width\",\n WidthResolution = \"resolution\",\n Height = \"height\",\n HeightResolution = \"heightResolution\",\n}\n\nexport enum RecordingsWidgetSettingsKeys {\n DarkMode = \"darkMode\",\n Calendar = \"calendar\",\n HasDelay = \"hasDelay\",\n Delay = \"delay\",\n DelayUnit = \"delayUnit\",\n HasRange = \"hasRange\",\n DateRange = \"dateRange\",\n Width = CommonWidgetSettingsKeys.Width,\n WidthResolution = CommonWidgetSettingsKeys.WidthResolution,\n Height = CommonWidgetSettingsKeys.Height,\n HeightResolution = CommonWidgetSettingsKeys.HeightResolution,\n}\n\nexport enum LiveViewWidgetSettingsKeys {\n Fullscreen = \"fullscreen\",\n Download = \"download\",\n Zoom = \"zoom\",\n Playpause = \"playpause\",\n Refresh = \"refresh\",\n Width = CommonWidgetSettingsKeys.Width,\n WidthResolution = CommonWidgetSettingsKeys.WidthResolution,\n Height = CommonWidgetSettingsKeys.Height,\n HeightResolution = CommonWidgetSettingsKeys.HeightResolution,\n}\n\nexport enum BimCompareWidgetSettingsKeys {\n Timeline = \"timeline\",\n Calendar = \"calendar\",\n DarkMode = \"darkMode\",\n Width = CommonWidgetSettingsKeys.Width,\n WidthResolution = CommonWidgetSettingsKeys.WidthResolution,\n Height = CommonWidgetSettingsKeys.Height,\n HeightResolution = CommonWidgetSettingsKeys.HeightResolution,\n}\n\nexport enum VideoWallWidgetSettingsKeys {\n Preset = \"preset\",\n RefreshRate = \"refreshRate\",\n Width = CommonWidgetSettingsKeys.Width,\n WidthResolution = CommonWidgetSettingsKeys.WidthResolution,\n Height = CommonWidgetSettingsKeys.Height,\n HeightResolution = CommonWidgetSettingsKeys.HeightResolution,\n}\n\nexport enum ThreeSixtyKeys {\n DateId = \"dateId\",\n DateLocked = \"dateLocked\",\n FloorId = \"floorId\",\n FloorLocked = \"floorLocked\",\n Marker = \"markerId\",\n MarkerLocked = \"markerLocked\",\n MediaLocked = \"mediaLocked\",\n Width = CommonWidgetSettingsKeys.Width,\n WidthResolution = CommonWidgetSettingsKeys.WidthResolution,\n Height = CommonWidgetSettingsKeys.Height,\n HeightResolution = CommonWidgetSettingsKeys.HeightResolution,\n}\n\nexport type CommonWidgetSettings = {\n width: number\n resolution: string\n height: number\n heightResolution: string\n}\n\nexport type RecordingsWidgetSettings = CommonWidgetSettings & {\n darkMode: boolean\n calendar: boolean\n hasDelay: boolean\n delay: number\n delayUnit: DelayUnit\n hasRange: boolean\n dateRange: [string, string] | null\n}\n\nexport type LiveViewWidgetSettings = CommonWidgetSettings & {\n fullscreen: boolean\n download: boolean\n zoom: boolean\n playpause: boolean\n refresh: number\n}\n\nexport type BimCompareWidgetSettings = CommonWidgetSettings & {\n timeline: boolean\n darkMode: boolean\n}\n\nexport type VideoWallWidgetSettingsObject = CommonWidgetSettings & {\n preset: VideoWallPresetGridConfig\n refreshRate: number\n allowCellFullscreen: boolean\n allowFitContent: boolean\n allowForceAspectRatio: boolean\n allowFullscreen: boolean\n cameras: CameraExid[]\n description: string\n global: boolean\n visibility: string\n}\n\nexport type ThreeSixtyWidgetSettings = CommonWidgetSettings & {\n dateId: string\n floorId: string\n markerId: string\n}\n\nexport type WidgetSettings =\n | RecordingsWidgetSettings\n | LiveViewWidgetSettings\n | BimCompareWidgetSettings\n | VideoWallWidgetSettingsObject\n | ThreeSixtyWidgetSettings\n\nexport enum WidgetType {\n LiveWidget = \"Live View\",\n Recording = \"Recordings\",\n BimCompare = \"BIM Compare\",\n VideoWall = \"Video Wall\",\n ThreeSixty = \"360\",\n}\n\nexport const WidgetTypesByResource = {\n camera: [WidgetType.LiveWidget, WidgetType.Recording, WidgetType.BimCompare],\n project: [WidgetType.VideoWall, WidgetType.ThreeSixty],\n}\n\nexport type WidgetsListRequestPayload = PaginationParams & {\n userId: number\n projectId: number\n cameraId: number\n active: boolean\n settings: WidgetSettings\n widgetType: WidgetType\n domainRestricted: boolean\n allowedOrigin: string\n}\n\nexport type Widget = {\n id: number\n ressources: {\n camera?: {\n id: number\n exid: string\n name: string\n }\n project?: {\n id: number\n exid: string\n name: string\n }\n }\n widgetType: WidgetType\n settings: WidgetSettings\n allowedOrigin: string\n domainRestricted: boolean\n active: boolean\n user: {\n id: number\n email: string\n firstname: string\n lastname: string\n }\n insertedAt: string\n updatedAt: string\n}\n\nexport type WidgetFull = {\n id: number\n ressources: {\n camera?: {\n id: number\n exid: string\n name: string\n }\n project?: {\n id: number\n exid: string\n name: string\n }\n }\n widgetType: WidgetType\n widgetKey: string\n widgetId: string\n active: boolean\n user: {\n id: number\n email: string\n }\n settings: WidgetSettings\n sessionSettings: JsonObject | null\n allowedOrigin: string\n domainRestricted: boolean\n insertedAt: string\n updatedAt: string\n}\n\nexport type WidgetSessionSettingsPayload = {\n sessionSettings: JsonObject\n}\n\nexport type AdminWidgetResourceCamera = {\n id: number\n exid: string\n name: string\n}\n\nexport type AdminWidgetResourceProject = {\n id: number\n exid: string\n name: string\n featureFlags: string[]\n}\n\nexport type AdminWidgetResourcePreset = {\n id: number\n name: string\n exid: string\n config: JsonObject\n}\n\nexport type AdminWidgetResources = {\n camera?: AdminWidgetResourceCamera | null\n project?: AdminWidgetResourceProject | null\n preset?: AdminWidgetResourcePreset | null\n}\n\nexport type AdminWidgetUser = {\n id: number\n email: string\n firstname: string\n lastname: string\n}\n\nexport type AdminWidget = {\n id: number\n active: boolean\n public: boolean\n user: AdminWidgetUser\n description: string | null\n insertedAt: string\n updatedAt: string\n settings: WidgetSettings\n ressources: AdminWidgetResources\n seenAt?: string\n showDashboardLink?: boolean\n domainRestricted: boolean\n widgetType: WidgetType\n allowedOrigin: string | null\n}\n\nexport type AdminWidgetFull = AdminWidget & {\n widgetKey: string\n widgetId: string\n}\n\nexport type WidgetPayload = {\n ressources: {\n cameraId?: number\n projectId?: number\n }\n widgetType: WidgetType\n active: boolean\n settings: WidgetSettings\n domainRestricted: boolean\n allowedOrigin: string\n}\n","export enum CountryId {\n Andorra = 1,\n UnitedArabEmirates = 2,\n Afghanistan = 3,\n AntiguaAndBarbuda = 4,\n Anguilla = 5,\n Albania = 6,\n Armenia = 7,\n NetherlandsAntilles = 8,\n Angola = 9,\n Antarctica = 10,\n Argentina = 11,\n AmericanSamoa = 12,\n Austria = 13,\n Australia = 14,\n Aruba = 15,\n AlandIslands = 16,\n Azerbaijan = 17,\n BosniaAndHerzegovina = 18,\n Barbados = 19,\n Bangladesh = 20,\n Belgium = 21,\n BurkinaFaso = 22,\n Bulgaria = 23,\n Bahrain = 24,\n Burundi = 25,\n Benin = 26,\n Bermuda = 27,\n BruneiDarussalam = 28,\n Bolivia = 29,\n Brazil = 30,\n Bahamas = 31,\n Bhutan = 32,\n BouvetIsland = 33,\n Botswana = 34,\n Belarus = 35,\n Belize = 36,\n Canada = 37,\n CocosKeelingIslands = 38,\n CongoKinshasa = 39,\n CentralAfricanRepublic = 40,\n CongoBrazzaville = 41,\n Switzerland = 42,\n CoteDIvoire = 43,\n CookIslands = 44,\n Chile = 45,\n Cameroon = 46,\n China = 47,\n Colombia = 48,\n CostaRica = 49,\n Cuba = 50,\n CapeVerde = 51,\n ChristmasIsland = 52,\n Cyprus = 53,\n CzechRepublic = 54,\n Germany = 55,\n Djibouti = 56,\n Denmark = 57,\n Dominica = 58,\n DominicanRepublic = 59,\n Algeria = 60,\n Ecuador = 61,\n Estonia = 62,\n Egypt = 63,\n WesternSahara = 64,\n Eritrea = 65,\n Spain = 66,\n Ethiopia = 67,\n Finland = 68,\n Fiji = 69,\n FalklandIslands = 70,\n Micronesia = 71,\n FaroeIslands = 72,\n France = 73,\n Gabon = 74,\n UnitedKingdom = 75,\n Grenada = 76,\n Georgia = 77,\n FrenchGuiana = 78,\n Guernsey = 79,\n Ghana = 80,\n Gibraltar = 81,\n Greenland = 82,\n Gambia = 83,\n Guinea = 84,\n Guadeloupe = 85,\n EquatorialGuinea = 86,\n Greece = 87,\n SouthGeorgiaAndTheSouthSandwichIslands = 88,\n Guatemala = 89,\n Guam = 90,\n GuineaBissau = 91,\n Guyana = 92,\n HongKong = 93,\n HeardIslandAndMcDonaldIslands = 94,\n Honduras = 95,\n Croatia = 96,\n Haiti = 97,\n Hungary = 98,\n Indonesia = 99,\n Ireland = 100,\n Israel = 101,\n IsleOfMan = 102,\n India = 103,\n BritishIndianOceanTerritory = 104,\n Iraq = 105,\n Iran = 106,\n Iceland = 107,\n Italy = 108,\n Jersey = 109,\n Jamaica = 110,\n Jordan = 111,\n Japan = 112,\n Kenya = 113,\n Kyrgyzstan = 114,\n Cambodia = 115,\n Kiribati = 116,\n Comoros = 117,\n SaintKittsAndNevis = 118,\n NorthKorea = 119,\n SouthKorea = 120,\n Kuwait = 121,\n CaymanIslands = 122,\n Kazakhstan = 123,\n Laos = 124,\n Lebanon = 125,\n SaintLucia = 126,\n Liechtenstein = 127,\n SriLanka = 128,\n Liberia = 129,\n Lesotho = 130,\n Lithuania = 131,\n Luxembourg = 132,\n Latvia = 133,\n LibyanArabJamahiriya = 134,\n Morocco = 135,\n Monaco = 136,\n Moldova = 137,\n Montenegro = 138,\n Madagascar = 139,\n MarshallIslands = 140,\n Macedonia = 141,\n Mali = 142,\n Myanmar = 143,\n Mongolia = 144,\n Macao = 145,\n NorthernMarianaIslands = 146,\n Martinique = 147,\n Mauritania = 148,\n Montserrat = 149,\n Malta = 150,\n Mauritius = 151,\n Maldives = 152,\n Malawi = 153,\n Mexico = 154,\n Malaysia = 155,\n Mozambique = 156,\n Namibia = 157,\n NewCaledonia = 158,\n Niger = 159,\n NorfolkIsland = 160,\n Nigeria = 161,\n Nicaragua = 162,\n Netherlands = 163,\n Norway = 164,\n Nepal = 165,\n Nauru = 166,\n Niue = 167,\n NewZealand = 168,\n Oman = 169,\n Panama = 170,\n Peru = 171,\n FrenchPolynesia = 172,\n PapuaNewGuinea = 173,\n Philippines = 174,\n Pakistan = 175,\n Poland = 176,\n SaintPierreAndMiquelon = 177,\n Pitcairn = 178,\n PuertoRico = 179,\n PalestinianTerritory = 180,\n Portugal = 181,\n Palau = 182,\n Paraguay = 183,\n Qatar = 184,\n Reunion = 185,\n Romania = 186,\n Serbia = 187,\n RussianFederation = 188,\n Rwanda = 189,\n SaudiArabia = 190,\n SolomonIslands = 191,\n Seychelles = 192,\n Sudan = 193,\n Sweden = 194,\n Singapore = 195,\n SaintHelena = 196,\n Slovenia = 197,\n SvalbardAndJanMayen = 198,\n Slovakia = 199,\n SierraLeone = 200,\n SanMarino = 201,\n Senegal = 202,\n Somalia = 203,\n Suriname = 204,\n SaoTomeAndPrincipe = 205,\n ElSalvador = 206,\n SyrianArabRepublic = 207,\n Swaziland = 208,\n TurksAndCaicosIslands = 209,\n Chad = 210,\n FrenchSouthernTerritories = 211,\n Togo = 212,\n Thailand = 213,\n Tajikistan = 214,\n Tokelau = 215,\n TimorLeste = 216,\n Turkmenistan = 217,\n Tunisia = 218,\n Tonga = 219,\n Turkey = 220,\n TrinidadAndTobago = 221,\n Tuvalu = 222,\n Taiwan = 223,\n Tanzania = 224,\n Ukraine = 225,\n Uganda = 226,\n UnitedStatesMinorOutlyingIslands = 227,\n UnitedStates = 228,\n Uruguay = 229,\n Uzbekistan = 230,\n VaticanCityState = 231,\n SaintVincentAndTheGrenadines = 232,\n Venezuela = 233,\n VirginIslandsBritish = 234,\n VirginIslandsUS = 235,\n VietNam = 236,\n Vanuatu = 237,\n WallisAndFutuna = 238,\n Samoa = 239,\n Yemen = 240,\n Mayotte = 241,\n SouthAfrica = 242,\n Zambia = 243,\n Zimbabwe = 244,\n}\n\nexport enum CountryCode {\n Andorra = \"ad\",\n UnitedArabEmirates = \"ae\",\n Afghanistan = \"af\",\n AntiguaAndBarbuda = \"ag\",\n Anguilla = \"ai\",\n Albania = \"al\",\n Armenia = \"am\",\n NetherlandsAntilles = \"an\",\n Angola = \"ao\",\n Antarctica = \"aq\",\n Argentina = \"ar\",\n AmericanSamoa = \"as\",\n Austria = \"at\",\n Australia = \"au\",\n Aruba = \"aw\",\n AlandIslands = \"ax\",\n Azerbaijan = \"az\",\n BosniaAndHerzegovina = \"ba\",\n Barbados = \"bb\",\n Bangladesh = \"bd\",\n Belgium = \"be\",\n BurkinaFaso = \"bf\",\n Bulgaria = \"bg\",\n Bahrain = \"bh\",\n Burundi = \"bi\",\n Benin = \"bj\",\n Bermuda = \"bm\",\n BruneiDarussalam = \"bn\",\n Bolivia = \"bo\",\n Brazil = \"br\",\n Bahamas = \"bs\",\n Bhutan = \"bt\",\n BouvetIsland = \"bv\",\n Botswana = \"bw\",\n Belarus = \"by\",\n Belize = \"bz\",\n Canada = \"ca\",\n CocosKeelingIslands = \"cc\",\n CongoKinshasa = \"cd\",\n CentralAfricanRepublic = \"cf\",\n CongoBrazzaville = \"cg\",\n Switzerland = \"ch\",\n CoteDIvoire = \"ci\",\n CookIslands = \"ck\",\n Chile = \"cl\",\n Cameroon = \"cm\",\n China = \"cn\",\n Colombia = \"co\",\n CostaRica = \"cr\",\n Cuba = \"cu\",\n CapeVerde = \"cv\",\n ChristmasIsland = \"cx\",\n Cyprus = \"cy\",\n CzechRepublic = \"cz\",\n Germany = \"de\",\n Djibouti = \"dj\",\n Denmark = \"dk\",\n Dominica = \"dm\",\n DominicanRepublic = \"do\",\n Algeria = \"dz\",\n Ecuador = \"ec\",\n Estonia = \"ee\",\n Egypt = \"eg\",\n WesternSahara = \"eh\",\n Eritrea = \"er\",\n Spain = \"es\",\n Ethiopia = \"et\",\n Finland = \"fi\",\n Fiji = \"fj\",\n FalklandIslands = \"fk\",\n Micronesia = \"fm\",\n FaroeIslands = \"fo\",\n France = \"fr\",\n Gabon = \"ga\",\n UnitedKingdom = \"gb\",\n Grenada = \"gd\",\n Georgia = \"ge\",\n FrenchGuiana = \"gf\",\n Guernsey = \"gg\",\n Ghana = \"gh\",\n Gibraltar = \"gi\",\n Greenland = \"gl\",\n Gambia = \"gm\",\n Guinea = \"gn\",\n Guadeloupe = \"gp\",\n EquatorialGuinea = \"gq\",\n Greece = \"gr\",\n SouthGeorgiaAndTheSouthSandwichIslands = \"gs\",\n Guatemala = \"gt\",\n Guam = \"gu\",\n GuineaBissau = \"gw\",\n Guyana = \"gy\",\n HongKong = \"hk\",\n HeardIslandAndMcDonaldIslands = \"hm\",\n Honduras = \"hn\",\n Croatia = \"hr\",\n Haiti = \"ht\",\n Hungary = \"hu\",\n Indonesia = \"id\",\n Ireland = \"ie\",\n Israel = \"il\",\n IsleOfMan = \"im\",\n India = \"in\",\n BritishIndianOceanTerritory = \"io\",\n Iraq = \"iq\",\n Iran = \"ir\",\n Iceland = \"is\",\n Italy = \"it\",\n Jersey = \"je\",\n Jamaica = \"jm\",\n Jordan = \"jo\",\n Japan = \"jp\",\n Kenya = \"ke\",\n Kyrgyzstan = \"kg\",\n Cambodia = \"kh\",\n Kiribati = \"ki\",\n Comoros = \"km\",\n SaintKittsAndNevis = \"kn\",\n NorthKorea = \"kp\",\n SouthKorea = \"kr\",\n Kuwait = \"kw\",\n CaymanIslands = \"ky\",\n Kazakhstan = \"kz\",\n Laos = \"la\",\n Lebanon = \"lb\",\n SaintLucia = \"lc\",\n Liechtenstein = \"li\",\n SriLanka = \"lk\",\n Liberia = \"lr\",\n Lesotho = \"ls\",\n Lithuania = \"lt\",\n Luxembourg = \"lu\",\n Latvia = \"lv\",\n LibyanArabJamahiriya = \"ly\",\n Morocco = \"ma\",\n Monaco = \"mc\",\n Moldova = \"md\",\n Montenegro = \"me\",\n Madagascar = \"mg\",\n MarshallIslands = \"mh\",\n Macedonia = \"mk\",\n Mali = \"ml\",\n Myanmar = \"mm\",\n Mongolia = \"mn\",\n Macao = \"mo\",\n NorthernMarianaIslands = \"mp\",\n Martinique = \"mq\",\n Mauritania = \"mr\",\n Montserrat = \"ms\",\n Malta = \"mt\",\n Mauritius = \"mu\",\n Maldives = \"mv\",\n Malawi = \"mw\",\n Mexico = \"mx\",\n Malaysia = \"my\",\n Mozambique = \"mz\",\n Namibia = \"na\",\n NewCaledonia = \"nc\",\n Niger = \"ne\",\n NorfolkIsland = \"nf\",\n Nigeria = \"ng\",\n Nicaragua = \"ni\",\n Netherlands = \"nl\",\n Norway = \"no\",\n Nepal = \"np\",\n Nauru = \"nr\",\n Niue = \"nu\",\n NewZealand = \"nz\",\n Oman = \"om\",\n Panama = \"pa\",\n Peru = \"pe\",\n FrenchPolynesia = \"pf\",\n PapuaNewGuinea = \"pg\",\n Philippines = \"ph\",\n Pakistan = \"pk\",\n Poland = \"pl\",\n SaintPierreAndMiquelon = \"pm\",\n Pitcairn = \"pn\",\n PuertoRico = \"pr\",\n PalestinianTerritory = \"ps\",\n Portugal = \"pt\",\n Palau = \"pw\",\n Paraguay = \"py\",\n Qatar = \"qa\",\n Reunion = \"re\",\n Romania = \"ro\",\n Serbia = \"rs\",\n RussianFederation = \"ru\",\n Rwanda = \"rw\",\n SaudiArabia = \"sa\",\n SolomonIslands = \"sb\",\n Seychelles = \"sc\",\n Sudan = \"sd\",\n Sweden = \"se\",\n Singapore = \"sg\",\n SaintHelena = \"sh\",\n Slovenia = \"si\",\n SvalbardAndJanMayen = \"sj\",\n Slovakia = \"sk\",\n SierraLeone = \"sl\",\n SanMarino = \"sm\",\n Senegal = \"sn\",\n Somalia = \"so\",\n Suriname = \"sr\",\n SaoTomeAndPrincipe = \"st\",\n ElSalvador = \"sv\",\n SyrianArabRepublic = \"sy\",\n Swaziland = \"sz\",\n TurksAndCaicosIslands = \"tc\",\n Chad = \"td\",\n FrenchSouthernTerritories = \"tf\",\n Togo = \"tg\",\n Thailand = \"th\",\n Tajikistan = \"tj\",\n Tokelau = \"tk\",\n TimorLeste = \"tl\",\n Turkmenistan = \"tm\",\n Tunisia = \"tn\",\n Tonga = \"to\",\n Turkey = \"tr\",\n TrinidadAndTobago = \"tt\",\n Tuvalu = \"tv\",\n Taiwan = \"tw\",\n Tanzania = \"tz\",\n Ukraine = \"ua\",\n Uganda = \"ug\",\n UnitedStatesMinorOutlyingIslands = \"um\",\n UnitedStates = \"us\",\n Uruguay = \"uy\",\n Uzbekistan = \"uz\",\n VaticanCityState = \"va\",\n SaintVincentAndTheGrenadines = \"vc\",\n Venezuela = \"ve\",\n VirginIslandsBritish = \"vg\",\n VirginIslandsUS = \"vi\",\n VietNam = \"vn\",\n Vanuatu = \"vu\",\n WallisAndFutuna = \"wf\",\n Samoa = \"ws\",\n Yemen = \"ye\",\n Mayotte = \"yt\",\n SouthAfrica = \"za\",\n Zambia = \"zm\",\n Zimbabwe = \"zw\",\n}\n\nexport enum CameraRegion {\n APAC = \"apac\",\n AU = \"au\",\n EU = \"eu\",\n UK = \"uk\",\n IE = \"ie\",\n US = \"us\",\n}\n","import { AconexIdentifiers, CameraExid, Connector } from \"@evercam/api/types\"\n\nexport enum AutomationProvider {\n Aconex = Connector.Aconex,\n Procore = Connector.Procore,\n Autodesk = Connector.Autodesk,\n Email = \"email\",\n}\n\nexport enum AutomationType {\n Photo = \"photo\",\n Compare = \"compare\",\n GateReport = \"gate_report\",\n Weather = \"weather\",\n}\n\nexport enum AutomationWeatherReportType {\n Forecast = \"forecast\",\n History = \"history\",\n}\nexport enum AutomationExportFormat {\n Pdf = \"pdf\",\n Csv = \"csv\",\n}\n\nexport enum AutomationWeatherDataGranularity {\n Daily = \"daily\",\n Hourly = \"hourly\",\n}\n\nexport type AutomationWeatherConfig = {\n reportType: AutomationWeatherReportType\n exportFormat: AutomationExportFormat\n dataGranularity?: AutomationWeatherDataGranularity\n selectedColumns?: string[]\n forecastDays?: number\n}\n\nexport type AutomationCompareConfig = {\n compareDelay: number\n}\n\nexport type AutomationEmailRecipient = string | { email: string }\nexport type AutomationGateReportConfig = {\n projectExid: string\n vehicleTypes: string[]\n fileType: string\n period: number\n columns: string[]\n}\n\nexport type AutomationEmailProviderConfig = {\n cameraExids?: CameraExid[]\n recipients: string | AutomationEmailRecipient[]\n}\n\nexport type AutomationProcoreProviderConfig = {\n companyId: number\n companyName: string\n projectId: number\n projectName: string\n categoryId: number\n categoryName: string\n}\n\nexport type AutomationAconexProviderConfig = {\n projectId: number\n projectName: string\n} & Partial<Record<AconexIdentifiers, string | number | boolean>>\n\nexport type AutomationAutodeskProviderConfig = {\n hubId: number\n hubName: string\n projectId: number\n projectName: string\n folderId: number\n accFileType: string\n accFolderType: string\n folderName: string\n}\n\nexport type AutomationProviderConfig =\n | AutomationEmailProviderConfig\n | AutomationProcoreProviderConfig\n | AutomationAconexProviderConfig\n | AutomationAutodeskProviderConfig\n\nexport type AutomationOptionsConfig =\n | AutomationCompareConfig\n | AutomationGateReportConfig\n | AutomationWeatherConfig\n | {}\n\nexport type AutomationConfig = AutomationProviderConfig &\n AutomationOptionsConfig\n\nexport type Automation = {\n id?: number\n cameraExids: CameraExid[]\n name: string\n subject?: string\n provider: AutomationProvider\n type: AutomationType\n config: AutomationConfig\n notifyDays: string[]\n notifyTime: string\n timezone: string\n isPaused: boolean\n restrictedCameraExids?: string[]\n}\n\nexport enum AutomationConfigStep {\n Type = \"type\",\n Cameras = \"cameras\",\n Settings = \"settings\",\n Destination = \"destination\",\n}\n\nexport type AutomationProviderOption = {\n labelTranslationKey: string\n descriptionTranslationKey: string\n value: AutomationProvider\n icon: string\n iconSize?: string\n requiresConnection: boolean\n}\n\nexport type AutomationTypeOption = {\n labelTranslationKey: string\n descriptionTranslationKey: string\n label?: string\n description?: string\n value: AutomationType\n icon: string\n iconType?: string\n}\n\nexport type FormattedAutomation = {\n cameraExids?: string\n name: string\n subject: string\n provider: AutomationProvider\n type: AutomationType\n config: Partial<AutomationProviderConfig> & Partial<AutomationOptionsConfig>\n notifyDays: string\n notifyTime: string\n timezone: string\n isPaused: boolean\n}\n","export type ActiveUsersRequestPayload = {\n from?: string\n to?: string\n companyExid?: string\n projectExid?: string\n cameraExid?: string\n}\n\nexport type ActiveUsersResponsePayload = Array<{\n date?: string\n dau?: number\n wau?: number\n mau?: number\n}>\n\nexport enum ActiveUsersMetric {\n DAU = \"dau\",\n WAU = \"wau\",\n MAU = \"mau\",\n}\n\nexport type PosthogUser = {\n id: string\n email: string\n isWeeklyActiveUser: number\n isMonthlyActiveUser: number\n eventsCount: number\n}\n\nexport type PosthogUsersRequestParams = {\n companyExid?: string\n projectExid?: string\n cameraExid?: string\n productsActivityOnly?: boolean\n afterId?: string\n size?: number\n}\n\nexport type PosthogUsersResponse = {\n data: PosthogUser[]\n hasMore: boolean\n size: number\n}\n\nexport type PosthogUserParams = {\n firstname?: string\n lastname?: string\n email: string\n telephone?: string\n country?: string\n isAdmin?: boolean\n persona?: string\n companyExid: string\n companyName: string\n isImpersonationLogin: boolean\n ImpersonatedUserEmail?: string\n ImpersonatedUserFirstname?: string\n impersonatedUserLastname?: string\n}\n","export enum RoleResourceType {\n App = \"app\",\n Camera = \"camera\",\n Project = \"project\",\n}\n\nexport enum RoleAssignmentLogAction {\n Assign = \"assign\",\n Unassign = \"unassign\",\n}\n\nexport type RoleSubRole = {\n resourceId: string\n roleId: number\n roleName?: string\n permissions?: string[]\n}\n\nexport type Role = {\n id: number\n name: string\n description?: string | null\n resource?: string\n resourceType: RoleResourceType\n resourceId?: string | null\n permissions: string[]\n subRoles?: RoleSubRole[]\n isDefault?: boolean\n}\n\nexport type ProjectResourceRole = Role & {\n resourceType: RoleResourceType.Project\n}\nexport type CameraResourceRole = Omit<Role, \"subRoles\"> & {\n resourceType: RoleResourceType.Camera\n}\n\nexport type ProjectRoleRequestPayload = {\n name: string\n permissions: string[]\n subRoles?: RoleSubRole[]\n}\n\nexport type AuthzRoleUser = {\n email: string\n resourceId: string\n}\n\nexport type AuthzUserRolesResponse = {\n roles: Role[]\n}\n\nexport type AuthzScopePermission = {\n id: number\n action: string\n exid: string\n}\n\nexport type AuthzScope = {\n id: number\n name: string\n description: string | null\n permissions: AuthzScopePermission[]\n app: string\n exid: string\n}\n\nexport type AuthzScopeCreatePayload = {\n name: string\n description?: string\n permissions: string[]\n}\n\nexport type AuthzScopeUpdatePayload = Partial<AuthzScopeCreatePayload>\n\nexport function isProjectRole(role: Role): role is ProjectResourceRole {\n return role.resourceType === RoleResourceType.Project\n}\n\nexport function isCameraRole(role: Role): role is CameraResourceRole {\n return role.resourceType === RoleResourceType.Camera\n}\n\nexport type RoleAssignmentUserDetails = {\n browser?: string | null\n device?: string | null\n os?: string | null\n country?: string | null\n countryCode?: string | null\n ip?: string | null\n impersonatedBy?: string | null\n}\n\nexport type RoleAssignmentRowUserDetails = RoleAssignmentUserDetails & {\n via?: string | null\n inviteId?: number | null\n inviteEmail?: string | null\n}\n\nexport type RoleAssignmentLog = {\n id: number\n action: RoleAssignmentLogAction\n assignerId: number | null\n assignerEmail: string | null\n assigneeId: number | null\n assigneeEmail: string\n roleId: number | null\n roleName: string | null\n previousRoleId: number | null\n previousRoleName: string | null\n scope: RoleResourceType\n projectExid: string | null\n cameraExid: string | null\n cameraName: string | null\n projectName: string | null\n ip: string | null\n userDetails: RoleAssignmentRowUserDetails | null\n insertedAt: string\n}\n\nexport type RoleAssignmentResourceRef = {\n exid: string\n name: string | null\n}\n\nexport type RoleAssignmentLogBatch = {\n groupId: string\n batchId: string | null\n batchSize: number\n assigneeId: number | null\n assigneeEmail: string\n actions: RoleAssignmentLogAction[]\n projects: RoleAssignmentResourceRef[]\n ip: string | null\n userDetails: RoleAssignmentUserDetails | null\n insertedAt: string\n children: RoleAssignmentLog[]\n}\n\nexport type RoleAssignmentLogsParams = {\n page?: number\n limit?: number\n sort?: string\n action?: RoleAssignmentLogAction\n roleId?: number\n roleName?: string\n assigneeEmail?: string\n assignerEmail?: string\n scope?: RoleResourceType\n projectExid?: string\n cameraExid?: string\n ip?: string\n from?: string\n to?: string\n}\n","export type RingCompleteLinkingPayload = {\n nonce: string\n time: string\n}\n\n/** The only auto-import status complete-linking returns today. */\nexport const RING_AUTO_IMPORT_QUEUED = \"queued\"\n\nexport type RingAutoImportStatus = typeof RING_AUTO_IMPORT_QUEUED\n\nexport type RingCompleteLinkingResponsePayload = {\n status: string\n /** Absent when the API did not schedule an import. */\n autoImport?: RingAutoImportStatus\n}\n\nexport type RingDevice = {\n deviceId: string\n name: string\n /** Resolved from Ring's `device-status`; null when Ring did not return it. */\n online: boolean | null\n deviceType: string | null\n firmwareVersion: string | null\n /** Always null — Ring's API does not expose device power level. */\n batteryLife: number | null\n location: string | null\n imported: boolean\n cameraExid?: string\n projectExid?: string\n projectName?: string\n}\n\nexport type RingDevicesResponsePayload = {\n devices: RingDevice[]\n}\n\nexport type RingMoveDevicePayload = {\n projectExid: string\n}\n\nexport type RingMoveDeviceResponsePayload = {\n status: string\n cameraExid: string\n projectExid: string\n}\n\nexport type RingLiveViewPayload = {\n sdpOffer: string\n}\n\nexport type RingLiveViewResponse = {\n sdpAnswer: string\n sessionUrl: string\n iceServers: Array<{\n urls: string\n username?: string\n credential?: string\n }>\n}\n\nexport type RingStopLiveViewResponse = {\n status: string\n}\n","import { ForgeView } from \"@evercam/api/types/360\"\nimport { Point2D, Point3D } from \"@evercam/api/types/shared\"\n\nexport enum SiteViewSoftwareType {\n Revit = \"Revit\",\n Navisworks = \"Navisworks\",\n Drone = \"Drone\",\n Synchro = \"Synchro\",\n}\n\nexport enum SiteViewerType {\n ITwin = \"iTwin\",\n Cesium = \"Cesium\",\n Forge = \"Forge\",\n}\n\nexport type SiteViewCameraListItem = {\n projectId: string\n projectName: string\n software: SiteViewSoftwareType\n type: SiteViewerType\n uniqueId: string\n integrationType?: string\n}\n\nexport type ForgeUrn = {\n displayName: string\n urn: string\n isModelHostedByEvercamACC?: boolean\n savedViews?: Record<string, ForgeView>\n}\n\nexport type ForgeAccAlignmentData = {\n bbox: {\n min: Point2D\n max: Point2D\n }\n transform: number[]\n coordinateSystem?: { context?: { type?: string } } | null\n}\n\nexport type TimelineItem = {\n taskNumber: number\n taskID: string\n actualStartDate: string\n actualEndDate: string\n plannedStartDate: string\n plannedEndDate: string\n objectIDs: number[]\n}\n\nexport type ForgeMarkerTransform = {\n default: {\n position: Point3D\n type: string\n }\n}\n\nexport type ForgeMarker = {\n name: string\n cameraExid: string\n transforms: ForgeMarkerTransform\n}\n\nexport type ForgeProjectData = {\n urns?: ForgeUrn[]\n accDrawingsAlignments?: Record<string, ForgeAccAlignmentData>\n timeline?: TimelineItem[]\n markers?: ForgeMarker[]\n}\n\nexport type ItwinModel = {\n name: string\n iTwinId: string\n iModelId: string\n changeSetId?: string\n isIModel: boolean\n height?: number\n cesiumId?: number\n markerDistanceThreshold: number\n}\n\nexport type ItwinProjectData = {\n models: ItwinModel[]\n}\n","import { PaginatedItems, PaginationParams } from \"@evercam/api/types\"\n\nexport enum AiApp {\n GateReport = \"gate_report\",\n Ppe = \"ppe\",\n SiteAnalytics = \"site_analytics\",\n Observations360 = \"observations_360\",\n}\n\nexport enum AiProvider {\n Gemini = \"gemini\",\n OpenAi = \"openai\",\n Anthropic = \"anthropic\",\n}\n\nexport enum AiConfigsPromptDialogMode {\n Create = \"create\",\n Edit = \"edit\",\n View = \"view\",\n Subprompt = \"subprompt\",\n}\n\nexport enum AiConfigsKeyDialogMode {\n Create = \"create\",\n Rotate = \"rotate\",\n Rename = \"rename\",\n}\n\nexport interface AiAppConfig {\n bg: string\n fg: string\n border: string\n icon: string\n}\n\nexport const AI_APP_CONFIGS: Record<AiApp | \"generic\", AiAppConfig> = {\n [AiApp.GateReport]: {\n bg: \"#ecfdf5\",\n fg: \"#047857\",\n border: \"#a7f3d0\",\n icon: \"fa-truck\",\n },\n [AiApp.Ppe]: {\n bg: \"#fff7ed\",\n fg: \"#c2410c\",\n border: \"#fed7aa\",\n icon: \"fa-helmet-safety\",\n },\n [AiApp.SiteAnalytics]: {\n bg: \"#eff6ff\",\n fg: \"#1d4ed8\",\n border: \"#bfdbfe\",\n icon: \"fa-chart-simple\",\n },\n [AiApp.Observations360]: {\n bg: \"#eef2ff\",\n fg: \"#4338ca\",\n border: \"#c7d2fe\",\n icon: \"fa-street-view\",\n },\n generic: {\n bg: \"#f1f5f9\",\n fg: \"#334155\",\n border: \"#cbd5e1\",\n icon: \"fa-cube\",\n },\n}\n\nexport interface AiProviderConfig {\n bg: string\n fg: string\n icon: string\n}\n\nexport const AI_PROVIDER_CONFIGS: Record<AiProvider, AiProviderConfig> = {\n [AiProvider.Gemini]: { bg: \"#dbeafe\", fg: \"#1d4ed8\", icon: \"fa-gem\" },\n [AiProvider.OpenAi]: { bg: \"#dcfce7\", fg: \"#15803d\", icon: \"fa-robot\" },\n [AiProvider.Anthropic]: { bg: \"#fef3c7\", fg: \"#a16207\", icon: \"fa-brain\" },\n}\n\nexport enum AiPromptModel {\n Gemini3Pro = \"gemini-3-pro\",\n Gemini3FlashPreview = \"gemini-3-flash-preview\",\n Gemini25Pro = \"gemini-2.5-pro\",\n Gemini25Flash = \"gemini-2.5-flash\",\n Gemini20Flash = \"gemini-2.0-flash\",\n Gpt5 = \"gpt-5\",\n Gpt5Mini = \"gpt-5-mini\",\n Gpt4o = \"gpt-4o\",\n Gpt4oMini = \"gpt-4o-mini\",\n ClaudeOpus45 = \"claude-opus-4-5\",\n ClaudeSonnet46 = \"claude-sonnet-4-6\",\n ClaudeHaiku45 = \"claude-haiku-4-5\",\n}\n\nexport enum AiPromptType {\n Prompt = \"prompt\",\n Parent = \"parent\",\n Subprompt = \"subprompt\",\n}\n\nexport interface AiPrompt {\n id: number\n title: string | null\n purpose: string | null\n app: string | null\n model: string | null\n prompt: string\n outputSchema: Record<string, unknown> | null\n createdBy: string\n createdAt: string\n updatedAt: string\n promptType: AiPromptType\n parentId: number | null\n subpromptCount: number\n}\n\nexport interface AiPromptCreatePayload {\n title?: string | null\n purpose: string\n app: string\n model?: string | null\n prompt: string\n outputSchema?: Record<string, unknown> | null\n promptType?: AiPromptType.Prompt | AiPromptType.Parent\n}\n\nexport interface AiPromptUpdatePayload {\n title?: string | null\n purpose?: string\n app?: string\n model?: string | null\n prompt?: string\n outputSchema?: Record<string, unknown> | null\n}\n\nexport type AiPromptQueryParams = PaginationParams & {\n app?: string\n purpose?: string\n model?: string\n search?: string\n createdBy?: string\n promptType?: AiPromptType\n includeSubprompts?: boolean\n}\n\nexport interface AiSubpromptCreatePayload {\n title?: string | null\n purpose: string\n model?: string | null\n prompt: string\n outputSchema?: Record<string, unknown> | null\n}\n\nexport type AiPromptListResponse = PaginatedItems<AiPrompt>\n\nexport interface AiPromptCreateResponse {\n created: boolean\n data: AiPrompt\n message: string\n}\n\nexport interface AiPromptUpdateResponse {\n updated: boolean\n id: number | string\n message: string\n}\n\nexport interface AiPromptDeleteResponse {\n deleted: boolean\n count: number\n message: string\n}\n\nexport interface AiApiKey {\n id: number\n projectExid: string\n provider: string\n name: string\n purpose: string\n enabled: boolean\n autoGenerated: boolean\n firstUsedAt: string | null\n lastUsedAt: string | null\n insertedAt: string\n updatedAt: string\n}\n\nexport interface AiApiKeyCreatePayload {\n projectExid: string\n provider: string\n name?: string\n purpose?: string\n apiKey?: string\n enabled?: boolean\n}\n\nexport interface AiApiKeyUpdatePayload {\n name?: string\n enabled?: boolean\n apiKey?: string\n}\n\nexport type AiApiKeyQueryParams = {\n projectExid?: string\n provider?: string\n purpose?: string\n enabled?: boolean\n}\n\nexport interface AiApiKeyCreateResponse {\n created: boolean\n data: AiApiKey\n message: string\n}\n\nexport interface AiApiKeyUpdateResponse {\n updated: boolean\n id: number | string\n message: string\n}\n\nexport interface AiApiKeyDeleteResponse {\n deleted: boolean\n count: number\n message: string\n}\n\nexport enum AiObservationFeasibilityStatus {\n Prod = \"prod\",\n Beta = \"beta\",\n Parked = \"parked\",\n}\n\nexport enum AiObservationTimeDetection {\n PerSecond = \"per_second\",\n PerMinute = \"per_minute\",\n Hourly = \"hourly\",\n Daily = \"daily\",\n}\n\nexport interface AiObservationFeasibilityConfig {\n bg: string\n fg: string\n border: string\n label: string\n}\n\nexport const AI_OBSERVATION_FEASIBILITY_CONFIGS: Record<\n AiObservationFeasibilityStatus,\n AiObservationFeasibilityConfig\n> = {\n [AiObservationFeasibilityStatus.Prod]: {\n bg: \"#ecfdf5\",\n fg: \"#047857\",\n border: \"#a7f3d0\",\n label: \"Prod\",\n },\n [AiObservationFeasibilityStatus.Beta]: {\n bg: \"#fffbeb\",\n fg: \"#b45309\",\n border: \"#fde68a\",\n label: \"Beta\",\n },\n [AiObservationFeasibilityStatus.Parked]: {\n bg: \"#f1f5f9\",\n fg: \"#475569\",\n border: \"#cbd5e1\",\n label: \"Parked\",\n },\n}\n\nexport interface AiObservationType {\n id: number\n observationCode: string\n name: string\n description: string | null\n type: string\n rules: Record<string, unknown> | null\n timeDetection: string | null\n every: number | null\n severity: number | null\n feasibilityStatus: AiObservationFeasibilityStatus\n promptId: number | null\n promptName: string | null\n insertedAt: string\n updatedAt: string\n}\n\nexport interface AiObservationTypeCreatePayload {\n observationCode: string\n name: string\n description?: string | null\n type: string\n rules?: Record<string, unknown> | null\n timeDetection?: string | null\n every?: number | null\n severity?: number | null\n feasibilityStatus: AiObservationFeasibilityStatus\n promptId?: number | null\n}\n\nexport type AiObservationTypeUpdatePayload = Partial<\n Omit<AiObservationTypeCreatePayload, \"observationCode\">\n>\n\nexport type AiObservationTypeQueryParams = {\n search?: string\n feasibilityStatus?: string\n sourceType?: string\n type?: string\n page?: number\n limit?: number\n}\n\nexport interface AiObservationTypeListResponse {\n items: AiObservationType[]\n total: number\n page: number\n limit: number\n from: number\n to: number\n}\n\nexport interface AiObservationTypeCreateResponse {\n created: boolean\n data: AiObservationType\n message: string\n}\n\nexport interface AiObservationTypeUpdateResponse {\n updated: boolean\n id: number | string\n message: string\n}\n\nexport interface AiObservationTypeDeleteResponse {\n deleted: boolean\n count: number\n message: string\n}\n","import {\n CameraExid,\n DateType,\n PaginationParams,\n ProjectExid,\n} from \"@evercam/api/types\"\n\nexport enum VehicleClassifierSource {\n Local = \"local\",\n Api = \"api\",\n}\n\nexport type GateReportCoolifyStatus = {\n appUuid: string | null\n name: string | null\n serverUuid: string | null\n serverName: string | null\n appUrl: string | null\n status: string | null\n isRunning: boolean\n imageTag?: string | null\n fqdn: string | null\n updatedAt: string | null\n}\n\nexport type GateReportProjectMeta = {\n exid: ProjectExid\n name: string | null\n timezone: string | null\n featureFlags: string[] | null\n}\n\nexport type GateReportCameraMeta = {\n exid: CameraExid\n name: string | null\n status: string | null\n kitSerial: string | null\n kitAlarms: string[] | Record<string, unknown> | null\n}\n\nexport type GateReportManagedApp = {\n id: number\n projectExid: ProjectExid\n anprCameraExid: CameraExid\n contextCameraExid: CameraExid | null\n coolifyAppId: string | null\n\n startDate: DateType | null\n endDate: DateType | null\n startHour: number\n endHour: number\n\n enabled: boolean\n enableEnrichments: boolean\n enableGemini: boolean\n geminiStartHour: number\n geminiEndHour: number\n\n reviewModel: string\n enrichmentModel: string\n reviewerPromptSlug: string | null\n\n geminiTimeoutSeconds: number\n geminiMaxAttempts: number\n\n vehicleClassifierSource: VehicleClassifierSource\n\n snapshotDelaySeconds: number\n snapshotRequestTimeout: number\n\n plateClassifierThreshold: number\n plateClassifierHighConfidence: number\n\n maxPriorEvents: number\n recordsFetchInterval: number\n priorRecentLimit: number\n priorSimilarLimit: number\n\n insertedAt: DateType\n updatedAt: DateType\n\n coolify: GateReportCoolifyStatus | null\n project: GateReportProjectMeta | null\n anprCamera: GateReportCameraMeta | null\n contextCamera: GateReportCameraMeta | null\n\n anprHasRoi: boolean\n contextHasRoi: boolean\n\n lastProcessedEventAt: DateType | null\n lastUnprocessedEventAt: DateType | null\n}\n\nexport type GateReportAppEvents = {\n anprCameraExid: CameraExid\n lastProcessedEventAt: DateType | null\n lastUnprocessedEventAt: DateType | null\n}\n\nexport type AppConfigFormValue = {\n contextCameraExid: string | null\n startDate: DateType | null\n endDate: DateType | null\n startHour: number\n endHour: number\n enabled: boolean\n enableEnrichments: boolean\n enableGemini: boolean\n geminiStartHour: number\n geminiEndHour: number\n reviewModel: string\n enrichmentModel: string\n reviewerPromptSlug: string | null\n geminiTimeoutSeconds: number\n geminiMaxAttempts: number\n vehicleClassifierSource: VehicleClassifierSource\n snapshotDelaySeconds: number\n snapshotRequestTimeout: number\n plateClassifierThreshold: number\n plateClassifierHighConfidence: number\n recordsFetchInterval: number\n priorRecentLimit: number\n priorSimilarLimit: number\n}\n\nexport type CreateGateReportAppPayload = {\n projectExid: ProjectExid\n anprCameraExid: CameraExid\n contextCameraExid?: CameraExid | null\n\n coolifyServerUuid: string\n imageTag?: string\n geminiApiKey?: string | null\n\n startDate?: DateType | null\n endDate?: DateType | null\n startHour?: number\n endHour?: number\n\n enabled?: boolean\n enableEnrichments?: boolean\n enableGemini?: boolean\n geminiStartHour?: number\n geminiEndHour?: number\n\n reviewModel?: string\n enrichmentModel?: string\n reviewerPromptSlug?: string | null\n\n geminiTimeoutSeconds?: number\n geminiMaxAttempts?: number\n\n vehicleClassifierSource?: VehicleClassifierSource\n\n snapshotDelaySeconds?: number\n snapshotRequestTimeout?: number\n\n plateClassifierThreshold?: number\n plateClassifierHighConfidence?: number\n\n maxPriorEvents?: number\n recordsFetchInterval?: number\n priorRecentLimit?: number\n priorSimilarLimit?: number\n}\n\nexport type UpdateGateReportAppPayload = Partial<\n Omit<\n CreateGateReportAppPayload,\n \"projectExid\" | \"anprCameraExid\" | \"coolifyServerUuid\" | \"geminiApiKey\"\n >\n>\n\nexport type GateReportAppsQueryParams = PaginationParams & {\n projectExid?: ProjectExid\n includeStatus?: boolean\n}\n\nexport type CoolifyProjectOption = {\n uuid: string\n name: string\n description: string | null\n}\n\nexport type CoolifyServerOption = {\n uuid: string\n name: string\n isReachable: boolean\n isUsable: boolean\n}\n\nexport enum AppRuntimeState {\n Running = \"running\",\n Stopped = \"stopped\",\n Restarting = \"restarting\",\n}\n\nexport type AppActionResponse = {\n success: boolean\n message: string | null\n appUuid: string | null\n state: AppRuntimeState | null\n}\n\nexport type APIEnvelope<T> = {\n success: boolean\n data: T | null\n message: string\n}\n\nexport type CreateGateReportAppResponse = {\n created: boolean\n id: number | null\n data: GateReportManagedApp | null\n count: number | null\n message: string\n}\n","/**\n * The Evercam Workflows engine (evercam-agent-kit), as the admin app sees it.\n *\n * These mirror `evercam_workflows/api/schemas.py`. The engine speaks camelCase over\n * the wire, so the admin client reads it with `preserveCasing: true` and these are\n * the shapes as received. Named `Chat*`, after the product; the Vue 3 agent app's\n * own workflow types live in `packages/agent`, unreachable here.\n */\n\n/** What kind of conversation this is. Chat only ever opens `chat`. */\nexport enum ChatMode {\n Workflow = \"workflow\",\n Chat = \"chat\",\n}\n\n/** Whose conversations a list covers. Only an admin is ever given `all`. */\nexport enum ChatScope {\n Mine = \"mine\",\n Account = \"account\",\n All = \"all\",\n}\n\n/** A flat token tally, as the engine reports it. */\nexport type ChatUsage = {\n inputTokens?: number\n outputTokens?: number\n cacheCreationInputTokens?: number\n cacheReadInputTokens?: number\n}\n\n/** One recorded tool step in a turn's trace, compacted by the engine. */\nexport type ChatTraceStep = {\n step?: number | null\n tool?: string | null\n result?: string | null\n durationMs?: number | null\n usage?: ChatUsage | null\n args?: unknown\n}\n\n/** One stored turn, as the engine returns it inside a conversation. */\nexport type ChatTurn = {\n id: string\n userText?: string | null\n assistantText?: string | null\n thinkingSummary?: string | null\n artifact?: unknown\n /** The agent's tool steps for this answer. Absent on turns stored before traces. */\n trace?: ChatTraceStep[] | null\n /** This turn's own token usage. */\n usage?: ChatUsage | null\n runId?: string | null\n at?: string | null\n}\n\n/** A conversation in full, with its transcript, cost ledger and per-turn traces. */\nexport type ChatSession = {\n id: string\n environment: string\n mode: string\n title: string | null\n projectExid: string | null\n projectName: string | null\n cameraExids: string[] | null\n turns: ChatTurn[]\n savedWorkflowId: string | null\n createdBy: string | null\n createdAt: string\n updatedAt: string\n usage?: ChatUsage | null\n usageByModel?: Record<string, ChatUsage> | null\n model?: string | null\n /** Money as a string, or `null` (never `0`) when the conversation is unpriced. */\n costUsd?: string | null\n priceBasis?: Record<string, unknown> | null\n}\n\n/** One conversation as a list row — metadata and cost, without the transcript. */\nexport type ChatSummary = {\n id: string\n environment: string\n mode: string\n title: string | null\n projectExid: string | null\n projectName: string | null\n cameraExids: string[] | null\n createdBy: string | null\n createdAt: string\n updatedAt: string\n turnCount: number\n usage?: ChatUsage | null\n model?: string | null\n costUsd?: string | null\n}\n\n/** A page of conversations for the admin viewer. */\nexport type ChatListPage = {\n chats: ChatSummary[]\n total: number\n /** The scope the engine actually applied. */\n scope: ChatScope\n}\n\n/** Query params the admin conversations list accepts. */\nexport type ChatListParams = {\n scope?: ChatScope\n mode?: ChatMode\n projectExid?: string\n createdBy?: string\n q?: string\n from?: string\n to?: string\n sort?: string\n direction?: \"asc\" | \"desc\"\n offset?: number\n limit?: number\n}\n","import type { VisionProvider } from \"@evercam/api/types\"\n\nexport enum ObservationEventStatus {\n Detected = \"detected\",\n Approved = \"approved\",\n Disapproved = \"disapproved\",\n Unsure = \"unsure\",\n}\n\nexport interface ObservationEventStatusConfig {\n bg: string\n fg: string\n border: string\n label: string\n}\n\nexport const OBSERVATION_EVENT_STATUS_CONFIGS: Record<\n ObservationEventStatus,\n ObservationEventStatusConfig\n> = {\n [ObservationEventStatus.Detected]: {\n bg: \"#f1f5f9\",\n fg: \"#334155\",\n border: \"#cbd5e1\",\n label: \"Detected\",\n },\n [ObservationEventStatus.Approved]: {\n bg: \"#ecfdf5\",\n fg: \"#047857\",\n border: \"#a7f3d0\",\n label: \"Approved\",\n },\n [ObservationEventStatus.Disapproved]: {\n bg: \"#fef2f2\",\n fg: \"#b91c1c\",\n border: \"#fecaca\",\n label: \"Disapproved\",\n },\n [ObservationEventStatus.Unsure]: {\n bg: \"#fffbeb\",\n fg: \"#b45309\",\n border: \"#fde68a\",\n label: \"Unsure\",\n },\n}\n\nexport interface SiteAnalyticsObservationEvent {\n id: number\n sourceType?: ObservationSourceType\n sessionId?: string | null\n markerId?: string | null\n drawingId?: string | null\n drawingName?: string | null\n walkName?: string | null\n sightings?: Array<Record<string, unknown>> | null\n observationTypeId: number\n observationName: string | null\n observationCode: string | null\n cameraExid: string\n projectExid: string | null\n startTime: string\n endTime: string | null\n confidence: number | null\n status: ObservationEventStatus\n aiEvidence: string | null\n bbox: number[] | null\n model: string | null\n promptId: number | null\n observationMetadata: Record<string, unknown> | null\n trigger: ObservationEventTrigger | string\n reviewedBy: string | null\n reviewedAt: string | null\n insertedAt: string\n}\n\nexport type ObservationEventQueryParams = {\n cameraExid?: string\n projectExid?: string\n observationTypeIds?: string\n status?: ObservationEventStatus | string\n sourceType?: ObservationSourceType | string\n modelName?: string\n sortBy?: string\n sortDir?: \"asc\" | \"desc\"\n page?: number\n limit?: number\n}\n\nexport interface ObservationModelOption {\n modelName: string\n total: number\n}\n\nexport interface ObservationEventListResponse {\n items: SiteAnalyticsObservationEvent[]\n total: number\n page: number\n limit: number\n from: number\n to: number\n}\n\nexport type ObservationEventVerdict =\n | ObservationEventStatus.Approved\n | ObservationEventStatus.Disapproved\n | ObservationEventStatus.Unsure\n\nexport interface ObservationEventReviewPayload {\n status: ObservationEventVerdict\n}\n\nexport interface ObservationEventReviewResponse {\n updated: boolean\n id: number | string\n message: string\n}\n\nexport enum ObservationSourceType {\n Camera = \"camera\",\n Walk360 = \"walk360\",\n Drone = \"drone\",\n}\n\nexport enum ObservationEventTrigger {\n CameraDetection = \"camera_detection\",\n Walk = \"walk\",\n}\n\nexport enum Walk360ProcessedSessionStatus {\n Done = \"done\",\n Processing = \"processing\",\n Retryable = \"retryable\",\n Error = \"error\",\n}\n\nexport interface Walk360Activity {\n observationTypeId: number\n}\n\nexport interface Walk360WorkerInfo {\n coolifyAppId?: string | null\n workerStatus?: string | null\n workerIsRunning?: boolean\n appUrl?: string | null\n visionProvider?: VisionProvider\n}\n\nexport interface Walk360Config extends Walk360WorkerInfo {\n projectExid: string\n enabled: boolean\n startDate: string | null\n activities: Walk360Activity[]\n configured: boolean\n maxParallelWalks?: number\n}\n\nexport interface Walk360ConfigSummary extends Walk360WorkerInfo {\n projectExid: string\n projectName?: string | null\n enabled: boolean\n startDate: string | null\n activities: Walk360Activity[]\n maxParallelWalks: number\n walksDone: number\n walksProcessing: number\n walksRetryable: number\n eventsCreated: number\n lastProcessedAt: string | null\n updatedAt: string | null\n}\n\nexport interface Walk360WorkerAction {\n projectExid: string\n appUuid: string | null\n message: string\n state: string\n}\n\nexport interface Walk360ProcessedSession {\n id: number\n projectExid: string\n sourceType: ObservationSourceType\n sessionId: string\n status: Walk360ProcessedSessionStatus\n markersTotal: number | null\n markersProcessed: number | null\n eventsCreated: number | null\n error: string | null\n startedAt: string\n finishedAt: string | null\n}\n","import humps from \"humps\"\n\nexport type Falsy = \"\" | null | undefined | false\n\nexport interface QueryParams {\n [k: string]: string | number | boolean | string[] | Falsy\n}\n\nexport const toQueryString = <T extends Record<string, unknown>>(\n paramsObject: T | QueryParams = {},\n { forceSnakeCase = true, forceArrayBrackets = false } = {}\n) => {\n if (Object.keys(paramsObject).length === 0) {\n return\n }\n let params = { ...paramsObject }\n if (forceSnakeCase) {\n params = humps.decamelizeKeys(paramsObject) as QueryParams\n }\n\n return Object.entries(params).reduce((acc, [param, value], index) => {\n let encodedParam = \"\"\n if (\n [\"\", null, undefined]?.includes(value as string | null | undefined) ||\n (Array.isArray(value) && value.length === 0)\n ) {\n return acc\n } else if (value && typeof value === \"object\") {\n encodedParam = Object.entries(value).reduce((_acc, [key, v], i) => {\n let paramName = param\n if (isNaN(Number.parseInt(key))) {\n paramName = `${param}[${key}]`\n } else if (Array.isArray(value) && forceArrayBrackets) {\n paramName = `${param}[]`\n }\n\n return `${_acc}${i > 0 ? \"&\" : \"\"}${paramName}=${encodeURIComponent(v)}`\n }, \"\")\n } else {\n encodedParam = `${param}=${encodeURIComponent(\n value as string | number | boolean\n )}`\n }\n\n return `${acc}${index > 0 ? \"&\" : \"\"}${encodedParam}`\n }, \"\")\n}\n\nexport function queryStringToObject(queryString = \"\"): QueryParams {\n const entries = [\n ...new URLSearchParams(\n queryString.indexOf(\"#\") > -1 ? queryString.split(\"#\")[0] : queryString\n ).entries(),\n ].filter(([, value]) => value)\n\n return entries.reduce<QueryParams>((acc, [key, value]) => {\n const isSingleParam =\n (queryString.match(new RegExp(`(?:^|[?&])${key}=`, \"g\")) || []).length <=\n 1\n if (isSingleParam) {\n return { ...acc, [key]: value }\n }\n\n if (acc[key]) {\n return {\n ...acc,\n [key]: [...(acc[key] as string[]), value],\n }\n }\n\n return { ...acc, [key]: [value] }\n }, {})\n}\n\nconst MEDIA_API_PREVIEW_URL_REGEX =\n /^https?:\\/\\/([^./]+)\\.staging\\.media\\.evercam\\.io(?::\\d+)?(?:\\/|$)/\n\nexport function getMediaApiPreviewName(url?: string | null): string | null {\n return url?.match(MEDIA_API_PREVIEW_URL_REGEX)?.[1] || null\n}\n","import { ErrorType } from \"@evercam/api/types\"\n\nconst createErrorClass = (errorName: string) => {\n return class extends Error {\n constructor(error: unknown) {\n const e =\n error instanceof Error\n ? error\n : new Error(typeof error === \"string\" ? error : \"unknown\")\n super(e.message)\n this.name = errorName\n this.message = e.message\n this.stack = (e.stack || \"\").replace(/^Error: /, `${errorName}: `)\n }\n }\n}\n\nexport const BadRequestError = createErrorClass(ErrorType.BadRequestError)\nexport const NotFoundError = createErrorClass(ErrorType.NotFoundError)\nexport const UnauthorizedError = createErrorClass(ErrorType.UnauthorizedError)\nexport const GatewayTimeoutError = createErrorClass(\n ErrorType.GatewayTimeoutError\n)\nexport const BadGatewayError = createErrorClass(ErrorType.BadGatewayError)\nexport const ForbiddenError = createErrorClass(ErrorType.ForbiddenError)\nexport const HlsError = createErrorClass(ErrorType.HlsError)\nexport const SnapshotError = createErrorClass(ErrorType.SnapshotError)\nexport const ConflictError = createErrorClass(ErrorType.ConflictError)\nexport const InternalServerError = createErrorClass(\n ErrorType.InternalServerError\n)\n","import humps from \"humps\"\nimport Axios, {\n AxiosDefaults,\n type AxiosError,\n type AxiosRequestConfig,\n type AxiosResponse,\n} from \"axios\"\nimport { ErrorCode, type AxiosEnvironment } from \"@evercam/api/types\"\nimport { getMediaApiPreviewName } from \"@evercam/api/utils\"\nimport {\n NotFoundError,\n BadRequestError,\n UnauthorizedError,\n BadGatewayError,\n GatewayTimeoutError,\n ForbiddenError,\n InternalServerError,\n ConflictError,\n} from \"./customErrors\"\nimport axios from \"axios\"\n\nconst maxRequestsPerSecond = 10\nconst rateLimitWindow = 1000\n// Send times of the requests still inside the window, oldest first.\nconst recentRequestTimes: number[] = []\nconst requestsRateLimit = async () => {\n for (;;) {\n const now = Date.now()\n while (\n recentRequestTimes.length &&\n now - recentRequestTimes[0] >= rateLimitWindow\n ) {\n recentRequestTimes.shift()\n }\n if (recentRequestTimes.length < maxRequestsPerSecond) {\n recentRequestTimes.push(now)\n\n return\n }\n // Wait only until the oldest send leaves the window.\n const delay = rateLimitWindow - (now - recentRequestTimes[0])\n await new Promise((resolve) => setTimeout(resolve, delay))\n }\n}\n\nexport const onRequest = async (\n request: AxiosRequestConfig,\n axiosEnv: AxiosEnvironment\n) => {\n if (request?.raw) {\n return request\n }\n\n if (request?.timing) {\n request._metadata = { startTime: performance.now() }\n }\n await requestsRateLimit()\n ensureBaseUrl(request, axiosEnv)\n\n if (request?.skipAuth) {\n removeAuthorizationHeader(request)\n } else {\n addAuthTokenHeader(request, axiosEnv)\n }\n\n addMediaApiPreviewHeader(request, axiosEnv)\n\n if (\n axiosEnv.app === \"dashboard\" &&\n typeof document.referrer === \"string\" &&\n document.referrer.length !== 0 &&\n request?.headers?.common &&\n !(\n axiosEnv.forgeTokenServerUrl &&\n (request.url || \"\").startsWith(axiosEnv.forgeTokenServerUrl as string)\n )\n ) {\n const commonHeaders = request.headers.common as unknown as {\n \"iframe-origin\"?: string\n }\n commonHeaders[\"iframe-origin\"] = new URL(document.referrer).origin\n }\n\n if (\n axiosEnv.evercamLabsUrl &&\n (request.url || \"\").startsWith(axiosEnv.evercamLabsUrl as string) &&\n request?.headers?.common\n ) {\n const envHeaders = request.headers.common as unknown as {\n \"x-environment\"?: string\n }\n envHeaders[\"x-environment\"] = axiosEnv.isLabsStaging\n ? \"staging\"\n : \"production\"\n }\n\n if (!request.preserveCasing) {\n transformCamelCaseToSnakeCase(request)\n }\n\n return request\n}\n\nexport const onResponse = (response: AxiosResponse) => {\n if (response?.config?.raw) {\n return response\n }\n\n if (!(\"data\" in response)) {\n return response\n } else if (response.data instanceof Blob) {\n return response.data\n }\n\n const data = response?.config?.preserveCasing\n ? response.data\n : humps.camelizeKeys(response.data)\n\n if (response?.config?.timing && response?.config?._metadata?.startTime) {\n const duration = performance.now() - response.config._metadata.startTime\n\n return {\n ...response,\n data: data,\n duration,\n }\n }\n\n return data\n}\n\nexport const onError = async (\n error: AxiosError,\n axiosEnv: AxiosEnvironment\n) => {\n if (error?.config?.timing && error?.config?._metadata?.startTime) {\n const duration = performance.now() - error.config._metadata.startTime\n\n return { error, duration }\n }\n const statusCode = error.response ? error.response.status : null\n const method = (error.config?.method || \"\").toUpperCase()\n const url = error.config?.url\n // @ts-expect-error - AxiosError has no response property\n const backendErrorCode = error?.response?.data?.code || \"\"\n\n let customError = {}\n let customMessage = error.message\n\n if (url && method && statusCode) {\n customMessage =\n `${method} ${url} (${statusCode}) ${backendErrorCode}`.trim()\n }\n switch (statusCode) {\n case ErrorCode.BadRequestError:\n customError = new BadRequestError(new Error(customMessage))\n break\n case ErrorCode.UnauthorizedError:\n customError = new UnauthorizedError(new Error(customMessage))\n break\n case ErrorCode.ForbiddenError:\n customError = new ForbiddenError(new Error(customMessage))\n break\n case ErrorCode.NotFoundError:\n customError = new NotFoundError(new Error(customMessage))\n break\n case ErrorCode.ConflictError:\n customError = new ConflictError(new Error(customMessage))\n break\n case ErrorCode.InternalServerError:\n customError = new InternalServerError(new Error(customMessage))\n break\n case ErrorCode.BadGatewayError:\n customError = new BadGatewayError(new Error(customMessage))\n break\n case ErrorCode.GatewayTimeoutError:\n customError = new GatewayTimeoutError(new Error(customMessage))\n break\n case null: // null case\n case 0: // 0 case occurred when user has no internet connection\n customError = new Error(\n \"A network error occurred. This could be a CORS issue, a cancel request or a dropped internet connection.\"\n )\n break\n }\n const isCancelError = Axios.isCancel(error)\n\n if (isCancelError || statusCode === ErrorCode.NotFoundError) {\n return Promise.reject(customError)\n }\n\n console.warn(\"[@evercam/api/axios.ts]: Caught error:\", error)\n\n const breadcrumbLogger = axiosEnv.errorLogger\n if (url && breadcrumbLogger) {\n breadcrumbLogger({\n // @ts-expect-error axios issue\n category: \"axios.info\",\n data: {\n url: `Error in URL: ${url}`,\n status: statusCode,\n },\n })\n }\n\n return Promise.reject(customError)\n}\n\nexport const ensureCommonHeaders = (\n target: AxiosDefaults | AxiosRequestConfig\n) => {\n if (!target.headers) {\n // @ts-ignore\n target.headers = {}\n }\n if (!target.headers.common) {\n target.headers.common = {}\n }\n}\n\nfunction addAuthTokenHeader(\n request: AxiosRequestConfig,\n axiosEnv: AxiosEnvironment\n) {\n // Add auth token header\n const JwtToken = axiosEnv?.getAuthToken?.()\n if (!JwtToken) {\n return\n }\n ensureCommonHeaders(request)\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore (See https://github.com/axios/axios/issues/4193 )\n request.headers.common.Authorization = `Bearer ${JwtToken}`\n}\n\nfunction addMediaApiPreviewHeader(\n request: AxiosRequestConfig,\n axiosEnv: AxiosEnvironment\n) {\n const preview = getMediaApiPreviewName(axiosEnv?.baseUrl)\n if (!preview || !request.url) {\n return\n }\n\n // Filter after splitting: a trailing \";\" yields an empty entry, and\n // startsWith(\"\") would match every host.\n const ingestUrls = [\n axiosEnv.ingest360Api,\n axiosEnv.ingestDroneApi,\n axiosEnv.ingestGpuApiUrl,\n ]\n .flatMap((url) => (url || \"\").split(\";\"))\n .filter((url) => !!url)\n\n if (!ingestUrls.some((url) => request.url?.startsWith(url))) {\n return\n }\n\n ensureCommonHeaders(request)\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore (See https://github.com/axios/axios/issues/4193 )\n request.headers.common[\"X-Media-Api-Preview\"] = preview\n}\n\nfunction ensureBaseUrl(\n request: AxiosRequestConfig,\n axiosEnv: AxiosEnvironment\n) {\n // Set baseURL if not already set\n if (!request.baseURL) {\n request.baseURL = axiosEnv?.baseUrl as string\n }\n}\n\nfunction transformCamelCaseToSnakeCase(\n request: AxiosRequestConfig<Record<string, any>>\n) {\n let paramsIgnoredCasing = {}\n let { data, params } = request\n\n if (\n data &&\n !(\n data instanceof Blob ||\n data instanceof FormData ||\n typeof data === \"string\"\n )\n ) {\n // Ignore casing transformation for some params when prompted using the `ignoreCasingFromParams` prop\n if (data?.ignoreCasingFromParams) {\n paramsIgnoredCasing =\n data.ignoreCasingFromParams.reduce(\n (acc: Record<string, any>, item: any) => ({\n ...acc,\n [item]: data![item],\n }),\n {}\n ) || {}\n delete data.ignoreCasingFromParams\n }\n if (Array.isArray(data)) {\n data = humps.decamelizeKeys(data)\n } else {\n data = { ...humps.decamelizeKeys(data), ...paramsIgnoredCasing }\n }\n }\n\n // Apply camelCase -> snake_cake on the request payload for FormData of instance of data\n if (data && data instanceof FormData) {\n let formData = new FormData()\n // @ts-ignore\n for (const [key, value] of data.entries()) {\n formData.append(humps.decamelize(key), value)\n }\n data = formData\n }\n\n // Apply camelCase -> snake_cake on the request query params\n if (params && !(params instanceof Blob)) {\n params = humps.decamelizeKeys(params)\n }\n\n request.data = data\n request.params = params\n}\n\nexport const OnRequestExpiredTokenInterceptor = async (\n request: AxiosRequestConfig,\n isTokenExpired: () => boolean,\n handler: () => Promise<void>\n) => {\n if (isTokenExpired()) {\n await handler()\n throw new axios.Cancel(\"Request canceled due to expired token\")\n }\n\n return request\n}\n\nfunction removeAuthorizationHeader(request: AxiosRequestConfig) {\n if (!request.headers) {\n return\n }\n\n const h: any = request.headers\n delete h.Authorization\n delete h.authorization\n\n if (h.common) {\n delete h.common.Authorization\n delete h.common.authorization\n }\n}\n","function promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n // @ts-ignore - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-ignore - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\nfunction createStore(dbName, storeName) {\n let dbp;\n const getDB = () => {\n if (dbp)\n return dbp;\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n dbp = promisifyRequest(request);\n dbp.then((db) => {\n // It seems like Safari sometimes likes to just close the connection.\n // It's supposed to fire this event when that happens. Let's hope it does!\n db.onclose = () => (dbp = undefined);\n }, () => {\n dbp = undefined;\n });\n return dbp;\n };\n return (txMode, callback) => getDB().then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName)));\n}\nlet defaultGetStoreFunc;\nfunction defaultGetStore() {\n if (!defaultGetStoreFunc) {\n defaultGetStoreFunc = createStore('keyval-store', 'keyval');\n }\n return defaultGetStoreFunc;\n}\n/**\n * Get a value by its key.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction get(key, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => promisifyRequest(store.get(key)));\n}\n/**\n * Set a value with a key.\n *\n * @param key\n * @param value\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction set(key, value, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.put(value, key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Set multiple values at once. This is faster than calling set() multiple times.\n * It's also atomic – if one of the pairs can't be added, none will be added.\n *\n * @param entries Array of entries, where each entry is an array of `[key, value]`.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction setMany(entries, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n entries.forEach((entry) => store.put(entry[1], entry[0]));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Get multiple values by their keys\n *\n * @param keys\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction getMany(keys, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => Promise.all(keys.map((key) => promisifyRequest(store.get(key)))));\n}\n/**\n * Update a value. This lets you see the old value and update it as an atomic operation.\n *\n * @param key\n * @param updater A callback that takes the old value and returns a new value.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction update(key, updater, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => \n // Need to create the promise manually.\n // If I try to chain promises, the transaction closes in browsers\n // that use a promise polyfill (IE10/11).\n new Promise((resolve, reject) => {\n const req = store.get(key);\n req.onsuccess = function () {\n try {\n store.put(updater(req.result), key);\n resolve(promisifyRequest(store.transaction));\n }\n catch (err) {\n reject(err);\n }\n };\n req.onerror = () => reject(req.error);\n }));\n}\n/**\n * Delete a particular key from the store.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction del(key, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.delete(key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Delete multiple keys at once.\n *\n * @param keys List of keys to delete.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction delMany(keys, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n keys.forEach((key) => store.delete(key));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Clear all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction clear(customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.clear();\n return promisifyRequest(store.transaction);\n });\n}\nfunction eachCursor(store, callback) {\n store.openCursor().onsuccess = function () {\n if (!this.result)\n return;\n callback(this.result);\n this.result.continue();\n };\n return promisifyRequest(store.transaction);\n}\n/**\n * Get all keys in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction keys(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAllKeys) {\n return promisifyRequest(store.getAllKeys());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items);\n });\n}\n/**\n * Get all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction values(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAll) {\n return promisifyRequest(store.getAll());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items);\n });\n}\n/**\n * Get all entries in the store. Each entry is an array of `[key, value]`.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction entries(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n // (although, hopefully we'll get a simpler path some day)\n if (store.getAll && store.getAllKeys) {\n return Promise.all([\n promisifyRequest(store.getAllKeys()),\n promisifyRequest(store.getAll()),\n ]).then(([keys, values]) => keys.map((key, i) => [key, values[i]]));\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push([cursor.key, cursor.value])).then(() => items);\n });\n}\n\nexport { clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values };\n","import { get, set, del, clear } from \"idb-keyval\"\nimport { AxiosRequestConfig } from \"axios\"\n\nexport class SwrStore {\n private prefix: string\n\n constructor(prefix: string) {\n this.prefix = prefix\n }\n\n generateKey(config: AxiosRequestConfig): string {\n const url = config.baseURL\n ? `${config.baseURL.replace(/\\/$/, \"\")}/${config.url?.replace(/^\\//, \"\")}`\n : config.url!\n\n let paramsKey = \"\"\n if (config.params) {\n const params = Object.keys(config.params)\n .sort()\n .reduce((acc, key) => {\n acc[key] = config.params![key]\n\n return acc\n }, {} as Record<string, any>)\n paramsKey = JSON.stringify(params)\n }\n\n return `${this.prefix}:${\n config.method?.toUpperCase() || \"GET\"\n }:${url}?${paramsKey}`\n }\n\n async get(key: string) {\n let value\n\n try {\n value = await get(key)\n if (value === undefined) {\n return\n }\n } catch (e) {\n console.error(`[SWR Store]: Error getting value for key \"${key}\"`, e)\n\n return\n }\n\n try {\n value = JSON.parse(value as string)\n } catch (e) {\n console.error(\n `[SWR Store]: Error parsing value for key \"${key}\", got ${value}`,\n e\n )\n }\n\n return value\n }\n\n async set(key: string, value: unknown) {\n try {\n const serializedValue = JSON.stringify(value)\n await set(key, serializedValue)\n } catch (e) {\n console.error(\n `[SWR Store]: Error setting value: ${value} for key \"${key}\"`,\n e\n )\n }\n }\n\n async delete(key: string) {\n try {\n await del(key)\n } catch (e) {\n console.error(`[SWR Store]: Error deleting key \"${key}\"`, e)\n }\n }\n\n async clear() {\n try {\n await clear()\n } catch (e) {\n console.error(\"[SWR Store]: Error clearing cache\", e)\n }\n }\n}\n","import { AxiosRequestConfig, type AxiosResponse } from \"axios\"\nimport { ExtendedAxiosInstance, ResponseValue } from \"@evercam/api/types\"\nimport { SwrStore } from \"./SwrStore\"\n\nexport class Swr {\n private axiosInstance: ExtendedAxiosInstance\n private store: SwrStore\n\n constructor({\n key,\n axiosInstance,\n }: {\n key: string\n axiosInstance: ExtendedAxiosInstance\n }) {\n this.store = new SwrStore(key)\n this.axiosInstance = axiosInstance\n }\n\n async get<T = any>(\n url: string,\n config: AxiosRequestConfig = {}\n ): Promise<ResponseValue<T>> {\n const finalConfig: AxiosRequestConfig = {\n ...config,\n method: \"get\",\n url,\n }\n\n const key = this.store.generateKey(finalConfig)\n const cachedPromise = this.getCachedValue(key, finalConfig)\n const freshPromise = this.getFreshValue(key, finalConfig)\n\n return Promise.race([\n cachedPromise.then((v) => v ?? freshPromise),\n freshPromise,\n ])\n }\n\n private async getCachedValue(\n key: string,\n config: AxiosRequestConfig\n ): Promise<unknown> {\n try {\n const value = await this.store.get(key)\n if (!value) {\n return\n }\n\n if (config.onSwrHit) {\n config.onSwrHit(value)\n }\n\n return value\n } catch (error) {\n console.warn(`[SWR] Error fetching value for key: ${key}`, error)\n }\n }\n\n private async getFreshValue<T = any>(\n key: string,\n config: AxiosRequestConfig\n ): Promise<ResponseValue<T>> {\n try {\n const response: AxiosResponse<T> = await this.axiosInstance.request<T>(\n config\n )\n const fresh = (response?.data ??\n (response as unknown)) as ResponseValue<T>\n\n this.store.set(key, fresh).catch((err: unknown) => {\n console.warn(`[SWR] Failed to write to cache: ${key}`, err)\n })\n\n if (config.onSwrRefresh) {\n config.onSwrRefresh(fresh)\n }\n\n return fresh\n } catch (err) {\n console.warn(`[SWR] Request failed: ${config.url}`, err)\n if (config.onSwrError) {\n config.onSwrError(err as Error)\n }\n\n throw err\n }\n }\n\n async clear() {\n await this.store.clear()\n }\n}\n","import Axios, { AxiosResponse, type CancelTokenSource } from \"axios\"\nimport type {\n ErrorInterceptor,\n ExtendedAxiosInstance,\n RequestInterceptor,\n ResponseInterceptor,\n} from \"@evercam/api/types\"\nimport {\n onRequest,\n onResponse,\n onError,\n ensureCommonHeaders,\n} from \"./interceptors\"\nimport { Swr } from \"./swr/Swr\"\n\nlet requestInterceptors: RequestInterceptor[] = []\nlet responseInterceptors: ResponseInterceptor[] = []\nlet errorInterceptors: ErrorInterceptor[] = []\n\ndeclare module \"axios\" {\n export interface AxiosRequestConfig {\n // Skip all request / response interceptors\n raw?: boolean\n\n // Skip the camelCase / snake_case transformations\n preserveCasing?: boolean\n\n // Measure the request duration (adds a field \"duration\" to the response)\n timing?: boolean\n\n // Skip authentication (no Authorization header)\n skipAuth?: boolean\n\n // (readonly) Start time of the request (automatically set when timing == true)\n _metadata?: { startTime: number }\n }\n}\n\nconst axios = Axios.create({\n headers: {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore (See: https://github.com/axios/axios/issues/4193 )\n common: {\n Accept: \"application/json, text/plain, */*\",\n \"Content-Type\": \"application/json\",\n },\n },\n}) as ExtendedAxiosInstance\n\naxios.env = {}\n\naxios.addEnvironmentVariables = (vars: Record<string, any>) => {\n axios.env = { ...axios.env, ...vars }\n // log a warning if some values are null, undefined or no length only if localhost\n Object.entries(axios.env).forEach(([key, value]) => {\n if (\n (value === null ||\n value === undefined ||\n (typeof value === \"string\" && !value.length)) &&\n window.location.hostname.includes(\"localhost\")\n ) {\n console.warn(\n `AXIOS environment value for ${key} is ${value} - check your .env file.`\n )\n }\n })\n}\n\naxios.swr = new Swr({\n key: axios.env.swrKey || \"swr\",\n axiosInstance: axios,\n})\n\nconst defaultGet = axios.get.bind(axios)\n\naxios.swr = new Swr({\n key: axios.env.swrKey || \"swr\",\n axiosInstance: axios,\n})\n\naxios.get = function <T = any, R = AxiosResponse<T>>(\n ...args: Parameters<typeof defaultGet>\n) {\n const config = args[1] || {}\n\n return (\n config.swr ? this.swr.get<T>(...args) : defaultGet(...args)\n ) as Promise<R>\n}\n\naxios.addRequestInterceptor = (\n requestInterceptor: RequestInterceptor,\n errorInterceptor?: ErrorInterceptor\n) => {\n requestInterceptors.push(requestInterceptor)\n if (errorInterceptor && !errorInterceptors.includes(errorInterceptor)) {\n errorInterceptors.push(errorInterceptor)\n }\n\n // Ensure we only set up the interceptors once to prevent duplicate calls\n // @ts-expect-error\n if (axios.interceptors.request.handlers.length === 0) {\n axios.interceptors.request.use(\n async (request) => {\n for (const interceptor of requestInterceptors) {\n request = await interceptor(request, axios.env)\n }\n\n return request\n },\n (error) => {\n for (const interceptor of errorInterceptors) {\n interceptor(error, axios.env)\n }\n }\n )\n }\n}\n\naxios.addResponseInterceptor = (\n responseInterceptor,\n errorInterceptor?: ErrorInterceptor\n) => {\n responseInterceptors.push(responseInterceptor)\n if (errorInterceptor && !errorInterceptors.includes(errorInterceptor)) {\n errorInterceptors.push(errorInterceptor)\n }\n\n // Ensure we only set up the interceptors once to prevent duplicate calls\n // @ts-expect-error\n if (axios.interceptors.response.handlers.length === 0) {\n axios.interceptors.response.use(\n async (response) => {\n for (const interceptor of responseInterceptors) {\n response = await interceptor(response, axios.env)\n }\n\n return response\n },\n (error) => {\n for (const interceptor of errorInterceptors) {\n interceptor(error, axios.env)\n }\n\n return Promise.reject(error)\n }\n )\n }\n}\n\n// Adds auth guards and applies cameraCase -> snake_case transforms on request payload & params\naxios.addRequestInterceptor(onRequest, onError)\n\n// Apply snake_case -> camelCase on incoming responses data\naxios.addResponseInterceptor(onResponse, onError)\n\nconst setHeader = (headerName: string, value: any) => {\n ensureCommonHeaders(axios.defaults)\n if (!value) {\n delete axios.defaults.headers.common[headerName]\n } else {\n axios.defaults.headers.common[headerName] = value\n }\n}\nconst setToken = (token: string) => {\n setHeader(\"Authorization\", token ? `Bearer ${token}` : null)\n}\n\naxios.CancelToken = Axios.CancelToken\naxios.isCancel = Axios.isCancel\naxios.setHeader = setHeader\naxios.setToken = setToken\n\nconst CANCEL_REASON = \"Operation canceled due to new request\"\n\nfunction createRequestManager() {\n const requests = new Map<string, CancelTokenSource>()\n\n return {\n createToken(key: string): CancelTokenSource[\"token\"] {\n requests.get(key)?.cancel(CANCEL_REASON)\n\n const source = axios.CancelToken.source()\n requests.set(key, source)\n\n return source.token\n },\n cancelToken(key: string): void {\n requests.get(key)?.cancel(CANCEL_REASON)\n requests.delete(key)\n },\n cancelAll(): void {\n requests.forEach((source) => source.cancel(CANCEL_REASON))\n requests.clear()\n },\n }\n}\n\naxios.createRequestManager = createRequestManager\naxios.requestManager = createRequestManager()\n\nexport { axios }\n","import {\n FootageCreateUpdatePayload,\n HDDCreateUpdatePayload,\n HDDsQueryParams,\n} from \"@evercam/api/types/hdd\"\nimport { axios } from \"./client\"\nimport type {\n OAuthClient,\n OAuthClientWithSecret,\n AdminCreateOAuthClientPayload,\n UpdateOAuthClientPayload,\n} from \"@evercam/api/types/oauth\"\nimport type {\n CamerasResponsePayload,\n CameraUpdateRequestPayload,\n PaginatedItems,\n AdminCamera,\n AdminProjectDetail,\n AdminProjectListItem,\n AdminHdd,\n AdminUser,\n ProgressPhotosCreateUpdateRequestPayload,\n Kit,\n PatchPayload,\n StorageProvidersResponsePayload,\n MediaFilterQueryParams,\n Media,\n MediaDeleteRequestPayload,\n AuditLogsParams,\n AuditLog,\n SnapshotExtractionQyeryParams,\n SnapshotExtraction,\n CameraCreateRequestPayload,\n CameraDeletePayload,\n SnapshotTestPayload,\n SnapshotTestResponse,\n DuplicatedCameraFields,\n DuplicatedCameraResponse,\n MergeDuplicatedCameraPayload,\n FetchCameraQueryParams,\n DeleteSnapshotQueryParams,\n CameraNote,\n GetCameraNotesParams,\n CreateCameraNotePayload,\n CompanyQueryParams,\n CompanySummary,\n CompanyUpdatePayload,\n SsoProvider,\n SsoUpdatePayload,\n SsoCreatePayload,\n SuppressionsQueryParams,\n Suppression,\n SnapshotExtractionType,\n KitQueryParams,\n KitCreatePayload,\n AdminKit,\n KitMetricStatsEntry,\n CameraLogsQueryParams,\n CameraLog,\n CameraAuditLogsQueryParams,\n CameraAuditLog,\n NvrQueryParams,\n Nvr,\n SiteVisitCamerasQueryParams,\n OfflineCameraQueryParams,\n OfflineCamera,\n OfflineCameraNoteResponse,\n UserStatsResponse,\n UserCameraResponse,\n UserProjectResponse,\n ProjectUsers,\n ProjectCamera,\n ProjectsQueryParams,\n ProjectStatusStats,\n ProjectCreateRequestPayload,\n ProjectCreateResponse,\n ProjectUpdateRequestPayload,\n RouterQueryParams,\n Router,\n RouterCreatePayload,\n GlobalSearchQueryParams,\n SimCreateUpdatePayload,\n SimsQueryParams,\n Sim,\n SendSmsPayload,\n SendSmsResponse,\n SmsHistoryResponse,\n SmsQueryParams,\n Sms,\n ProgressPhotosQueryParams,\n ProgressPhotoItem,\n progressPhotosHistoryQueryParams,\n ProgressPhotosHistory,\n AdminUserUpdateRequestPayload,\n AdminQueryParams,\n Admin,\n ImpersonateUserResponse,\n AdminUserQueryParams,\n AdminCompareQueryParams,\n AdminCompare,\n NvrCreatePayload,\n WidgetsListRequestPayload,\n AdminWidget,\n AdminWidgetFull,\n WidgetPayload,\n PaginationParams,\n KitStorageRequestPayload,\n AdminCompanyUser,\n AdminCompanyProject,\n CompanyKit,\n CompanyCameraSummary,\n Automation,\n KitStorage,\n KitFootageRequestPayload,\n CommentsListRequestPayload,\n Comment,\n KitFootage,\n KitAlarmItem,\n KitSupportChecklist,\n RecycleBin,\n RecycleBinQueryParams,\n TransferCloudRecordingsQueryParams,\n SnapshotTransfer,\n CheckCameraPortPayload,\n CameraStatusLog,\n KitBox,\n KitBoxCreatePayload,\n KitBoxQueryParams,\n AdminInvite,\n AdminSearchItem,\n WithZohoParams,\n ZohoDeskTicketSearchResponse,\n JsonObject,\n ProjectStorageQueryParams,\n ProjectStorage,\n StorageProvider,\n AnprExtraction,\n AnprExtractionCreatePayload,\n} from \"@evercam/api/types\"\n\nimport { KitMetricId } from \"@evercam/api/types\"\nimport { Tag } from \"@evercam/api/types/tag\"\nimport type { AxiosRequestConfig } from \"axios\"\n\ntype AxiosPaginationRequestParams = AxiosRequestConfig & {\n params: PaginationParams\n}\n\nconst KIT_SUPPORT_CHECKLIST_TIMEOUT = 10 * 60 * 1000\n\nexport const AdminApi = {\n mediaHub: {\n getAllMedia(params: {\n params: Partial<MediaFilterQueryParams>\n }): Promise<PaginatedItems<Media>> {\n return axios.get(\"/admin/media-hub\", params)\n },\n deleteMedia(params: Partial<MediaDeleteRequestPayload>): Promise<void> {\n return axios.delete(\"/admin/media-hub\", { params })\n },\n },\n auditLogs: {\n getAuditLogs(\n params: AxiosRequestConfig & { params: Partial<AuditLogsParams> }\n ): Promise<PaginatedItems<AuditLog>[]> {\n return axios.get(\"/admin/audit-logs\", params)\n },\n },\n cameras: {\n getCamerasStats(params: {\n params: {\n email?: string\n }\n }): Promise<CamerasResponsePayload> {\n return axios.get(\"/admin/cameras/status-stats\", params)\n },\n rebootCamera(cameraId: string): Promise<{ message: string }> {\n return axios.post(`/admin/devices/camera/${cameraId}/reboot`)\n },\n focusCamera(\n cameraId: string,\n device: string\n ): Promise<{ message: string }> {\n return axios.post(`/admin/devices/${device}/${cameraId}/focus`)\n },\n getStorageProviders(\n cameraId: string,\n params?: AxiosRequestConfig & { unmaskSecretKeys: boolean }\n ): Promise<StorageProvidersResponsePayload> {\n return axios.get(`/admin/cameras/${cameraId}/storage-providers`, params)\n },\n createStorageProvider(\n cameraId: string,\n payload: StorageProvider\n ): Promise<StorageProvidersResponsePayload> {\n return axios.post(`/admin/cameras/${cameraId}/storage-providers`, payload)\n },\n updateStorageProvider(\n cameraId: string,\n providerId: number,\n payload: StorageProvider\n ): Promise<StorageProvidersResponsePayload> {\n return axios.put(\n `/admin/cameras/${cameraId}/storage-providers/${providerId}`,\n payload\n )\n },\n getStorageDetails(): Promise<JsonObject> {\n return axios.get(\"/admin/storage\")\n },\n getSnapshotExtractions(\n params: AxiosRequestConfig & {\n params: Partial<SnapshotExtractionQyeryParams>\n }\n ): Promise<PaginatedItems<SnapshotExtraction>> {\n return axios.get(\"/admin/snapshot-extractions\", params)\n },\n createCameras(\n payload: CameraCreateRequestPayload\n ): Promise<{ cameras: [AdminCamera] }> {\n return axios.post(\"/admin/cameras\", payload)\n },\n deleteCamera(exid: string, payload: CameraDeletePayload): Promise<void> {\n return axios.post(`/admin/cameras/${exid}/delete`, payload)\n },\n restoreCamera(exid: string): Promise<{ message: string }> {\n return axios.put(`/admin/cameras/${exid}/restore`)\n },\n testSnapshot(payload: SnapshotTestPayload): Promise<SnapshotTestResponse> {\n return axios.post(\"/admin/cameras/test-snapshot\", payload)\n },\n getDuplicateCameras(params: {\n params: {\n fields?: DuplicatedCameraFields[]\n sort?: string\n }\n }): Promise<PaginatedItems<DuplicatedCameraResponse>> {\n return axios.get(\"/admin/duplicate-cameras\", params)\n },\n mergeDuplicateCameras(\n payload: MergeDuplicatedCameraPayload\n ): Promise<{ success: boolean }> {\n return axios.post(\"/admin/merge-cameras\", payload)\n },\n getCameras(\n params: { params: Partial<FetchCameraQueryParams> },\n extraConfig: AxiosRequestConfig = {}\n ): Promise<PaginatedItems<AdminCamera>> {\n return axios.get(\"/admin/cameras\", {\n ...params,\n ...extraConfig,\n })\n },\n getCompares(params: {\n params: AdminCompareQueryParams\n }): Promise<PaginatedItems<AdminCompare[]>> {\n return axios.get(\"/admin/compares\", params)\n },\n getCameraDetails(exid: string): Promise<AdminCamera> {\n return axios.get(`/admin/cameras/${exid}`)\n },\n getCameraStatusLogs(\n exid: string,\n params: {\n params: {\n from: string\n to: string\n }\n }\n ): Promise<CameraStatusLog[]> {\n return axios.get(`/admin/cameras/${exid}/health`, params)\n },\n deleteSnapshots(\n cameraId: string,\n params: DeleteSnapshotQueryParams\n ): Promise<void> {\n return axios.delete(`admin/cameras/${cameraId}/snapshots`, {\n params,\n })\n },\n transferCloudRecordings(\n cameraId: string,\n params: TransferCloudRecordingsQueryParams\n ): Promise<void> {\n return axios.post(`admin/cameras/${cameraId}/snapshots/transfer`, params)\n },\n refreshDeviceSettings(cameraId: string): Promise<void> {\n return axios.post(\n `/admin/cameras/${cameraId}/device-settings/refresh`,\n {}\n )\n },\n update(\n cameraId: string,\n params: CameraUpdateRequestPayload\n ): Promise<CamerasResponsePayload> {\n return axios.patch(`/admin/cameras/${cameraId}`, params)\n },\n transferOwnership(cameraId: string, newOwnerId: number): Promise<void> {\n return axios.put(`/admin/cameras/${cameraId}/transfer/${newOwnerId}`)\n },\n portCheck(payload: {\n params: CheckCameraPortPayload\n }): Promise<CheckCameraPortPayload & { open: boolean }> {\n return axios.get(\"/admin/cameras/port-check\", payload)\n },\n },\n companies: {\n show(\n id: string,\n config: AxiosRequestConfig & { params?: WithZohoParams } = {}\n ): Promise<CompanySummary> {\n return axios.get(`/admin/companies/${id}`, config)\n },\n getCompanyUsers(\n id: string,\n params: AxiosPaginationRequestParams\n ): Promise<PaginatedItems<AdminCompanyUser>> {\n return axios.get(`/admin/companies/${id}/users`, params)\n },\n getCompanyProjects(\n id: string,\n params: AxiosPaginationRequestParams\n ): Promise<PaginatedItems<AdminCompanyProject>> {\n return axios.get(`/admin/companies/${id}/projects`, params)\n },\n getCompanyKits(\n id: string,\n params: AxiosPaginationRequestParams\n ): Promise<PaginatedItems<CompanyKit>> {\n return axios.get(`/admin/companies/${id}/kits`, params)\n },\n getCompanyCameras(\n id: string,\n params: AxiosPaginationRequestParams\n ): Promise<PaginatedItems<CompanyCameraSummary>> {\n return axios.get(`/admin/companies/${id}/cameras`, params)\n },\n getCompanies(params: {\n params: Partial<CompanyQueryParams>\n }): Promise<PaginatedItems<CompanySummary>> {\n return axios.get(\"/admin/companies\", params)\n },\n updateCompany(\n id: string,\n params: CompanyUpdatePayload\n ): Promise<Omit<CompanyUpdatePayload, \"linkedinUrl\">> {\n return axios.patch(`/admin/companies/${id}`, params)\n },\n deleteCompany(params: {\n ids: string | string[]\n }): Promise<{ success: true }> {\n return axios.delete(\"/admin/companies\", { params })\n },\n },\n sso: {\n getProviders(params: { params: PaginationParams }): Promise<SsoProvider[]> {\n return axios.get(\"/admin/sso-providers\", params)\n },\n updateProvider(id: string, params: SsoUpdatePayload): Promise<SsoProvider> {\n return axios.patch(`/admin/sso-providers/${id}`, params)\n },\n createProvider(params: SsoCreatePayload): Promise<SsoProvider> {\n return axios.post(\"/admin/sso-providers\", params)\n },\n deleteProviders(ids: string[]): Promise<{ success: true }> {\n return axios.delete(\"/admin/sso-providers\", { params: { ids } })\n },\n },\n oauthClients: {\n index(): Promise<{ items: OAuthClient[] }> {\n return axios.get(\"/admin/oauth/clients\")\n },\n show(id: number): Promise<OAuthClient> {\n return axios.get(`/admin/oauth/clients/${id}`)\n },\n create(\n payload: AdminCreateOAuthClientPayload\n ): Promise<OAuthClientWithSecret> {\n return axios.post(\"/admin/oauth/clients\", payload)\n },\n update(\n id: number,\n payload: UpdateOAuthClientPayload\n ): Promise<OAuthClient> {\n return axios.patch(`/admin/oauth/clients/${id}`, payload)\n },\n delete(id: number): Promise<void> {\n return axios.delete(`/admin/oauth/clients/${id}`)\n },\n regenerateSecret(id: number): Promise<OAuthClientWithSecret> {\n return axios.post(`/admin/oauth/clients/${id}/regenerate-secret`)\n },\n },\n emailing: {\n performEmailing(template: string, params: JsonObject): Promise<void> {\n return axios.post(`/admin/mailing/${template}`, params)\n },\n suppressions(params: {\n params: SuppressionsQueryParams\n }): Promise<PaginatedItems<Suppression[]>> {\n return axios.get(\"/admin/mailing/suppressions\", params)\n },\n deleteSuppression(id: number): Promise<void> {\n return axios.delete(`/admin/mailing/suppressions/${id}`)\n },\n },\n extractions: {\n updateCloudRecordings(cameraId: string, params: JsonObject): Promise<void> {\n return axios.post(`/admin/cameras/${cameraId}/cloud-recordings`, params)\n },\n addExtraction(\n cameraId: string,\n params: SnapshotExtractionQyeryParams\n ): Promise<PaginatedItems<SnapshotExtraction>> {\n return axios.post(`admin/cameras/${cameraId}/extractions`, params)\n },\n deleteSnapshotExtraction(\n cameraId: string,\n extractionId: number,\n params: {\n type: SnapshotExtractionType\n hardDelete?: boolean\n }\n ): Promise<void> {\n return axios.delete(\n `admin/cameras/${cameraId}/extractions/${extractionId}`,\n {\n params,\n }\n )\n },\n getExtraction(\n cameraExid: string,\n extractionId: number\n ): Promise<SnapshotExtraction> {\n return axios.get(\n `admin/cameras/${cameraExid}/extractions/${extractionId}`\n )\n },\n reprocessExtraction(cameraId: string, extractionId: number): Promise<void> {\n return axios.post(\n `admin/cameras/${cameraId}/extractions/${extractionId}/reprocess`\n )\n },\n },\n anprExtractions: {\n list(cameraExid: string): Promise<{ data: AnprExtraction[] }> {\n return axios.get(`/admin/cameras/${cameraExid}/anpr/extractions`)\n },\n create(\n cameraExid: string,\n payload: AnprExtractionCreatePayload\n ): Promise<{ data: AnprExtraction }> {\n return axios.post(\n `/admin/cameras/${cameraExid}/anpr/extractions`,\n payload\n )\n },\n delete(cameraExid: string, id: number): Promise<{ message: string }> {\n return axios.delete(`/admin/cameras/${cameraExid}/anpr/extractions/${id}`)\n },\n },\n kits: {\n getAllKits(\n params: AxiosRequestConfig & { params: KitQueryParams }\n ): Promise<PaginatedItems<Kit[]>> {\n return axios.get(\"/admin/kits\", params)\n },\n async getKit(kitId: number): Promise<Kit> {\n return axios.get(`/admin/kits/${kitId}`)\n },\n createKit(params: KitCreatePayload): Promise<AdminKit> {\n return axios.post(\"/admin/kits\", params)\n },\n updateKit(id: string, params: PatchPayload<Kit>) {\n return axios.patch(`/admin/kits/${id}`, params)\n },\n deleteKit(id: string, params: JsonObject): Promise<void> {\n return axios.delete(`/admin/kits/${id}`, { params })\n },\n getKitStats<T = KitMetricStatsEntry>({\n kitId,\n metric,\n fromDate,\n toDate,\n }: {\n kitId: number\n metric: KitMetricId\n fromDate: string\n toDate: string\n }): Promise<T[]> {\n return axios.get(`/admin/kits/${kitId}/stats/${metric}`, {\n params: {\n fromDate,\n toDate,\n },\n })\n },\n attachTag(kitId: number, tagId: number): Promise<void> {\n return axios.post(`/admin/kits/${kitId}/tags`, { tagId: tagId })\n },\n detachTag(kitId: number, tagId: number): Promise<void> {\n return axios.delete(`/admin/kits/${kitId}/tags/${tagId}`)\n },\n getStorages(params: {\n params: KitStorageRequestPayload\n }): Promise<PaginatedItems<KitStorage[]>> {\n return axios.get(\"/admin/kits/storages\", params)\n },\n getFootage(\n id: number,\n params: { params?: KitFootageRequestPayload } = {}\n ): Promise<KitFootage[]> {\n return axios.get(`/admin/kits/${id}/footage`, params)\n },\n getAlarms(kitId: number): Promise<KitAlarmItem[]> {\n return axios.get(`/admin/kits/${kitId}/alarms`)\n },\n runSupportChecklist(kitId: number): Promise<KitSupportChecklist> {\n return axios.post(`/admin/kits/${kitId}/support-checklist`, null, {\n timeout: KIT_SUPPORT_CHECKLIST_TIMEOUT,\n })\n },\n getBoxes(params: {\n params: Partial<KitBoxQueryParams>\n }): Promise<PaginatedItems<KitBox>> {\n return axios.get(\"/admin/kit-boxes\", params)\n },\n createBox(params: KitBoxCreatePayload): Promise<KitBox> {\n return axios.post(\"/admin/kit-boxes\", params)\n },\n updateBox(id: string, params: KitBoxCreatePayload): Promise<KitBox> {\n return axios.patch(`/admin/kit-boxes/${id}`, params)\n },\n },\n logs: {\n getAllCamerasStatusLogs(params: {\n params: CameraLogsQueryParams\n }): Promise<{ data: CameraLog[] }> {\n return axios.get(\"/admin/cameras-logs\", params)\n },\n getCameraLogs(\n cameraId: string,\n params: CameraAuditLogsQueryParams\n ): Promise<PaginatedItems<CameraAuditLog[]>> {\n return axios.get(`/admin/cameras/${cameraId}/audit-logs`, {\n params,\n })\n },\n },\n notes: {\n togglePin(id: string | number): Promise<CameraNote> {\n return axios.patch(`/admin/notes/${id}/toggle-pin`)\n },\n getNotes(\n cameraExid: string,\n params?: GetCameraNotesParams\n ): Promise<PaginatedItems<CameraNote>> {\n return axios.get(`/admin/cameras/${cameraExid}/notes`, { params })\n },\n createNote(\n cameraExid: string,\n params: CreateCameraNotePayload\n ): Promise<CameraNote> {\n return axios.post(`/admin/cameras/${cameraExid}/notes`, params)\n },\n },\n nvrs: {\n getNvrs(params: {\n params: NvrQueryParams\n }): Promise<PaginatedItems<Nvr[]>> {\n return axios.get(\"/admin/nvrs\", params)\n },\n createNvr(params: NvrCreatePayload): Promise<Nvr> {\n return axios.post(\"/admin/nvrs\", params)\n },\n updateNvr(id: string, params: PatchPayload<Nvr>): Promise<Nvr> {\n return axios.patch(`/admin/nvrs/${id}`, params)\n },\n rebootNVR(cameraId: string): Promise<{ message: string }> {\n return axios.post(`/admin/devices/nvr/${cameraId}/reboot`)\n },\n },\n recycleBin: {\n getAllDeleted(params: {\n params: RecycleBinQueryParams\n }): Promise<PaginatedItems<RecycleBin[]>> {\n return axios.get(\"/admin/recycle-bin\", params)\n },\n restore(params: {\n type: string\n camera_ids: number[]\n project_ids: number[]\n }): Promise<void> {\n return axios.patch(\"/admin/recycle-bin/restore\", params)\n },\n },\n offlineCameras: {\n getSiteVisitCameras(params: {\n params: Partial<SiteVisitCamerasQueryParams>\n }): Promise<PaginatedItems<AdminCamera>> {\n return axios.get(\"/admin/site-visit-cameras\", params)\n },\n getOfflineCameras(params: {\n params: Partial<OfflineCameraQueryParams>\n }): Promise<PaginatedItems<OfflineCamera>> {\n return axios.get(\"/admin/offline-cameras\", params)\n },\n getOfflineCamerasLastNote(params: {\n cameraIds: number[]\n }): Promise<OfflineCameraNoteResponse> {\n return axios.get(\"/admin/offline-cameras/notes\", { params: params })\n },\n },\n projects: {\n index(params: {\n params: Partial<ProjectsQueryParams>\n }): Promise<PaginatedItems<AdminProjectListItem>> {\n return axios.get(\"/admin/projects\", params)\n },\n show(\n exid: string,\n params: WithZohoParams = {}\n ): Promise<{ data: AdminProjectDetail }> {\n return axios.get(\n `/admin/projects/${exid}${\"with_zoho\" in params ? \"?with_zoho\" : \"\"}`\n )\n },\n getUsers(id: string): Promise<ProjectUsers> {\n return axios.get(`/admin/projects/${id}/users`)\n },\n getCameras(id: string): Promise<{ data: ProjectCamera[] }> {\n return axios.get(`/admin/projects/${id}/cameras`)\n },\n getProjectsStats(): Promise<ProjectStatusStats> {\n return axios.get(\"/admin/projects/status-stats\")\n },\n createProject(\n params: ProjectCreateRequestPayload\n ): Promise<ProjectCreateResponse> {\n return axios.post(\"/admin/projects\", params)\n },\n updateProject(\n projectExid: string,\n params: Partial<ProjectUpdateRequestPayload>\n ): Promise<ProjectCreateResponse> {\n return axios.put(`/admin/projects/${projectExid}`, params)\n },\n deleteProject(projectExid: string): Promise<{ success: boolean }> {\n return axios.delete(`/admin/projects/${projectExid}`)\n },\n addToProject(\n projectExid: string,\n params: { cameraExids: string[] }\n ): Promise<void> {\n return axios.post(`/admin/projects/${projectExid}/add-cameras`, params)\n },\n getProjectStorages(params: {\n params: Partial<ProjectStorageQueryParams>\n }): Promise<PaginatedItems<ProjectStorage[]>> {\n return axios.get(\"/admin/projects/storages\", params)\n },\n retryProjectStorage(id: number): Promise<{ message: string }> {\n return axios.post(`/admin/projects/storages/${id}/retry`)\n },\n },\n routers: {\n getRouters(params: {\n params: Partial<RouterQueryParams>\n }): Promise<PaginatedItems<Router[]>> {\n return axios.get(\"/admin/routers\", params)\n },\n getRouterTypes(): Promise<string[]> {\n return axios.get(\"/admin/router-types\")\n },\n createRouter(params: RouterCreatePayload): Promise<{ routerId: number }> {\n return axios.post(\"/admin/routers\", params)\n },\n updateRouter(\n id: number,\n params: RouterCreatePayload\n ): Promise<{ success: boolean }> {\n return axios.patch(`/admin/routers/${id}`, params)\n },\n deleteRouter(id: number): Promise<void> {\n return axios.delete(`/admin/routers/${id}`)\n },\n getRouter(id: number): Promise<Router> {\n return axios.get(`/admin/routers/${id}`)\n },\n },\n search: {\n search(params: {\n params: GlobalSearchQueryParams\n }): Promise<PaginatedItems<AdminSearchItem>> {\n return axios.get(\"/admin/search\", params)\n },\n },\n hdds: {\n getHdds(payload: {\n projectId: string\n companyId: string\n }): Promise<AdminHdd[]> {\n return axios.get(\"/admin/hdds\", { params: payload })\n },\n getAllHdds(params: {\n params: Partial<HDDsQueryParams>\n }): Promise<PaginatedItems<AdminHdd>> {\n return axios.get(\"/admin/hdds\", params)\n },\n deleteHdd(hddId: number): Promise<void> {\n return axios.delete(`/admin/hdds/${hddId}`)\n },\n saveHdd(params: HDDCreateUpdatePayload): Promise<void> {\n return axios.post(\"/admin/hdds\", params)\n },\n updateHdd(hddId: number, params: HDDCreateUpdatePayload): Promise<void> {\n return axios.patch(`/admin/hdds/${hddId}`, params)\n },\n saveFootage(\n hddId: number,\n params: FootageCreateUpdatePayload\n ): Promise<void> {\n return axios.post(`/admin/hdds/${hddId}/footages`, params)\n },\n deleteFootage(hddId: number, footageId: number): Promise<void> {\n return axios.delete(`/admin/hdds/${hddId}/footages/${footageId}`)\n },\n updateFootage(\n hddId: number,\n footageId: number,\n params: FootageCreateUpdatePayload\n ): Promise<void> {\n return axios.patch(`/admin/hdds/${hddId}/footages/${footageId}`, params)\n },\n },\n shares: {\n getInvites(\n params: AxiosPaginationRequestParams\n ): Promise<PaginatedItems<AdminInvite>> {\n return axios.get(\"/admin/invites\", params)\n },\n },\n sims: {\n deleteSim(simId: number): Promise<{ deleted: boolean }> {\n return axios.delete(`/admin/sims/${simId}`)\n },\n createSim(\n params: Omit<SimCreateUpdatePayload, \"cameraId\">\n ): Promise<{ success: boolean }> {\n return axios.post(\"/admin/sims\", params)\n },\n updateSim(\n simId: number,\n params: SimCreateUpdatePayload\n ): Promise<{ success: boolean }> {\n return axios.patch(`/admin/sims/${simId}`, params)\n },\n getSims(params: {\n params: Partial<SimsQueryParams>\n }): Promise<PaginatedItems<Sim[]>> {\n return axios.get(\"/admin/sims\", params)\n },\n getSimProviders(): Promise<string[]> {\n return axios.get(\"/admin/sim-providers\")\n },\n getBillPayers(): Promise<string[]> {\n return axios.get(\"/admin/sims/bill-payers\")\n },\n },\n sms: {\n sendSms(number: string, params: SendSmsPayload): Promise<SendSmsResponse> {\n return axios.post(`/admin/sims/${number}/sms`, params)\n },\n getSimHistory(\n number: string,\n params: AxiosPaginationRequestParams\n ): Promise<PaginatedItems<SmsHistoryResponse>> {\n return axios.get(`/admin/sims/${number}/sms`, params)\n },\n getSms(params: {\n params: Partial<SmsQueryParams>\n }): Promise<PaginatedItems<Sms[]>> {\n return axios.get(\"/admin/sms\", params)\n },\n },\n progressPhotos: {\n getProgressPhotos(params: {\n params: Partial<ProgressPhotosQueryParams>\n }): Promise<PaginatedItems<ProgressPhotoItem[]>> {\n return axios.get(\"/admin/progress-photos\", params)\n },\n getProgressPhotosHistory(params: {\n params: Partial<progressPhotosHistoryQueryParams>\n }): Promise<ProgressPhotosHistory> {\n return axios.get(\"/admin/progress-photos/history\", params)\n },\n getProgressPhotoTemplate({\n id,\n }: {\n id: string\n }): Promise<{ progressPhoto: string }> {\n return axios.get(`/admin/progress-photos/history/${id}/email`)\n },\n update(\n id: string,\n payload: ProgressPhotosCreateUpdateRequestPayload\n ): Promise<Automation> {\n return axios.patch(`/admin/progress-photos/${id}`, payload)\n },\n },\n tags: {\n index(): Promise<Tag[]> {\n return axios.get(\"/admin/tags\")\n },\n create(tag: Tag): Promise<Tag> {\n return axios.post(\"/admin/tags\", tag)\n },\n update(tag: Tag): Promise<Tag> {\n return axios.patch(`/admin/tags/${tag.id}`, tag)\n },\n delete(tag: Tag): Promise<void> {\n return axios.delete(`/admin/tags/${tag.id}`)\n },\n },\n users: {\n updateUser(\n id: number,\n params: Partial<AdminUserUpdateRequestPayload>\n ): Promise<AdminUser> {\n return axios.put(`/admin/users/${id}`, params)\n },\n getAdmins(params: {\n params: Partial<AdminQueryParams>\n }): Promise<PaginatedItems<Admin[]>> {\n return axios.get(\"/admin\", params)\n },\n deleteAdmin(email: string): Promise<void | { message: string }> {\n return axios.put(`/admin/users/${email}/revoke-admin`)\n },\n makeAdmin(email: string): Promise<void | { message: string }> {\n return axios.put(`/admin/users/${email}/grant-admin`)\n },\n deleteUser(\n email: string,\n params: { verifEmail: string }\n ): Promise<void | { message: string }> {\n return axios.delete(`/admin/users/${email}`, { params })\n },\n impersonateUser(email: string): Promise<ImpersonateUserResponse> {\n return axios.post(`/admin/users/${email}/impersonate`)\n },\n getUsers(params: {\n params: Partial<AdminUserQueryParams>\n }): Promise<PaginatedItems<AdminUser>> {\n return axios.get(\"/admin/users\", params)\n },\n show(id: number, params: WithZohoParams = {}): Promise<UserStatsResponse> {\n return axios.get(\n `/admin/users/${id}${\"with_zoho\" in params ? \"?with_zoho\" : \"\"}`\n )\n },\n getProjects(id: number): Promise<UserProjectResponse> {\n return axios.get(`/admin/users/${id}/projects`)\n },\n getCameras(id: number): Promise<UserCameraResponse> {\n return axios.get(`/admin/users/${id}/cameras`)\n },\n getUserPasswordResetLink(\n email: string\n ): Promise<{ passwordResetLink: string }> {\n return axios.post(`/admin/users/${email}/password/reset`)\n },\n },\n widgets: {\n index(params: {\n params: Partial<WidgetsListRequestPayload>\n }): Promise<PaginatedItems<AdminWidget>> {\n return axios.get(\"/admin/widgets\", params)\n },\n show(id: number): Promise<AdminWidgetFull> {\n return axios.get(`/admin/widgets/${id}`)\n },\n update(id: number, payload: WidgetPayload): Promise<AdminWidgetFull> {\n return axios.put(`/admin/widgets/${id}`, payload)\n },\n delete(id: number) {\n return axios.delete(`/admin/widgets/${id}`)\n },\n },\n zohoDesk: {\n searchTickets(params: JsonObject): Promise<ZohoDeskTicketSearchResponse> {\n return axios.get(\"/admin/zoho/desk/tickets/search\", {\n params,\n preserveCasing: true,\n })\n },\n },\n comments: {\n index(params: {\n params: Partial<CommentsListRequestPayload>\n }): Promise<PaginatedItems<Comment>> {\n return axios.get(\"/admin/comments\", params)\n },\n },\n snapshotTransfers: {\n index(\n params: AxiosRequestConfig & {\n params: Partial<TransferCloudRecordingsQueryParams>\n }\n ): Promise<PaginatedItems<SnapshotTransfer>> {\n return axios.get(\"/admin/snapshot-transfers\", params)\n },\n cancel(id: number): Promise<SnapshotTransfer> {\n return axios.patch(`/admin/snapshot-transfers/${id}/cancel`)\n },\n },\n}\n","import { axios } from \"./client\"\nimport { type PaginatedItems } from \"@evercam/shared/types\"\nimport {\n VideoWall,\n VideoWallListParams,\n VideoWallCreateUpdatePayload,\n} from \"@evercam/api/types/videoWall\"\n\nexport const VideoWallApi = {\n list(params: VideoWallListParams = {}) {\n return axios.get<PaginatedItems<VideoWall>>(\"/video-walls\", { params })\n },\n\n create(body: VideoWallCreateUpdatePayload) {\n return axios.post<VideoWall>(\"/video-walls\", {\n source: \"default\",\n ...body,\n })\n },\n\n get(exid: string | number) {\n return axios.get<VideoWall>(`/video-walls/${exid}`)\n },\n\n update(exid: string | number, body: Partial<VideoWallCreateUpdatePayload>) {\n return axios.put<VideoWall>(`/video-walls/${exid}`, {\n source: \"default\",\n ...body,\n })\n },\n\n delete(exid: string | number) {\n return axios.delete(`/video-walls/${exid}`)\n },\n}\n","import { axios } from \"./client\"\nimport {\n _360Floor,\n _360FloorId,\n _360Marker3D,\n _360Pin,\n _360ProjectJsonResponse,\n _360ProjectListItem,\n _360Scene,\n _360SceneRoute,\n _360CalibrationDetails,\n _360FloorData,\n _360FloorRef,\n _360PinData,\n _360Route,\n _360Walk,\n Point3D,\n DroneBimData,\n DroneImageryPlan,\n DroneMarker,\n DroneModel,\n DroneProjectData,\n DroneProjectDataPatch,\n DroneTag,\n DroneTransformPatch,\n ForgeMarker,\n ForgeProjectData,\n ForgeUrn,\n ForgeView,\n ItwinProjectData,\n MapView,\n PlannerListItem,\n SitePlan,\n ProjectExid,\n SiteViewCameraListItem,\n SiteViewerType,\n DroneCameraTransform,\n} from \"@evercam/api/types\"\nimport { AxiosRequestConfig } from \"axios\"\n\nexport const getFirebaseDbApi = (): string => axios.env.firebaseDbLink as string\nexport const getFirebaseStorageUrl = (): string =>\n axios.env.firebaseStorageUrl as string\nexport const getFirebaseStorageToken = (): string =>\n axios.env.firebaseStorageToken as string\nexport const getForgeTokenServerUrl = (): string =>\n axios.env.forgeTokenServerUrl as string\n\nconst firebaseRequestConfig = { skipAuth: true, preserveCasing: true }\n\nexport const _3dFirebaseApi = {\n drone: {\n getProjectInfo(projectExid: ProjectExid): Promise<DroneProjectData> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/cesium/${projectExid}.json`,\n firebaseRequestConfig\n )\n },\n getProjectTags(\n projectExid: ProjectExid\n ): Promise<Record<string, DroneTag>> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/cesium/${projectExid}/transform/tags.json`,\n firebaseRequestConfig\n )\n },\n patchTags({\n projectId,\n tags,\n }: {\n projectId: ProjectExid\n tags: Record<string, DroneTag | null>\n }): Promise<void> {\n return axios.patch(\n `${getFirebaseDbApi()}data/projects/cesium/${projectId}/transform/tags.json`,\n tags,\n firebaseRequestConfig\n )\n },\n saveMarkers({\n projectId,\n markers,\n }: {\n projectId: ProjectExid\n markers: Record<string, DroneMarker>\n }): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/cesium/${projectId}/transform/markers.json`,\n markers,\n firebaseRequestConfig\n )\n },\n patchTransform({\n projectId,\n data,\n }: {\n projectId: ProjectExid\n data: DroneTransformPatch\n }): Promise<void> {\n return axios.patch(\n `${getFirebaseDbApi()}data/projects/cesium/${projectId}/transform.json`,\n data,\n firebaseRequestConfig\n )\n },\n saveTerrainPoints({\n projectId,\n dateId,\n points,\n }: {\n projectId: ProjectExid\n dateId: string\n points: Point3D[]\n }): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/cesium/${projectId}/transform/terrainPoints/${dateId}.json`,\n points,\n firebaseRequestConfig\n )\n },\n patchImageryPlan({\n projectId,\n plan,\n }: {\n projectId: ProjectExid\n plan: Record<string, DroneImageryPlan>\n }): Promise<void> {\n return axios.patch(\n `${getFirebaseDbApi()}data/projects/cesium/${projectId}/transform/imageryPlans.json`,\n plan,\n firebaseRequestConfig\n )\n },\n deleteImageryPlan({\n projectId,\n uuid,\n }: {\n projectId: ProjectExid\n uuid: string\n }): Promise<void> {\n return axios.delete(\n `${getFirebaseDbApi()}data/projects/cesium/${projectId}/transform/imageryPlans/${uuid}.json`,\n firebaseRequestConfig\n )\n },\n saveImageryPlans({\n projectId,\n plans,\n }: {\n projectId: ProjectExid\n plans: Record<string, DroneImageryPlan>\n }): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/cesium/${projectId}/transform/imageryPlans.json`,\n plans,\n firebaseRequestConfig\n )\n },\n saveModel({\n projectId,\n model,\n }: {\n projectId: ProjectExid\n model: DroneModel\n }): Promise<void> {\n const { trueIndex, ...modelData } = model\n\n return axios.put(\n `${getFirebaseDbApi()}data/projects/cesium/${projectId}/models/${trueIndex}.json`,\n modelData,\n firebaseRequestConfig\n )\n },\n saveModels({\n projectId,\n models,\n }: {\n projectId: ProjectExid\n models: DroneModel[]\n }): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/cesium/${projectId}/models.json`,\n models,\n firebaseRequestConfig\n )\n },\n saveBimData({\n projectId,\n data,\n }: {\n projectId: ProjectExid\n data: DroneBimData\n }): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/cesium/${projectId}/transform/bimData.json`,\n data,\n firebaseRequestConfig\n )\n },\n getBimTransparencyFlag(projectId: ProjectExid): Promise<boolean | null> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/cesium/${projectId}/transform/bimTransparencyFeatureFlag.json`,\n firebaseRequestConfig\n )\n },\n saveCameraTransform({\n projectId,\n isScene3D,\n transform,\n }: {\n projectId: ProjectExid\n isScene3D: boolean\n transform: Record<string, DroneCameraTransform>\n }): Promise<void> {\n return axios.patch(\n `${getFirebaseDbApi()}data/projects/cesium/${projectId}/transform/initial${\n isScene3D ? \"\" : \"2D\"\n }CameraTransform.json`,\n transform,\n firebaseRequestConfig\n )\n },\n },\n _360: {\n getProjectInfo(\n projectExid: ProjectExid,\n params: {\n config?: AxiosRequestConfig\n } = { config: {} }\n ): Promise<_360ProjectJsonResponse> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/360/${projectExid}.json`,\n {\n ...params.config,\n ...firebaseRequestConfig,\n }\n )\n },\n getProjectsList(): Promise<_360ProjectListItem[]> {\n return axios.get(\n `${getFirebaseDbApi()}data/360-list.json`,\n firebaseRequestConfig\n )\n },\n updateProjectsList(\n items: Record<string, _360ProjectListItem>\n ): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/360-list.json`,\n items,\n firebaseRequestConfig\n )\n },\n updateProjectsListItem(\n index: number,\n data: _360ProjectListItem\n ): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/360-list/${index}.json`,\n data,\n firebaseRequestConfig\n )\n },\n deleteProject(projectId: string): Promise<void> {\n return axios.delete(\n `${getFirebaseDbApi()}data/projects/360/${projectId}.json`,\n firebaseRequestConfig\n )\n },\n updateProjectInfo(\n projectId: string,\n data: Partial<_360ProjectJsonResponse>\n ): Promise<void> {\n return axios.patch(\n `${getFirebaseDbApi()}data/projects/360/${projectId}.json`,\n data,\n firebaseRequestConfig\n )\n },\n updateFloor(\n projectExid: ProjectExid,\n dateId: string,\n floorIndex: string,\n body: Partial<_360Scene[\"floors\"][number]>\n ): Promise<_360ProjectJsonResponse> {\n return axios.patch(\n `${getFirebaseDbApi()}data/projects/360/${projectExid}/dates/${dateId}/floors/${floorIndex}.json`,\n body,\n firebaseRequestConfig\n )\n },\n getFloor({\n projectId,\n dateId,\n floorId,\n }: {\n projectId: ProjectExid\n dateId: number\n floorId: _360FloorId\n }): Promise<_360Floor> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/360/${projectId}/${dateId}/${floorId}.json`,\n firebaseRequestConfig\n )\n },\n getAerialShotsFloor({\n projectId,\n dateId,\n floorId,\n }: {\n projectId: ProjectExid\n dateId: number\n floorId: _360FloorId\n }): Promise<_360Floor> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/360/${projectId}/aerial-shots/${dateId}/${floorId}.json`,\n firebaseRequestConfig\n )\n },\n update3DMarkers({\n projectId,\n dateId,\n floorId,\n markers,\n }: {\n projectId: ProjectExid\n dateId: number\n floorId: _360FloorId\n markers: Record<string, _360Marker3D>\n }): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/360/${projectId}/${dateId}/${floorId}/_3DMarkers.json`,\n markers,\n firebaseRequestConfig\n )\n },\n updateFloors({\n projectId,\n dateId,\n floors,\n }: {\n projectId: ProjectExid\n dateId: number\n floors: _360Scene[\"floors\"]\n }): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/360/${projectId}/dates/${dateId}/floors.json`,\n floors,\n firebaseRequestConfig\n )\n },\n deleteFloor({\n projectId,\n dateId,\n floorId,\n }: {\n projectId: ProjectExid\n dateId: number\n floorId: _360FloorId\n }): Promise<void> {\n return axios.delete(\n `${getFirebaseDbApi()}data/projects/360/${projectId}/${dateId}/${floorId}.json`,\n firebaseRequestConfig\n )\n },\n updateDates(projectId: ProjectExid, dates: _360Scene[]): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/360/${projectId}/dates.json`,\n dates,\n firebaseRequestConfig\n )\n },\n updatePins({\n projectId,\n dateId,\n floorId,\n pins,\n }: {\n projectId: ProjectExid\n dateId: number\n floorId: _360FloorId\n pins: Record<string, _360Pin>\n }): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/360/${projectId}/${dateId}/${floorId}/pins.json`,\n pins,\n firebaseRequestConfig\n )\n },\n getGPXText(url: string): Promise<string> {\n if (!url) {\n return Promise.resolve(\"\")\n }\n\n return axios.get(url.replace(/token=\\s*/, \"token=\"), {\n ...firebaseRequestConfig,\n responseType: \"text\",\n })\n },\n updateRoute(\n projectExid: ProjectExid,\n dateId: string | number,\n floorIndex: string,\n body: Partial<_360SceneRoute>\n ): Promise<Partial<_360SceneRoute>> {\n return axios.patch(\n `${getFirebaseDbApi()}data/projects/360/${projectExid}/${dateId}/${floorIndex}/route.json`,\n body,\n firebaseRequestConfig\n )\n },\n async updateFeatureFlag(\n projectID: string,\n dateID: string | number,\n floorID: string,\n featureFlagName: string,\n value: boolean\n ): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${dateID}/${floorID}/${featureFlagName}.json`,\n value,\n {\n ...firebaseRequestConfig,\n transformRequest: [(data: boolean) => JSON.stringify(data)],\n }\n )\n },\n async saveSteps(\n projectID: string,\n dateID: string,\n floorID: string,\n stepsValue: number\n ): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${dateID}/${floorID}/steps.json`,\n stepsValue,\n firebaseRequestConfig\n )\n },\n getDates({\n projectID,\n prefix = \"\",\n }: {\n projectID: string\n prefix?: string\n }): Promise<_360Scene[] | null> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${prefix}dates.json`,\n firebaseRequestConfig\n )\n },\n getFloorData({\n projectID,\n dateID,\n floorID,\n prefix = \"\",\n }: _360FloorRef & { prefix?: string }): Promise<_360FloorData> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${prefix}${dateID}/${floorID}.json`,\n firebaseRequestConfig\n )\n },\n patchFloor({\n projectID,\n dateID,\n floorID,\n body,\n }: _360FloorRef & { body: Record<string, unknown> }): Promise<\n Record<string, unknown>\n > {\n return axios.patch(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${dateID}/${floorID}.json`,\n body,\n firebaseRequestConfig\n )\n },\n deleteMarkers({ projectID, dateID, floorID }: _360FloorRef): Promise<void> {\n return axios.delete(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${dateID}/${floorID}/_3DMarkers.json`,\n firebaseRequestConfig\n )\n },\n patchMarkers({\n projectID,\n dateID,\n floorID,\n markers,\n }: _360FloorRef & { markers: Record<string, unknown> }): Promise<\n Record<string, unknown>\n > {\n return axios.patch(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${dateID}/${floorID}/_3DMarkers.json`,\n markers,\n firebaseRequestConfig\n )\n },\n putMarkers({\n projectID,\n dateID,\n floorID,\n markers,\n }: _360FloorRef & { markers: Record<string, unknown> }): Promise<any> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${dateID}/${floorID}/_3DMarkers.json`,\n markers,\n firebaseRequestConfig\n )\n },\n putFloors({\n projectID,\n dateID,\n floors,\n }: {\n projectID: string\n dateID: string | number\n floors: unknown[]\n }): Promise<unknown[]> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/dates/${dateID}/floors.json`,\n floors,\n firebaseRequestConfig\n )\n },\n deleteFloorData({\n projectID,\n dateID,\n floorID,\n }: _360FloorRef): Promise<void> {\n return axios.delete(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${dateID}/${floorID}.json`,\n firebaseRequestConfig\n )\n },\n putDates({\n projectID,\n dates,\n }: {\n projectID: string\n dates: _360Scene[]\n }): Promise<_360Scene[]> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/dates.json`,\n dates,\n firebaseRequestConfig\n )\n },\n deleteDate({\n projectID,\n dateID,\n }: {\n projectID: string\n dateID: string | number\n }): Promise<void> {\n return axios.delete(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${dateID}.json`,\n firebaseRequestConfig\n )\n },\n getPins({\n projectID,\n dateID,\n floorID,\n }: _360FloorRef): Promise<Record<string, _360PinData> | null> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${dateID}/${floorID}/pins.json`,\n firebaseRequestConfig\n )\n },\n putPins({\n projectID,\n dateID,\n floorID,\n pins,\n }: _360FloorRef & { pins: Record<string, _360PinData> }): Promise<Record<\n string,\n _360PinData\n > | null> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${dateID}/${floorID}/pins.json`,\n pins,\n firebaseRequestConfig\n )\n },\n patchCalibrationDetails({\n projectID,\n dateID,\n floorID,\n details,\n }: _360FloorRef & { details: Partial<_360CalibrationDetails> }): Promise<\n Partial<_360CalibrationDetails>\n > {\n return axios.patch(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${dateID}/${floorID}/calibrationDetails.json`,\n details,\n firebaseRequestConfig\n )\n },\n getDateWalks(\n projectExid: ProjectExid,\n dateId: string\n ): Promise<Record<string, unknown> | null> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/360/${projectExid}/${dateId}.json`,\n firebaseRequestConfig\n )\n },\n getRoute({\n projectID,\n dateID,\n floorID,\n }: _360FloorRef): Promise<_360Route | null> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${dateID}/${floorID}/route.json`,\n firebaseRequestConfig\n )\n },\n deleteRoute({ projectID, dateID, floorID }: _360FloorRef): Promise<void> {\n return axios.delete(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/${dateID}/${floorID}/route.json`,\n firebaseRequestConfig\n )\n },\n getAerialShotDate({\n projectID,\n dateID,\n }: {\n projectID: string\n dateID: string\n }): Promise<string> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/360/${projectID}/aerial-shots/dates/${dateID}/date.json`,\n firebaseRequestConfig\n )\n },\n updateGPXFile(\n projectExid: ProjectExid,\n dateId: string,\n floorIndex: string,\n gpxContent: string\n ): Promise<void> {\n const blob = new Blob([gpxContent], { type: \"application/gpx+xml\" })\n const formData = new FormData()\n formData.append(\"gpxFile\", blob, \"updated-track.gpx\")\n\n return axios.post(\n `${\n getFirebaseStorageUrl() +\n encodeURIComponent(\"/\" + projectExid + \"/\") +\n dateId +\n encodeURIComponent(\"/\" + floorIndex + \"/route/track.gpx\")\n }?alt=media&token=${getFirebaseStorageToken()}`,\n formData,\n {\n ...firebaseRequestConfig,\n headers: { \"Content-Type\": \"multipart/form-data\" },\n }\n )\n },\n getProjectDates(projectId: ProjectExid): Promise<_360Scene[]> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/360/${projectId}/dates.json`,\n firebaseRequestConfig\n )\n },\n getProjectAerialShotsDates(projectId: ProjectExid): Promise<_360Scene[]> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/360/${projectId}/aerial-shots/dates.json`,\n firebaseRequestConfig\n )\n },\n getProjectDateFloors({\n projectId,\n dateId,\n prefix = \"\",\n }: {\n projectId: ProjectExid\n dateId: string | number\n prefix?: string\n }): Promise<_360Walk> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/360/${projectId}/${prefix}${dateId}.json`,\n firebaseRequestConfig\n )\n },\n getFloorMarkers({\n projectId,\n dateId,\n floorId,\n prefix = \"\",\n }: {\n projectId: ProjectExid\n dateId: string | number\n floorId: _360FloorId\n prefix?: string\n }): Promise<_360Marker3D[] | Record<string, _360Marker3D> | null> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/360/${projectId}/${prefix}${dateId}/${floorId}/_3DMarkers.json`,\n firebaseRequestConfig\n )\n },\n },\n forge: {\n getAccessToken(): Promise<{ access_token: string }> {\n return axios.get(getForgeTokenServerUrl(), firebaseRequestConfig)\n },\n getProjectInfo(projectExid: ProjectExid): Promise<ForgeProjectData | null> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/forge/${projectExid}.json`,\n firebaseRequestConfig\n )\n },\n getUrns(projectExid: ProjectExid): Promise<ForgeUrn[] | null> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/forge/${projectExid}/urns.json`,\n firebaseRequestConfig\n )\n },\n saveModelView({\n projectId,\n modelIndex,\n viewId,\n view,\n }: {\n projectId: ProjectExid\n modelIndex: number\n viewId: string\n view: ForgeView\n }): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/forge/${projectId}/urns/${modelIndex}/savedViews/${viewId}.json`,\n view,\n firebaseRequestConfig\n )\n },\n saveMarkers(projectId: string, markers: ForgeMarker[]): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/forge/${projectId}/markers.json`,\n markers,\n firebaseRequestConfig\n )\n },\n },\n itwin: {\n getProjectInfo(projectId: string): Promise<ItwinProjectData | null> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/itwin/${projectId}.json`,\n firebaseRequestConfig\n )\n },\n clearBimCompare(projectId: string): Promise<void> {\n return axios.delete(\n `${getFirebaseDbApi()}data/projects/itwin/${projectId}/bim-compare.json`,\n firebaseRequestConfig\n )\n },\n clearSiteView(projectId: string, modelIndex: number): Promise<void> {\n return axios.delete(\n `${getFirebaseDbApi()}data/projects/itwin/${projectId}/models/${modelIndex}/site-view.json`,\n firebaseRequestConfig\n )\n },\n },\n siteView: {\n getCamerasList(): Promise<SiteViewCameraListItem[]> {\n return axios.get(\n `${getFirebaseDbApi()}data/cameras-list.json`,\n firebaseRequestConfig\n )\n },\n updateCamerasList(\n items: Record<number, SiteViewCameraListItem>\n ): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/cameras-list.json`,\n items,\n firebaseRequestConfig\n )\n },\n updateCamerasListItem(\n trueIndex: number,\n item: SiteViewCameraListItem\n ): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/cameras-list/${trueIndex}.json`,\n item,\n firebaseRequestConfig\n )\n },\n updateProjectData({\n viewerType,\n projectId,\n data,\n }: {\n viewerType: SiteViewerType\n projectId: ProjectExid\n data: ForgeProjectData | ItwinProjectData | DroneProjectDataPatch\n }): Promise<void> {\n const viewerPath = viewerType.toLowerCase()\n\n return axios.patch(\n `${getFirebaseDbApi()}data/projects/${viewerPath}/${projectId}.json`,\n data,\n firebaseRequestConfig\n )\n },\n deleteProjectData(\n viewerType: SiteViewerType,\n projectId: ProjectExid\n ): Promise<void> {\n const viewerPath = viewerType.toLowerCase()\n\n return axios.delete(\n `${getFirebaseDbApi()}data/projects/${viewerPath}/${projectId}.json`,\n firebaseRequestConfig\n )\n },\n readAllData(dbLink: string): Promise<Record<string, unknown>> {\n return axios.get(`${dbLink}data.json`, firebaseRequestConfig)\n },\n writeAllData(dbLink: string, data: Record<string, unknown>): Promise<void> {\n return axios.put(`${dbLink}data.json`, data, firebaseRequestConfig)\n },\n },\n map: {\n getMapViews(projectExid: ProjectExid): Promise<MapView[]> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/maps/${projectExid}.json`,\n firebaseRequestConfig\n )\n },\n updateMapViews(\n projectExid: ProjectExid,\n mapViews: Record<string, MapView>\n ): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/maps/${projectExid}.json`,\n mapViews,\n firebaseRequestConfig\n )\n },\n },\n safety: {\n getTPulseLink(projectExid: ProjectExid): Promise<{ link?: string } | null> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/safety/${projectExid}.json`,\n firebaseRequestConfig\n )\n },\n updateTPulseLink(projectExid: ProjectExid, link: string): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/safety/${projectExid}.json`,\n { link },\n firebaseRequestConfig\n )\n },\n },\n planner: {\n getPlannerList(): Promise<Record<string, PlannerListItem>> {\n return axios.get(`${getFirebaseDbApi()}data/planner-list.json`, {\n ...firebaseRequestConfig,\n })\n },\n getPlannerItem(sitePlanId: string): Promise<PlannerListItem | null> {\n return axios.get(\n `${getFirebaseDbApi()}data/planner-list/${sitePlanId}.json`,\n firebaseRequestConfig\n )\n },\n saveSitePlanMetaData(\n sitePlanId: string,\n payload: PlannerListItem\n ): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/planner-list/${sitePlanId}.json`,\n payload,\n firebaseRequestConfig\n )\n },\n getSitePlan(sitePlanId: string): Promise<SitePlan | null> {\n return axios.get(\n `${getFirebaseDbApi()}data/projects/planner/${sitePlanId}.json`,\n firebaseRequestConfig\n )\n },\n saveSitePlan(sitePlanId: string, payload: SitePlan): Promise<void> {\n return axios.put(\n `${getFirebaseDbApi()}data/projects/planner/${sitePlanId}.json`,\n payload,\n firebaseRequestConfig\n )\n },\n },\n}\n","import { axios } from \"./client\"\nimport { toQueryString } from \"@evercam/api/utils\"\nimport {\n AnprQueryParams,\n AnprEvent,\n EventCountRequestPayload,\n EventCountResponsePayload,\n EventsExportRequestParameters,\n GateReportROI,\n PaginatedItems,\n GateReportVerifiedDay,\n ProjectExid,\n CameraExid,\n AnprCountsQueryParams,\n AnprCount,\n AnprBasedGateReportExportRequestParams,\n GateReportResponsePayload,\n GatReportRequestPayload,\n VerifiedDaysQueryParams,\n VerifyDayUpdateRequestPayload,\n ProcessedDaysQueryParams,\n RoisQueryParams,\n GateReportRoiRequestPayload,\n SegmentsSimilaritySearchParams,\n DetectionsFilters,\n TrackingsByLabel,\n SegmentsByLabel,\n DetectionsCountsParams,\n DetectionsPresenceByLabel,\n SmartSearchBackendQueryPayload,\n SavedQuery,\n DateType,\n DetectionsRequestParams,\n DetectionsGroup,\n DetectionsCountsByPeriod,\n ObservationEvent,\n ObservationEventsQueryParams,\n ObservationEventsCountsQueryParams,\n ObservationEventsExportQueryParams,\n ObservationApprovalUpdateResponse,\n ObservationEventCount,\n ObservationType,\n DetectionsExportRequestParams,\n SegmentsFilters,\n DownloadFileType,\n SmartSearchBackendQuery,\n SmartSearchHeatmapData,\n SmartSearchOperatorType,\n DetectionLabel,\n SmartSearchResponse,\n SmartSearchRequestPayload,\n LegacyAnprExportParams,\n AnprBulkUpdateRequestPayload,\n AnprUpdateRequestPayload,\n SmartSearchQueriesRequestPayload,\n _360FloorId,\n CreateCoolifyAppRequestPayload,\n RegisterCoolifyAppResponsePayload,\n SaveCoolifyAppRequestPayload,\n SegmentsCountsParams,\n SegmentsPresenceResponse,\n AiPrompt,\n AiPromptCreatePayload,\n AiPromptCreateResponse,\n AiPromptDeleteResponse,\n AiPromptListResponse,\n AiPromptQueryParams,\n AiPromptUpdatePayload,\n AiPromptUpdateResponse,\n AiSubpromptCreatePayload,\n AiObservationType,\n AiObservationTypeCreatePayload,\n AiObservationTypeCreateResponse,\n AiObservationTypeDeleteResponse,\n AiObservationTypeListResponse,\n AiObservationTypeQueryParams,\n AiObservationTypeUpdatePayload,\n AiObservationTypeUpdateResponse,\n ObservationConfig,\n UpsertObservationConfigPayload,\n AiApiKey,\n AiApiKeyCreatePayload,\n AiApiKeyCreateResponse,\n AiApiKeyDeleteResponse,\n AiApiKeyQueryParams,\n AiApiKeyUpdatePayload,\n AiApiKeyUpdateResponse,\n APIEnvelope,\n AppActionResponse,\n AppRuntimeState,\n CoolifyProjectOption,\n CoolifyServerOption,\n CreateGateReportAppPayload,\n CreateGateReportAppResponse,\n GateReportAppEvents,\n GateReportAppsQueryParams,\n GateReportManagedApp,\n UpdateGateReportAppPayload,\n CreateSiteAnalyticsAppPayload,\n CreateSiteAnalyticsAppResponse,\n DeleteSiteAnalyticsAppResponse,\n ModelOption,\n SiteAnalyticsManagedApp,\n SiteAnalyticsManagementListParams,\n UpdateSiteAnalyticsAppPayload,\n ObservationEventQueryParams,\n ObservationEventListResponse,\n ObservationModelOption,\n ObservationEventReviewPayload,\n ObservationEventReviewResponse,\n ObservationSourceType,\n SiteAnalyticsObservationEvent,\n Walk360Activity,\n Walk360Config,\n Walk360ConfigSummary,\n Walk360ProcessedSession,\n Walk360WorkerAction,\n} from \"@evercam/api/types\"\nimport type { AxiosPromise, AxiosRequestConfig } from \"axios\"\n\nexport const getAiApiUrl = (): string => axios.env.aiApiUrl!\nexport const getAiApiUrlV2 = (): string => `${axios.env.aiApiUrl}/v2`\n\nexport const AiApi = {\n anpr: {\n exportAnprLegacyEvents(\n projectExid: ProjectExid,\n params: LegacyAnprExportParams\n ) {\n return axios({\n url: `${getAiApiUrl()}/projects/${projectExid}/anpr/export?${toQueryString(\n params\n )}`,\n method: \"GET\",\n responseType: \"blob\",\n })\n },\n getAnprEvents(\n projectExid: ProjectExid,\n params: AnprQueryParams,\n extraParams: AxiosRequestConfig = {}\n ): Promise<PaginatedItems<AnprEvent>> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/anpr?${toQueryString(\n params\n )}`,\n extraParams\n )\n },\n getAnprCounts(\n projectExid: ProjectExid,\n payload: AnprCountsQueryParams,\n extraParams?: AxiosRequestConfig\n ): Promise<AnprCount[]> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/anpr/counts?${toQueryString(\n payload\n )}`,\n extraParams\n )\n },\n updateAnprEvent(anprEventId: string, payload: AnprUpdateRequestPayload) {\n return axios.patch(`${getAiApiUrlV2()}/anpr/${anprEventId}`, payload)\n },\n bulkUpdateAnprRecords(\n payload: AnprBulkUpdateRequestPayload\n ): Promise<void> {\n return axios.patch(`${getAiApiUrlV2()}/anpr/status`, payload)\n },\n exportAnprEvents(\n projectExid: string,\n params: AnprBasedGateReportExportRequestParams\n ): AxiosPromise<string> {\n return axios({\n url: `${getAiApiUrlV2()}/projects/${projectExid}/anpr/events/export?${toQueryString<AnprBasedGateReportExportRequestParams>(\n params\n )}`,\n method: \"GET\",\n responseType: \"blob\",\n })\n },\n },\n gateReport: {\n exportEvents(projectExid: string, params: EventsExportRequestParameters) {\n return axios({\n url: `${getAiApiUrlV2()}/projects/${projectExid}/gate-report/events/export?${toQueryString<EventsExportRequestParameters>(\n params\n )}`,\n method: \"GET\",\n responseType: \"blob\",\n })\n },\n exportEventsProgress(projectExid: string, params: { exportDate: string }) {\n return axios.get(\n `${getAiApiUrl()}/projects/${projectExid}/gate-report/events/export/progress?${toQueryString(\n params\n )}`\n )\n },\n\n generateAnprThumbnail(cameraExid: CameraExid, captureTime: string) {\n return axios.post(\n `${getAiApiUrlV2()}/cameras/${cameraExid}/anpr/${captureTime}/snapshot/generate`,\n {},\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n )\n },\n\n getVerifiedDays(\n projectExid: ProjectExid,\n params: Partial<VerifiedDaysQueryParams>,\n extraParams = {}\n ): Promise<PaginatedItems<GateReportVerifiedDay>> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/gate-report/verified-days?${toQueryString(\n params\n )}`,\n extraParams\n )\n },\n verifyDay(params: VerifyDayUpdateRequestPayload) {\n return axios.post(\n `${getAiApiUrlV2()}/projects/gate-report/verified-days`,\n params\n )\n },\n getDailyStatus(\n projectExid: string,\n params: Partial<ProcessedDaysQueryParams> = {}\n ): Promise<string[]> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/gate-report/processed-days`,\n { params }\n )\n },\n getEvents(\n projectExid: ProjectExid,\n params: GatReportRequestPayload,\n extraParams: AxiosRequestConfig = {}\n ): Promise<GateReportResponsePayload> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/gate-report/events?${toQueryString(\n params\n )}`,\n extraParams\n )\n },\n getCounts(\n projectExid: string,\n payload: EventCountRequestPayload = {},\n extraParams: AxiosRequestConfig = {}\n ): Promise<EventCountResponsePayload> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/gate-report/counts?${toQueryString(\n payload\n )}`,\n extraParams\n )\n },\n },\n brainTool: {\n getObjectDetectionsResults(payload = {}) {\n return axios.post(\n `${getAiApiUrlV2()}/ai-models/object-detection`,\n payload\n )\n },\n },\n roi: {\n getROIs(\n projectExid: string,\n params: Partial<RoisQueryParams> = {}\n ): Promise<GateReportROI[]> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/rois?${toQueryString(\n params\n )}`\n )\n },\n listROIs(params: Partial<RoisQueryParams> = {}): Promise<GateReportROI[]> {\n return axios.get(`${getAiApiUrlV2()}/rois?${toQueryString(params)}`)\n },\n createROI(\n params: Omit<GateReportRoiRequestPayload, \"id\"> & { createdBy?: string }\n ) {\n return axios.post(`${getAiApiUrlV2()}/rois`, params)\n },\n updateROI({\n updatedBy,\n id,\n ...params\n }: Partial<GateReportRoiRequestPayload> & { updatedBy?: string }) {\n return axios.patch(\n `${getAiApiUrlV2()}/rois/${id}?${toQueryString({\n updatedBy,\n })}`,\n params\n )\n },\n deleteROI({ id, updatedBy }: { id: number; updatedBy: string }) {\n return axios.patch(\n `${getAiApiUrlV2()}/rois/${id}?${toQueryString({\n updatedBy,\n })}`,\n { isActive: false, note: \"delete roi\" }\n )\n },\n },\n detections: {\n async getDetectionsCounts(\n { projectExid, ...params }: Partial<DetectionsRequestParams>,\n extraParams: AxiosRequestConfig = {}\n ): Promise<DetectionsCountsByPeriod> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/trackings/counts?${toQueryString(\n params\n )}`,\n extraParams\n )\n },\n async getDetectionsByTimestamp(\n { projectExid, ...params }: DetectionsRequestParams,\n extraParams: AxiosRequestConfig = {}\n ): Promise<PaginatedItems<DetectionsGroup>> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/trackings/timestamps?${toQueryString(\n params\n )}`,\n extraParams\n )\n },\n async getSimilarSegmentsInTimeIntervals({\n cameraExid,\n iouThreshold = 0.8,\n ...params\n }: SegmentsSimilaritySearchParams) {\n return axios.get(\n `${getAiApiUrlV2()}/cameras/${cameraExid}/segments/appearance-from-points`,\n {\n params: {\n cameraExid,\n iouThreshold,\n ...params,\n },\n }\n )\n },\n async getGroupedTrackings(\n projectExid: ProjectExid,\n params: DetectionsFilters\n ): Promise<TrackingsByLabel> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/trackings/grouped?${toQueryString(\n params\n )}`\n )\n },\n async getSegmentsMasks(\n cameraExid: CameraExid,\n params: SegmentsFilters\n ): Promise<{ segments: SegmentsByLabel }> {\n return axios.get(\n `${getAiApiUrlV2()}/cameras/${cameraExid}/segments/masks`,\n {\n params,\n }\n )\n },\n async getSegmentsPresenceDateIntervals({\n cameraExid,\n ...params\n }: SegmentsCountsParams): Promise<SegmentsPresenceResponse> {\n return axios.get(\n `${getAiApiUrlV2()}/cameras/${cameraExid}/segments/presence-intervals?${toQueryString(\n params\n )}`\n )\n },\n async getDetectionsPresenceDateIntervals({\n projectExid,\n ...params\n }: DetectionsCountsParams): Promise<DetectionsPresenceByLabel> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/trackings/presence-intervals?${toQueryString(\n params\n )}`\n )\n },\n async requestExport({\n projectExid,\n ...params\n }: DetectionsExportRequestParams) {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/detections/timestamps/export?${toQueryString(\n params\n )}`,\n { responseType: \"blob\" }\n )\n },\n },\n observations: {\n getEvents(\n {\n projectExid,\n ...params\n }: { projectExid: ProjectExid } & ObservationEventsQueryParams,\n extraParams: AxiosRequestConfig = {}\n ): Promise<PaginatedItems<ObservationEvent>> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/observations?${toQueryString(\n params\n )}`,\n extraParams\n )\n },\n getCounts(\n {\n projectExid,\n ...params\n }: { projectExid: ProjectExid } & ObservationEventsCountsQueryParams,\n extraParams: AxiosRequestConfig = {}\n ): Promise<APIEnvelope<ObservationEventCount[]>> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/observations/counts?${toQueryString(\n params\n )}`,\n extraParams\n )\n },\n getConfiguredTypes(\n projectExid: ProjectExid,\n extraParams: AxiosRequestConfig = {}\n ): Promise<APIEnvelope<ObservationType[]>> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/observations/configured-types`,\n extraParams\n )\n },\n exportEvents(\n {\n projectExid,\n ...params\n }: { projectExid: ProjectExid } & ObservationEventsExportQueryParams,\n extraParams: AxiosRequestConfig = {}\n ): Promise<Blob | { message: string }> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/ppe-events/export?${toQueryString(\n params\n )}`,\n extraParams\n )\n },\n updateEventApproval({\n projectExid,\n eventId,\n isApproved,\n }: {\n projectExid: ProjectExid\n eventId: number\n isApproved: boolean | null\n }): Promise<ObservationApprovalUpdateResponse> {\n return axios.patch(\n `${getAiApiUrlV2()}/projects/${projectExid}/observations/${eventId}/approval`,\n { isApproved }\n )\n },\n },\n siteAnalytics: {\n smartSearchAll(\n projectExid: ProjectExid,\n params: SmartSearchRequestPayload\n ): Promise<SmartSearchResponse> {\n const { payload, ...restParams } = params\n const queryParams = {\n page: 1,\n limit: 20,\n ...restParams,\n }\n\n let url = `${getAiApiUrlV2()}/projects/${projectExid}/smart-search/all?${toQueryString(\n queryParams\n )}`\n\n return axios.post(url, payload)\n },\n smartSearchFirstLastSeen(\n projectExid: ProjectExid,\n params: SmartSearchRequestPayload\n ): Promise<SmartSearchResponse> {\n const { payload, ...restParams } = params\n const queryParams = {\n page: 1,\n limit: 20,\n ...restParams,\n }\n\n let url = `${getAiApiUrlV2()}/projects/${projectExid}/smart-search/first-last-seen?${toQueryString(\n queryParams\n )}`\n\n return axios.post(url, payload)\n },\n saveQuery({\n projectExid,\n cameraExid,\n payload,\n }: {\n projectExid: ProjectExid\n cameraExid: CameraExid | _360FloorId\n payload: SmartSearchBackendQueryPayload\n }) {\n return axios.post(\n `${getAiApiUrlV2()}/projects/${projectExid}/cameras/${cameraExid}/smart-search/queries`,\n payload\n )\n },\n getQueries(\n projectExid: ProjectExid,\n params: SmartSearchQueriesRequestPayload\n ): Promise<SavedQuery[]> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/smart-search/queries?${toQueryString(\n params\n )}`\n )\n },\n getQueryById(\n projectExid: ProjectExid,\n cameraExid: CameraExid,\n queryId: number\n ): Promise<SmartSearchBackendQueryPayload> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/smart-search/queries/${queryId}?${toQueryString(\n { cameraExid }\n )}`\n )\n },\n updateQuery({\n projectExid,\n cameraExid,\n queryId,\n payload,\n }: {\n projectExid: ProjectExid\n cameraExid: CameraExid\n queryId: number\n payload: Partial<SavedQuery>\n }) {\n return axios.patch(\n `${getAiApiUrlV2()}/projects/${projectExid}/cameras/${cameraExid}/smart-search/queries/${queryId}`,\n payload\n )\n },\n deleteQuery({\n projectExid,\n cameraExid,\n queryId,\n }: {\n projectExid: ProjectExid\n cameraExid: CameraExid\n queryId: number\n }) {\n return axios.delete(\n `${getAiApiUrlV2()}/projects/${projectExid}/cameras/${cameraExid}/smart-search/queries/${queryId}`,\n {}\n )\n },\n exportResultsData({\n projectExid,\n cameraExids,\n fromDate,\n toDate,\n query,\n fileType = DownloadFileType.Csv,\n directDownload = true,\n payload,\n limit,\n page,\n }: {\n projectExid: ProjectExid\n cameraExids: CameraExid[]\n fromDate?: DateType\n toDate?: DateType\n query: string\n fileType: DownloadFileType\n directDownload?: boolean\n payload: SmartSearchBackendQuery\n limit: number\n page: number\n }): Promise<any> {\n return axios.post(\n `${getAiApiUrlV2()}/projects/${projectExid}/smart-search/export?${toQueryString(\n {\n cameraExids,\n fromDate,\n toDate,\n query,\n fileType,\n directDownload,\n limit,\n page,\n }\n )}`,\n payload,\n {\n responseType: \"blob\",\n }\n )\n },\n getDetectionsHeatmapData(\n projectExid: ProjectExid,\n params: {\n cameraExid: CameraExid\n fromDate: DateType | string | null\n toDate: DateType | string | null\n labels: DetectionLabel[]\n operator?: SmartSearchOperatorType\n }\n ): Promise<SmartSearchHeatmapData[]> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/smart-search/heatmap?${toQueryString(\n params\n )}`,\n {}\n )\n },\n },\n siteAnalyticsManagement: {\n listApps(\n params: SiteAnalyticsManagementListParams = {}\n ): Promise<PaginatedItems<SiteAnalyticsManagedApp>> {\n return axios.get(\n `${getAiApiUrlV2()}/site-analytics-management/apps?${toQueryString(\n params as Record<string, unknown>\n )}`\n )\n },\n createApp(\n payload: CreateSiteAnalyticsAppPayload\n ): Promise<CreateSiteAnalyticsAppResponse> {\n return axios.post(\n `${getAiApiUrlV2()}/site-analytics-management/apps`,\n payload\n )\n },\n getApp(\n projectExid: ProjectExid,\n cameraExid: CameraExid\n ): Promise<APIEnvelope<SiteAnalyticsManagedApp>> {\n return axios.get(\n `${getAiApiUrlV2()}/site-analytics-management/apps/${projectExid}/${cameraExid}`\n )\n },\n updateApp(\n projectExid: ProjectExid,\n cameraExid: CameraExid,\n payload: UpdateSiteAnalyticsAppPayload\n ): Promise<APIEnvelope<SiteAnalyticsManagedApp>> {\n return axios.patch(\n `${getAiApiUrlV2()}/site-analytics-management/apps/${projectExid}/${cameraExid}`,\n payload\n )\n },\n deleteApp(\n projectExid: ProjectExid,\n cameraExid: CameraExid\n ): Promise<DeleteSiteAnalyticsAppResponse> {\n return axios.delete(\n `${getAiApiUrlV2()}/site-analytics-management/apps/${projectExid}/${cameraExid}`\n )\n },\n setAppState(\n projectExid: ProjectExid,\n cameraExid: CameraExid,\n state: AppRuntimeState\n ): Promise<APIEnvelope<AppActionResponse>> {\n return axios.patch(\n `${getAiApiUrlV2()}/site-analytics-management/apps/${projectExid}/${cameraExid}/state`,\n { state }\n )\n },\n listCoolifyServers(): Promise<APIEnvelope<CoolifyServerOption[]>> {\n return axios.get(\n `${getAiApiUrlV2()}/site-analytics-management/coolify-servers`\n )\n },\n listModelVersions(): Promise<APIEnvelope<ModelOption[]>> {\n return axios.get(\n `${getAiApiUrlV2()}/site-analytics-management/model-versions`\n )\n },\n },\n coolify: {\n getCoolifyServers() {\n return axios.get(`${getAiApiUrlV2()}/coolify/servers`)\n },\n createAppOnCoolify({\n projectExid,\n cameraExid,\n payload,\n }: {\n projectExid: ProjectExid\n cameraExid: CameraExid\n payload: CreateCoolifyAppRequestPayload\n }) {\n return axios.post(\n `${getAiApiUrlV2()}/projects/${projectExid}/cameras/${cameraExid}/anpr/apps`,\n payload\n )\n },\n registerCoolifyApp({\n projectExid,\n cameraExid,\n payload,\n }: {\n projectExid: ProjectExid\n cameraExid: CameraExid\n payload: SaveCoolifyAppRequestPayload\n }): Promise<RegisterCoolifyAppResponsePayload> {\n return axios.post(\n `${getAiApiUrlV2()}/projects/${projectExid}/cameras/${cameraExid}/gate-report/apps`,\n payload\n )\n },\n updateApp({\n appUuid,\n appId,\n payload,\n cameraExid,\n projectExid,\n }: {\n projectExid: string\n cameraExid: string\n appId: string\n appUuid: string\n payload: Partial<SaveCoolifyAppRequestPayload>\n }) {\n return axios.patch(\n `${getAiApiUrlV2()}/projects/${projectExid}/cameras/${cameraExid}/gate-report/apps/${appId}?app_uuid=${appUuid}`,\n payload\n )\n },\n deleteApp({\n appUuid,\n appId,\n cameraExid,\n projectExid,\n }: {\n projectExid: string\n cameraExid: string\n appId: string\n appUuid: string\n }) {\n return axios.delete(\n `${getAiApiUrlV2()}/projects/${projectExid}/cameras/${cameraExid}/gate-report/apps/${appId}?app_uuid=${appUuid}`\n )\n },\n startService(serviceId: string) {\n return axios.post(\n `${getAiApiUrlV2()}/coolify/services/${serviceId}/start`\n )\n },\n pauseService(serviceId: string) {\n return axios.post(`${getAiApiUrlV2()}/coolify/services/${serviceId}/stop`)\n },\n restartService(serviceId: string) {\n return axios.post(\n `${getAiApiUrlV2()}/coolify/services/${serviceId}/restart`\n )\n },\n },\n fovChanges: {\n getCameraFovChanges(\n cameraExid: string,\n extraConfig: AxiosRequestConfig = {}\n ) {\n return axios.post(\n `${getAiApiUrlV2()}/cameras/${cameraExid}/fov_changes`,\n {},\n extraConfig\n )\n },\n },\n prompts: {\n list(params: AiPromptQueryParams = {}): Promise<AiPromptListResponse> {\n return axios.get(`${getAiApiUrlV2()}/prompts?${toQueryString(params)}`)\n },\n get(promptId: number): Promise<AiPrompt> {\n return axios.get(`${getAiApiUrlV2()}/prompts/${promptId}`)\n },\n create(payload: AiPromptCreatePayload): Promise<AiPromptCreateResponse> {\n return axios.post(`${getAiApiUrlV2()}/prompts`, payload)\n },\n update(\n promptId: number,\n payload: AiPromptUpdatePayload\n ): Promise<AiPromptUpdateResponse> {\n return axios.patch(`${getAiApiUrlV2()}/prompts/${promptId}`, payload)\n },\n delete(promptId: number): Promise<AiPromptDeleteResponse> {\n return axios.delete(`${getAiApiUrlV2()}/prompts/${promptId}`)\n },\n listSubprompts(promptId: number): Promise<AiPrompt[]> {\n return axios.get(`${getAiApiUrlV2()}/prompts/${promptId}/subprompts`)\n },\n createSubprompt(\n promptId: number,\n payload: AiSubpromptCreatePayload\n ): Promise<AiPromptCreateResponse> {\n return axios.post(\n `${getAiApiUrlV2()}/prompts/${promptId}/subprompts`,\n payload\n )\n },\n },\n observations360: {\n getWalkConfig(projectExid: string): Promise<{ data: Walk360Config }> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/observations/walk-config`\n )\n },\n saveWalkConfig(\n projectExid: string,\n payload: {\n enabled: boolean\n startDate: string | null\n activities: Walk360Activity[]\n maxParallelWalks?: number\n visionProvider?: string\n coolifyServerUuid?: string | null\n }\n ): Promise<{ data: Walk360Config }> {\n return axios.put(\n `${getAiApiUrlV2()}/projects/${projectExid}/observations/walk-config`,\n payload\n )\n },\n listProcessedWalks(\n projectExid: string\n ): Promise<{ data: Walk360ProcessedSession[] }> {\n return axios.get(\n `${getAiApiUrlV2()}/projects/${projectExid}/observations/walks`\n )\n },\n listWalkTypes(): Promise<{ data: AiObservationType[] }> {\n return axios.get(\n `${getAiApiUrlV2()}/observations/types?source_type=${\n ObservationSourceType.Walk360\n }`\n )\n },\n listConfigs(): Promise<{ data: Walk360ConfigSummary[] }> {\n return axios.get(`${getAiApiUrlV2()}/observations/walk-configs`)\n },\n deleteWalkConfig(projectExid: string): Promise<{ deleted: boolean }> {\n return axios.delete(\n `${getAiApiUrlV2()}/projects/${projectExid}/observations/walk-config`\n )\n },\n setWorkerState(\n projectExid: string,\n state: AppRuntimeState\n ): Promise<{ data: Walk360WorkerAction }> {\n return axios.patch(\n `${getAiApiUrlV2()}/projects/${projectExid}/observations/walk-worker/state`,\n { state }\n )\n },\n },\n observationTypes: {\n list(\n params: AiObservationTypeQueryParams = {}\n ): Promise<AiObservationTypeListResponse> {\n return axios.get(\n `${getAiApiUrlV2()}/observation-types?${toQueryString(params)}`\n )\n },\n get(observationTypeId: number): Promise<AiObservationType> {\n return axios.get(\n `${getAiApiUrlV2()}/observation-types/${observationTypeId}`\n )\n },\n create(\n payload: AiObservationTypeCreatePayload\n ): Promise<AiObservationTypeCreateResponse> {\n return axios.post(`${getAiApiUrlV2()}/observation-types`, payload)\n },\n update(\n observationTypeId: number,\n payload: AiObservationTypeUpdatePayload\n ): Promise<AiObservationTypeUpdateResponse> {\n return axios.patch(\n `${getAiApiUrlV2()}/observation-types/${observationTypeId}`,\n payload\n )\n },\n delete(\n observationTypeId: number\n ): Promise<AiObservationTypeDeleteResponse> {\n return axios.delete(\n `${getAiApiUrlV2()}/observation-types/${observationTypeId}`\n )\n },\n },\n siteAnalyticsObservations: {\n getConfig(cameraExid: string): Promise<ObservationConfig> {\n return axios.get(\n `${getAiApiUrlV2()}/site-analytics/observation-configs/${cameraExid}`\n )\n },\n upsertConfig(\n cameraExid: string,\n payload: UpsertObservationConfigPayload\n ): Promise<ObservationConfig> {\n return axios.put(\n `${getAiApiUrlV2()}/site-analytics/observation-configs/${cameraExid}`,\n payload\n )\n },\n deleteConfig(\n cameraExid: string\n ): Promise<{ deleted: boolean; count: number; message: string }> {\n return axios.delete(\n `${getAiApiUrlV2()}/site-analytics/observation-configs/${cameraExid}`\n )\n },\n },\n apiKeys: {\n list(params: AiApiKeyQueryParams = {}): Promise<AiApiKey[]> {\n const query = toQueryString(params)\n\n return axios.get(`${getAiApiUrlV2()}/api-keys${query ? `?${query}` : \"\"}`)\n },\n purposes(): Promise<string[]> {\n return axios.get(`${getAiApiUrlV2()}/api-keys/purposes`)\n },\n get(keyId: number): Promise<AiApiKey> {\n return axios.get(`${getAiApiUrlV2()}/api-keys/${keyId}`)\n },\n create(payload: AiApiKeyCreatePayload): Promise<AiApiKeyCreateResponse> {\n return axios.post(`${getAiApiUrlV2()}/api-keys`, payload)\n },\n update(\n keyId: number,\n payload: AiApiKeyUpdatePayload\n ): Promise<AiApiKeyUpdateResponse> {\n return axios.patch(`${getAiApiUrlV2()}/api-keys/${keyId}`, payload)\n },\n delete(\n keyId: number,\n revoke: boolean = false\n ): Promise<AiApiKeyDeleteResponse> {\n const query = revoke ? \"?revoke=true\" : \"\"\n\n return axios.delete(`${getAiApiUrlV2()}/api-keys/${keyId}${query}`)\n },\n },\n observationEvents: {\n async list(\n params: ObservationEventQueryParams = {}\n ): Promise<ObservationEventListResponse> {\n const { sortBy, sortDir, observationTypeIds, ...rest } = params\n const query: Record<string, unknown> = { ...rest }\n if (!query.sourceType) {\n delete query.sourceType\n }\n if (!query.modelName) {\n delete query.modelName\n }\n if (observationTypeIds) {\n query.observationTypeId = observationTypeIds\n }\n if (sortBy) {\n query.sort = `${sortBy}|${sortDir || \"desc\"}`\n }\n const response = (await axios.get(\n `${getAiApiUrlV2()}/observations?${toQueryString(query)}`\n )) as unknown as {\n items: Array<Record<string, unknown>>\n total: number\n page: number\n limit: number\n from: number\n to: number\n }\n\n return {\n ...response,\n items: (response.items || []).map(\n (item) =>\n ({\n ...item,\n observationName: null,\n startTime: item.capturedAt,\n aiEvidence: item.reason,\n bbox: item.personBbox,\n model: item.modelVersion,\n promptId: null,\n insertedAt: item.capturedAt,\n } as unknown as SiteAnalyticsObservationEvent)\n ),\n }\n },\n frameUrl(\n eventId: number,\n options: { thumbnail?: boolean; token?: string | null } = {}\n ): string {\n const params = new URLSearchParams()\n if (options.thumbnail) {\n params.set(\"thumbnail\", \"true\")\n }\n if (options.token) {\n params.set(\"authorization\", options.token)\n }\n const query = params.toString()\n\n return `${getAiApiUrlV2()}/observations/${eventId}/frame${\n query ? `?${query}` : \"\"\n }`\n },\n projects(): Promise<{\n data: Array<{ projectExid: string; total: number }>\n }> {\n return axios.get(`${getAiApiUrlV2()}/observations/projects`)\n },\n models(): Promise<APIEnvelope<ObservationModelOption[]>> {\n return axios.get(`${getAiApiUrlV2()}/observations/models`)\n },\n review(\n projectExid: string,\n eventId: number,\n payload: ObservationEventReviewPayload\n ): Promise<ObservationEventReviewResponse> {\n const verdicts: Record<string, boolean | string> = {\n approved: true,\n disapproved: false,\n unsure: \"unsure\",\n }\n\n return axios.patch(\n `${getAiApiUrlV2()}/projects/${projectExid}/observations/${eventId}/approval`,\n { isApproved: verdicts[payload.status] }\n )\n },\n },\n gateReportManagement: {\n listApps(\n params: GateReportAppsQueryParams = {}\n ): Promise<PaginatedItems<GateReportManagedApp>> {\n return axios.get(\n `${getAiApiUrlV2()}/gate-report/apps?${toQueryString(\n params as Record<string, unknown>\n )}`\n )\n },\n getApp(\n projectExid: ProjectExid,\n cameraExid: CameraExid\n ): Promise<APIEnvelope<GateReportManagedApp>> {\n return axios.get(\n `${getAiApiUrlV2()}/gate-report/apps/${projectExid}/${cameraExid}`\n )\n },\n listAppEvents(\n projectExid?: ProjectExid\n ): Promise<APIEnvelope<GateReportAppEvents[]>> {\n return axios.get(\n `${getAiApiUrlV2()}/gate-report/apps/last-event-status?${toQueryString({\n projectExid,\n } as Record<string, unknown>)}`\n )\n },\n createApp(\n payload: CreateGateReportAppPayload\n ): Promise<CreateGateReportAppResponse> {\n return axios.post(`${getAiApiUrlV2()}/gate-report/apps`, payload)\n },\n updateApp(\n projectExid: ProjectExid,\n cameraExid: CameraExid,\n payload: UpdateGateReportAppPayload\n ): Promise<APIEnvelope<GateReportManagedApp>> {\n return axios.patch(\n `${getAiApiUrlV2()}/gate-report/apps/${projectExid}/${cameraExid}`,\n payload\n )\n },\n deleteApp(\n projectExid: ProjectExid,\n cameraExid: CameraExid\n ): Promise<{ deleted: boolean; count: number; message: string }> {\n return axios.delete(\n `${getAiApiUrlV2()}/gate-report/apps/${projectExid}/${cameraExid}`\n )\n },\n setAppState(\n projectExid: ProjectExid,\n cameraExid: CameraExid,\n state: AppRuntimeState\n ): Promise<APIEnvelope<AppActionResponse>> {\n return axios.patch(\n `${getAiApiUrlV2()}/gate-report/apps/${projectExid}/${cameraExid}/state`,\n { state }\n )\n },\n listCoolifyProjects(): Promise<APIEnvelope<CoolifyProjectOption[]>> {\n return axios.get(`${getAiApiUrlV2()}/gate-report/coolify-projects`)\n },\n listCoolifyServers(): Promise<APIEnvelope<CoolifyServerOption[]>> {\n return axios.get(`${getAiApiUrlV2()}/gate-report/coolify-servers`)\n },\n listImageTags(): Promise<APIEnvelope<string[]>> {\n return axios.get(`${getAiApiUrlV2()}/gate-report/image-tags`)\n },\n },\n}\n","import axios from \"axios\"\n\nexport const WebRtcApi = {\n webRtc: {\n requestIceServers({ url, token }: { url: string; token: string }) {\n return axios({\n url,\n method: \"OPTIONS\",\n headers: {\n Authorization: `Bearer ${token}`,\n },\n })\n },\n sendLocalOffer({\n url,\n token,\n data,\n }: {\n url: string\n token: string\n data: {\n sdp: string\n type: string\n }\n }) {\n return axios({\n url,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/sdp\",\n Authorization: `Bearer ${token}`,\n },\n data,\n })\n },\n sendLocalCandidates({\n url,\n token,\n data,\n tag,\n }: {\n url: string\n token: string\n data: Record<string, unknown>\n tag: string\n }) {\n return axios({\n url,\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/trickle-ice-sdpfrag\",\n \"If-Match\": tag,\n Authorization: `Bearer ${token}`,\n },\n data,\n })\n },\n },\n}\n","import { axios } from \"./client\"\nimport {\n CurrentWeatherRequestPayload,\n HistoryWeatherRequestPayload,\n WeatherDataResponse,\n WeatherReportRequestPayload,\n WeatherResponsePayload,\n} from \"@evercam/api/types\"\nimport { AxiosRequestConfig } from \"axios\"\n\nexport const WeatherApi = {\n current(\n projectExid: string,\n payload: CurrentWeatherRequestPayload\n ): Promise<WeatherResponsePayload> | undefined {\n return axios.get(`/projects/${projectExid}/weather/current`, {\n params: payload,\n })\n },\n historical(\n projectExid: string,\n payload: HistoryWeatherRequestPayload\n ): Promise<WeatherResponsePayload> | undefined {\n return axios.get(`/projects/${projectExid}/weather`, { params: payload })\n },\n report(\n projectExid: string,\n payload: WeatherReportRequestPayload,\n config?: AxiosRequestConfig\n ): Promise<{ data: WeatherDataResponse[] }> | undefined {\n return axios.get(`/projects/${projectExid}/weather/filters`, {\n params: payload,\n ...config,\n })\n },\n}\n","import { axios } from \"./client\"\nimport {\n CameraExid,\n GrafanaKitMetrics,\n LuminanceReading,\n PaginatedItems,\n ActiveUsersResponsePayload,\n ActiveUsersRequestPayload,\n PosthogUsersRequestParams,\n PosthogUsersResponse,\n HeatmapIntersectionsRequestParams,\n SmartSearchHeatmapPoint,\n SiteAnalyticsProcessingStatusPayload,\n SiteAnalyticsProcessingStatus,\n SwrRequestConfig,\n GrafanaMetricId,\n KitMetricPeriod,\n} from \"@evercam/api/types\"\n\nexport function getLabsBaseUrl() {\n const labsPrNumber = /labs-(\\d+)/g.exec(window.location.href)?.[1]\n\n return labsPrNumber\n ? `https://${labsPrNumber}.labs.evercam.io`\n : axios.env.evercamLabsUrl\n}\n\nexport const EvercamLabsApi = {\n posthog: {\n getEvents(params: any): Promise<PaginatedItems<any>> {\n return axios.get(`${getLabsBaseUrl()}/posthog/events`, params)\n },\n getUsers(params: PosthogUsersRequestParams): Promise<PosthogUsersResponse> {\n return axios.get(`${getLabsBaseUrl()}/posthog/users`, {\n params,\n })\n },\n getActiveUsers(\n params: ActiveUsersRequestPayload\n ): Promise<{ data: ActiveUsersResponsePayload }> {\n return axios.get(`${getLabsBaseUrl()}/posthog/active-users`, {\n params,\n preserveCasing: true,\n })\n },\n },\n siteAnalytics: {\n async getProcessingStatus(\n params: SiteAnalyticsProcessingStatusPayload = {},\n config: SwrRequestConfig<SiteAnalyticsProcessingStatus[]> = {}\n ): Promise<SiteAnalyticsProcessingStatus[]> {\n return axios.get(`${getLabsBaseUrl()}/site-analytics/processing-status`, {\n params,\n ...config,\n preserveCasing: true,\n })\n },\n async getIntersectionsHeatmapData(\n params: HeatmapIntersectionsRequestParams\n ): Promise<SmartSearchHeatmapPoint[]> {\n const { cameraExid, ...queryParams } = params\n\n return axios.get(\n `${getLabsBaseUrl()}/site-analytics/cameras/${cameraExid}/heatmap/intersections`,\n {\n params: queryParams,\n preserveCasing: true,\n }\n )\n },\n },\n googleCloudStorage: {\n listFiles(\n prefix: string = \"\"\n ): Promise<{ files: string[]; folders: string[] }> {\n return axios.get(\n `${getLabsBaseUrl()}/gc-storage/buckets/evercam-labs/files`,\n {\n params: {\n prefix,\n },\n preserveCasing: true,\n }\n )\n },\n getSignedUrl(fileName: string): Promise<{ url: string }> {\n return axios.get(\n `${getLabsBaseUrl()}/gc-storage/buckets/evercam-labs/files/signed-url`,\n {\n params: {\n fileName,\n },\n preserveCasing: true,\n }\n )\n },\n },\n luminance: {\n getReadings(params: {\n cameraExid: CameraExid\n fromDate: string\n toDate: string\n }): Promise<LuminanceReading[]> {\n return axios.get(\n `${getLabsBaseUrl()}/cameras/${\n params.cameraExid || \"echel-mdqur\"\n }/luminance/readings`,\n {\n params: {\n fromDate: params.fromDate,\n toDate: params.toDate,\n },\n preserveCasing: true,\n }\n )\n },\n },\n kits: {\n getMetrics(\n kitId: string,\n metrics: GrafanaMetricId[],\n period: KitMetricPeriod = KitMetricPeriod.Last24Hours\n ): Promise<GrafanaKitMetrics> {\n return axios.get(`${getLabsBaseUrl()}/kits/${kitId}/metrics`, {\n params: {\n metrics,\n from: period,\n },\n preserveCasing: true,\n })\n },\n },\n}\n","import { axios } from \"./client\"\nimport type { AxiosRequestConfig } from \"axios\"\nimport { queryStringToObject, toQueryString } from \"@evercam/api/utils\"\nimport {\n Automation,\n GeoJSONPolygon,\n ProgressPhotoItemResponsePayload,\n Project,\n SwrRequestConfig,\n UserFeatureFlag,\n} from \"@evercam/api/types\"\nimport type {\n AconexAuthCallbackParams,\n AconexEditedImageUploadRequestPayload,\n AconexUserProject,\n AconexDocumentSchema,\n AconexDocumentTypeSchema,\n ApiCredentials,\n AutodeskFolder,\n AutodeskProject,\n AutodeskTokenResponsePayload,\n AutodeskSnapshot,\n AutodeskUserHub,\n AvailableDaysRequestPayload,\n AvailableDaysResponsePayload,\n AvailableHoursRequestPayload,\n AvailableHoursResponsePayload,\n BatteryReading,\n BatteryVoltage,\n BimCompareExportRequestPayload,\n BimCreationPayload,\n BIMLayer,\n BIMLayerPostPayload,\n BimLayersQueryParams,\n BimModelRequestPayload,\n BimModelResponsePayload,\n BimPendingImage,\n BimSnapshotRequestPayload,\n BimSnapshotResponsePayload,\n BimUploadCameraParameters,\n CameraNoteResponsePayload,\n CamerasResponsePayload,\n CameraStatusLog,\n CameraUpdateRequestPayload,\n Comment,\n CommentCreationRequestPayload,\n CommentsRequestPayload,\n CommentsScope,\n CompanyCameraSummary,\n CompanyProject,\n CompanyKit,\n CompanySummary,\n CompanyUser,\n Compare,\n CompareRequestPayload,\n ConnectorResponsePayload,\n Credentials,\n FetchCameraQueryParams,\n GoogleAuthRequestPayload,\n LoginRequestPayload,\n User,\n Logo,\n LogoutParams,\n Media,\n MediaCreateRequestPayload,\n MediaFilterQueryParams,\n MediaUpdateRequestPayload,\n MediaUsersResponsePayload,\n NearestSnapshotResponsePayload,\n PaginatedItems,\n PendingBimImagesParams,\n ProcessPendingImagesBimParams,\n ProcoreEditedImageUploadRequestPayload,\n ProcoreObservationFormRequestPayload,\n ProcoreObservationTypesResponsePayload,\n ProcoreProjectsAlbumsPayload,\n ProcoreProjectRequestPayload,\n ProcoreUserCompaniesResponsePayload,\n ProcoreCompanyRequestPayload,\n ProcoreUserProjectsResponsePayload,\n ProcoreUserProjectPermissionsResponsePayload,\n ProcoreObservationAssignee,\n ProcoreObservationDistributionMember,\n ProcoreObservationTrades,\n ProcoreObservationLocation,\n ProcoreObservationSpecificationSection,\n ProcoreObservationForm,\n ProcoreObservationDefaultList,\n ProcoreObservationListItem,\n ProcoreCustomFieldOptionsRequestPayload,\n ProgressPhotosCreateUpdateRequestPayload,\n ProgressPhotosResponsePayload,\n ProgressPhotosUnSubscribeParams,\n ProjectBatteryReading,\n ProjectCreateResponse,\n ProjectExid,\n ProjectLogoResponsePayload,\n ProjectMembersResponsePayload,\n ProjectMembersRequestPayload,\n ProjectInviteMembersResponsePayload,\n MentionableUser,\n RemotePasswordUpdateRequestPayload,\n SessionsListRequestPayload,\n ShareCreateResponsePayload,\n ShareDeletionRequestPayload,\n SharedUsersResponsePayload,\n UpdateCameraRestrictionPayload,\n ReorderCamerasPayload,\n SignupUserRequestPayload,\n Snapshot,\n SnapshotRequestPayload,\n SnapshotRangeRequestPayload,\n SnapshotRangeResponsePayload,\n ThumbnailData,\n TimelapseCreationRequestPayload,\n TimelapseCreationResponsePayload,\n TimelapseSnapshotRequestPayload,\n TimelapseSnapshotResponsePayload,\n UpdatePasswordRequestPayload,\n UserSession,\n UserUpdateRequestPayload,\n VoyageControlConnectorPayload,\n HammertechConnectPayload,\n HammertechProject,\n HammertechIssueType,\n HammertechLocation,\n HammertechCreateIssuePayload,\n HammertechIssueResponse,\n HammertechStoredFilePayload,\n HammertechStoredFileResponse,\n RingCompleteLinkingPayload,\n RingCompleteLinkingResponsePayload,\n RingDevicesResponsePayload,\n RingMoveDevicePayload,\n RingMoveDeviceResponsePayload,\n RingLiveViewPayload,\n RingLiveViewResponse,\n RingStopLiveViewResponse,\n AuthOptionsResponsePayload,\n AuthorizedApp,\n AuthorizedAppsListRequestPayload,\n AuthProviderConfigPayload,\n ConfirmUserRequestPayload,\n DeleteActiveSessionRequestPayload,\n ProjectContactsResponsePayload,\n XWeatherCreatePayload,\n XWeatherResponse,\n Widget,\n WidgetFull,\n WidgetPayload,\n WidgetSessionSettingsPayload,\n WidgetsListRequestPayload,\n Camera,\n ProcoreNextObservationAvailableNumber,\n OAuthClient,\n OAuthClientWithSecret,\n OAuthConsentInfo,\n OAuthConsentPayload,\n OAuthConsentResponse,\n CreateOAuthClientPayload,\n UpdateOAuthClientPayload,\n PaginationParams,\n StoryblokResponse,\n Notification,\n PlaceholderThumbnailData,\n ProjectUsersResponsePayload,\n ProjectMember,\n SnapshotEmailDeliveryRequestPayload,\n SnapshotEmailDeliveryResponsePayload,\n SocketAuthResponsePayload,\n} from \"@evercam/api/types\"\n\nexport const EvercamApi = {\n apiStatus: {\n getApiStatus(): Promise<void> {\n return axios.get(\"/status\")\n },\n },\n users: {\n signup(payload: SignupUserRequestPayload): Promise<User> {\n return axios.post(\"/users\", payload)\n },\n zohoAuthUrl(payload: {\n firstname: string\n lastname: string\n }): Promise<{ url: string }> {\n return axios.post(\"/support/zoho-auth-url\", payload)\n },\n fetchAccessFeatures(\n email: string\n ): Promise<{ features: UserFeatureFlag[] }> {\n return axios.get(`/users/${email}/features`)\n },\n impersonationLogin(token: string): Promise<User> {\n return axios.post(`/auth/impersonate/${token}`)\n },\n fetchLoginOptions(email: string): Promise<AuthOptionsResponsePayload> {\n return axios.get(`/auth/options?email=${email}`)\n },\n fetchSignupOptions(email: string): Promise<AuthOptionsResponsePayload> {\n const url = \"/auth/signup_options\" + (email ? `?email=${email}` : \"\")\n\n return axios.get(url)\n },\n fetchProviderConfig(provider: string): Promise<AuthProviderConfigPayload> {\n return axios.get(`/auth/provider/${provider}`)\n },\n login(params: LoginRequestPayload): Promise<User> {\n return axios.post(\"/auth/login\", toQueryString(params))\n },\n loginWithApiCredentials(apiId: string, apiKey: string): Promise<User> {\n return axios.post(`/auth/login?api_id=${apiId}&api_key=${apiKey}`)\n },\n loginWithWidgetCredentials(\n widgetId: string,\n widgetKey: string\n ): Promise<User> {\n return axios.post(\n `/auth/login?widget_id=${widgetId}&widget_key=${widgetKey}`\n )\n },\n loginWithProvider(\n provider: string,\n payload: GoogleAuthRequestPayload\n ): Promise<User> {\n return axios.post(`/auth/${provider}`, payload)\n },\n show(email: string): Promise<{ users: User[] }> {\n return axios.get(`/users/${email}`)\n },\n logout(\n payload: LogoutParams,\n config: Partial<AxiosRequestConfig> = {}\n ): Promise<void> {\n return axios.delete(\"/auth/logout\", { params: payload, ...config })\n },\n resetPassword(email: string): Promise<{ message: string }> {\n return axios.post(`/users/${email}/password/reset`)\n },\n getCredentials(): Promise<Credentials> {\n return axios.get(\"/auth/credentials\")\n },\n updatePassword(\n user: string,\n payload: UpdatePasswordRequestPayload\n ): Promise<{ message: string }> {\n return axios.patch(`/users/${user}/password`, payload)\n },\n remotePasswordUpdate(\n email: string,\n payload: RemotePasswordUpdateRequestPayload\n ): Promise<{ message: string }> {\n return axios.patch(`/users/${email}/password/update`, payload)\n },\n confirm(email: string, payload: ConfirmUserRequestPayload): Promise<User> {\n return axios.post(`/users/${email}/confirm`, payload)\n },\n deleteActiveSession(\n sessionId: string,\n payload: DeleteActiveSessionRequestPayload\n ): Promise<void> {\n return axios.delete(`/users/active-sessions/${sessionId}`, {\n params: payload,\n })\n },\n getActiveSessions(\n params: AxiosRequestConfig & { params: SessionsListRequestPayload }\n ): Promise<PaginatedItems<UserSession>> {\n return axios.get(\"/users/active-sessions\", params)\n },\n getAuthorizedApps(\n params: AxiosRequestConfig & { params: AuthorizedAppsListRequestPayload }\n ): Promise<PaginatedItems<AuthorizedApp>> {\n return axios.get(\"/users/authorized-apps\", params)\n },\n revokeAuthorizedApp(id: number): Promise<void> {\n return axios.delete(`/users/authorized-apps/${id}`)\n },\n update(\n email: string,\n params: Partial<UserUpdateRequestPayload> = {}\n ): Promise<{ users: User[] }> {\n return axios.patch(`/users/${email}`, params)\n },\n deleteAccount(): Promise<void> {\n return axios.delete(\"/users/me\")\n },\n fetchPermissions(): Promise<{ permissions: string[] }> {\n return axios.get(\"/users/permissions\")\n },\n getProjectContacts(\n projectExid: ProjectExid\n ): Promise<ProjectContactsResponsePayload> {\n return axios.get(`/projects/${projectExid}/contacts`)\n },\n },\n notifications: {\n get(): Promise<PaginatedItems<Notification>> {\n return axios.get(\"/notifications\")\n },\n markAllAsRead(): Promise<{ message: string }> {\n return axios.post(\"/notifications/mark-as-read\")\n },\n markAsRead(id: number): Promise<Notification> {\n return axios.patch(`/notifications/${id}`)\n },\n },\n bim: {\n getBimSnapshot(\n cameraId: string,\n dateTime: string,\n payload: Partial<BimSnapshotRequestPayload>,\n extraParams?: AxiosRequestConfig\n ): Promise<BimSnapshotResponsePayload> {\n return axios.get(`/cameras/${cameraId}/bim/${dateTime}`, {\n params: payload,\n ...(extraParams || {}),\n })\n },\n getBimModel(\n cameraId: string,\n payload: BimModelRequestPayload,\n extraParams?: AxiosRequestConfig\n ): Promise<BimModelResponsePayload> {\n return axios.get(`/cameras/${cameraId}/bim`, {\n params: payload,\n ...(extraParams || {}),\n })\n },\n pendingBimImages(\n cameraId: string,\n params: PendingBimImagesParams\n ): Promise<BimPendingImage[]> {\n return axios.get(`/cameras/${cameraId}/bim/pending`, { params })\n },\n processPendingImages(\n cameraId: string,\n params: Partial<ProcessPendingImagesBimParams>\n ): Promise<void> {\n return axios.post(`/cameras/${cameraId}/bim/pending`, params)\n },\n createBim(cameraId: string, params: BimCreationPayload): Promise<void> {\n return axios.post(`/cameras/${cameraId}/bim`, params)\n },\n getCameraParameters(\n cameraId: string,\n params: ApiCredentials\n ): Promise<BimUploadCameraParameters> {\n return axios.get(`/cameras/${cameraId}/bim/camera-parameters`, {\n params,\n })\n },\n uploadCameraParameters(\n cameraId: string,\n params: BimUploadCameraParameters\n ): Promise<BimUploadCameraParameters> {\n return axios.post(`/cameras/${cameraId}/bim/camera-parameters`, params)\n },\n exportCompare(\n projectExid: string,\n payload: BimCompareExportRequestPayload\n ): Promise<Compare> {\n return axios.post(\n `/projects/${projectExid}/media-hub/compares/bim-compares`,\n payload\n )\n },\n },\n cameras: {\n getCameras(params: {\n params?: Partial<FetchCameraQueryParams>\n config?: SwrRequestConfig<CamerasResponsePayload>\n }): Promise<CamerasResponsePayload> {\n return axios.get(\"/cameras\", { params, ...params.config })\n },\n getCameraById(\n cameraId: string,\n params?: ApiCredentials\n ): Promise<CamerasResponsePayload> {\n return axios.get(`/cameras/${cameraId}?${toQueryString(params)}`)\n },\n getCameraLastPublicNote(\n cameraId: string\n ): Promise<CameraNoteResponsePayload> {\n return axios.get(`/cameras/${cameraId}/last-public-note`)\n },\n getNvrStreamingToken({\n cameraExid,\n token,\n }: {\n cameraExid: string\n token: string\n }): Promise<string> {\n return fetch(\n `${axios.env.baseUrl}/cameras/${cameraExid}/hls?authorization=${token}`\n ).then(\n ({ url }) => queryStringToObject(url.split(\"?\")[1] || \"\").access_token\n ) as Promise<string>\n },\n getCameraStatusLogs(\n exid: string,\n params: {\n params: {\n from: string\n to: string\n }\n }\n ): Promise<CameraStatusLog[]> {\n return axios.get(`/cameras/${exid}/health`, params)\n },\n updateCamera(\n exid: string,\n params: Partial<CameraUpdateRequestPayload>\n ): Promise<CamerasResponsePayload> {\n return axios.patch(`/cameras/${exid}`, params)\n },\n },\n projects: {\n index(\n {\n params,\n config,\n }: {\n params?: ApiCredentials\n config?: SwrRequestConfig<Project[]>\n } = { params: {}, config: {} }\n ): Promise<Project[]> {\n return axios.get(`/projects?${toQueryString(params)}`, config)\n },\n show(projectExid: string): Promise<{ project: Project }> {\n return axios.get(`/projects/${projectExid}`)\n },\n create(params: {\n name: string\n }): Promise<{ project: ProjectCreateResponse }> {\n return axios.post(\"/projects\", params)\n },\n getLogos(projectId: string): Promise<ProjectLogoResponsePayload> {\n return axios.get(`/projects/${projectId}/logos`)\n },\n createLogo(projectId: string, formData: FormData): Promise<Logo> {\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n\n return axios.post(`/projects/${projectId}/logos`, formData, {\n headers,\n })\n },\n deleteLogo(projectId: string, id: number): Promise<void> {\n return axios.delete(`/projects/${projectId}/logos/${id}`)\n },\n updateLogo(projectId: string, id: number, name: string): Promise<Logo> {\n return axios.patch(\n `/projects/${projectId}/logos/${id}`,\n toQueryString({ name })\n )\n },\n updateThumbnail(\n projectExid: string,\n params: { cameraExid?: string; uploadedThumbnail?: string }\n ): Promise<{ message: string }> {\n if (params.uploadedThumbnail) {\n return axios.post(`/projects/${projectExid}/thumbnail`, {\n thumbnail: params.uploadedThumbnail,\n })\n }\n\n return axios.put(`/projects/${projectExid}/thumbnail`, {\n cameraExid: params.cameraExid,\n })\n },\n getThumbnailData(projectExid: string): Promise<ThumbnailData> {\n return axios.get(`/projects/${projectExid}/thumbnail?include_data=true`)\n },\n updateCamerasRestriction(\n projectExid: ProjectExid,\n payload: UpdateCameraRestrictionPayload\n ): Promise<void> {\n return axios.patch(`/projects/${projectExid}/cameras`, payload)\n },\n reorderCameras(\n projectExid: ProjectExid,\n payload: ReorderCamerasPayload\n ): Promise<void> {\n return axios.patch(`/projects/${projectExid}/cameras/reorder`, payload)\n },\n updatePlaceholderThumbnail(\n projectExid: string,\n params: { placeholder?: string }\n ): Promise<{ message: string }> {\n return axios.post(\n `/projects/${projectExid}/waiting-camera-placeholder`,\n params\n )\n },\n getPlaceholderThumbnailData(\n projectExid: string\n ): Promise<PlaceholderThumbnailData> {\n return axios.get(`/projects/${projectExid}/waiting-camera-placeholder`)\n },\n transferOwnership(\n projectExid: string,\n newOwnerId: number\n ): Promise<{ message: string }> {\n return axios.put(`/projects/${projectExid}/transfer/${newOwnerId}`)\n },\n getUsers(projectExid: string): Promise<ProjectUsersResponsePayload> {\n return axios.get(`/projects/${projectExid}/users`)\n },\n getCameras(projectExid: string): Promise<{ cameras: Camera[] }> {\n return axios.get(`/projects/${projectExid}/cameras`)\n },\n getCameraRefs(projectExid: string): Promise<{ cameras: Camera[] }> {\n return axios.get(`/projects/${projectExid}/camera_refs`)\n },\n getTeamMembers(): Promise<ProjectMember[]> {\n return axios.get(\"/projects/team-members\")\n },\n getMembers(projectExid: string): Promise<ProjectMembersResponsePayload> {\n return axios.get(`/projects/${projectExid}/users`)\n },\n inviteMembers(\n projectExid: string,\n payload: ProjectMembersRequestPayload\n ): Promise<ProjectInviteMembersResponsePayload> {\n return axios.post(`/projects/${projectExid}/users`, payload)\n },\n removeMembers(projectExid: string, emails: string[]): Promise<void> {\n return axios.delete(`/projects/${projectExid}/users`, {\n params: { emails },\n })\n },\n updateMembersRole(\n projectExid: string,\n payload: ProjectMembersRequestPayload\n ): Promise<void> {\n return axios.patch(`/projects/${projectExid}/users`, payload)\n },\n requestCameraInfo(projectExid: string): Promise<void> {\n return axios.post(`/projects/${projectExid}/camera-inquiry-request`)\n },\n getMentionableUsers(\n projectExid: string,\n scope: CommentsScope\n ): Promise<MentionableUser[]> {\n return axios.get(`/projects/${projectExid}/users/mentionable`, {\n params: { scope },\n })\n },\n },\n timelapse: {\n getSnapshotRange(\n cameraId: string,\n payload: TimelapseSnapshotRequestPayload,\n extraParams?: AxiosRequestConfig\n ): Promise<TimelapseSnapshotResponsePayload> {\n return axios.get(`/cameras/${cameraId}/timelapses/snapshots`, {\n params: payload,\n ...(extraParams || {}),\n })\n },\n createTimelapse(\n projectExid: string,\n payload: TimelapseCreationRequestPayload\n ): Promise<TimelapseCreationResponsePayload> {\n return axios.post(\n `/projects/${projectExid}/media-hub/timelapses`,\n payload\n )\n },\n cUpdate(\n projectExid: string,\n id: string | number,\n payload: MediaUpdateRequestPayload\n ): Promise<TimelapseCreationResponsePayload> {\n return axios.patch(\n `/projects/${projectExid}/media-hub/timelapses/${id}`,\n payload\n )\n },\n cDelete(projectExid: string, id: number): Promise<void> {\n return axios.delete(`/projects/${projectExid}/media-hub/timelapses/${id}`)\n },\n },\n compares: {\n cCreate(\n projectExid: string,\n payload: CompareRequestPayload\n ): Promise<Compare> {\n return axios.post(`/projects/${projectExid}/media-hub/compares`, payload)\n },\n cShow(projectExid: string, id: string): Promise<Compare> {\n return axios.get(`/projects/${projectExid}/media-hub/compares/${id}`)\n },\n cUpdate(\n projectExid: string,\n id: string,\n payload: MediaUpdateRequestPayload\n ): Promise<Compare> {\n return axios.patch(\n `/projects/${projectExid}/media-hub/compares/${id}`,\n payload\n )\n },\n cDelete(projectExid: string, id: string): Promise<void> {\n return axios.delete(`/projects/${projectExid}/media-hub/compares/${id}`)\n },\n },\n projectConnectos: {\n index(projectExid: string): Promise<Array<XWeatherResponse>> {\n return axios.get(`/projects/${projectExid}/connectors`)\n },\n },\n providers: {\n getProviders(): Promise<ConnectorResponsePayload> {\n return axios.get(\"/oauth2-tokens/providers\")\n },\n },\n aconex: {\n authenticate(payload: AconexAuthCallbackParams): Promise<void> {\n return axios.get(\"/aconex/auth/callback\", {\n params: payload,\n })\n },\n getUserProjects(): Promise<AconexUserProject[]> {\n return axios.get(\"/aconex/projects\")\n },\n revoke(): Promise<void> {\n return axios.post(\"/aconex/auth/revoke\")\n },\n uploadEditedSnapshot(\n projectId: number,\n payload: AconexEditedImageUploadRequestPayload\n ): Promise<void> {\n return axios.post(\n `/aconex/projects/${projectId}/upload-snapshot`,\n payload\n )\n },\n getDocumentSchema(projectId: number): Promise<AconexDocumentSchema[]> {\n return axios.get(`/aconex/projects/${projectId}/register/schema`)\n },\n getDocumentTypeSchema(\n projectId: number,\n documentTypeId: string\n ): Promise<AconexDocumentTypeSchema[]> {\n return axios.get(\n `/aconex/projects/${projectId}/register/schema/${documentTypeId}`\n )\n },\n },\n procore: {\n getUserCompanies(): Promise<ProcoreUserCompaniesResponsePayload> {\n return axios.get(\"/procore/companies\")\n },\n getUserProjects(\n payload: ProcoreCompanyRequestPayload\n ): Promise<ProcoreUserProjectsResponsePayload> {\n return axios.get(\"/procore/projects\", {\n params: payload,\n })\n },\n getUserProjectPermissions(\n payload: ProcoreProjectRequestPayload\n ): Promise<ProcoreUserProjectPermissionsResponsePayload> {\n return axios.get(\"/procore/projects/permissions\", {\n params: payload,\n })\n },\n getProjectAlbums(\n payload: ProcoreProjectRequestPayload\n ): Promise<ProcoreProjectsAlbumsPayload> {\n return axios.get(\"/procore/image-categories\", {\n params: payload,\n })\n },\n uploadEditedSnapshot(\n payload: ProcoreEditedImageUploadRequestPayload\n ): Promise<void> {\n return axios.post(\"/procore/upload-snapshot\", payload)\n },\n sendRevoke(): Promise<void> {\n return axios.post(\"/users/auth/procore/revoke\")\n },\n getObservationTypes(\n payload: ProcoreProjectRequestPayload\n ): Promise<ProcoreObservationTypesResponsePayload> {\n return axios.get(\"/procore/companies/observation-types\", {\n params: payload,\n })\n },\n getObservationForm(\n payload: ProcoreObservationFormRequestPayload\n ): Promise<ProcoreObservationForm> {\n return axios.get(\"/procore/observations/form\", {\n params: payload,\n })\n },\n getNextAvailableObservationNumber(\n payload: ProcoreProjectRequestPayload\n ): Promise<ProcoreNextObservationAvailableNumber> {\n return axios.get(\"/procore/observations/next-available-number\", {\n params: payload,\n })\n },\n getAssignees(\n payload: ProcoreProjectRequestPayload\n ): Promise<Array<ProcoreObservationAssignee>> {\n return axios.get(\"/procore/observations/assignees\", {\n params: payload,\n })\n },\n getDistributionMembers(\n payload: ProcoreProjectRequestPayload\n ): Promise<Array<ProcoreObservationDistributionMember>> {\n return axios.get(\"/procore/observations/distribution-members\", {\n params: payload,\n })\n },\n createObservation(formData: FormData): Promise<void> {\n const headers = { \"Content-Type\": \"multipart/form-data\" }\n\n return axios.post(\"/procore/observations\", formData, {\n headers,\n })\n },\n getContributingBehaviors(\n payload: ProcoreCompanyRequestPayload\n ): Promise<ProcoreObservationDefaultList> {\n return axios.get(\"/procore/companies/contributing-behaviors\", {\n params: payload,\n })\n },\n getContributingConditions(\n payload: ProcoreCompanyRequestPayload\n ): Promise<ProcoreObservationDefaultList> {\n return axios.get(\"/procore/companies/contributing-conditions\", {\n params: payload,\n })\n },\n getTrades(\n payload: ProcoreCompanyRequestPayload\n ): Promise<Array<ProcoreObservationTrades>> {\n return axios.get(\"/procore/companies/trades\", {\n params: payload,\n })\n },\n getHazards(\n payload: ProcoreCompanyRequestPayload\n ): Promise<ProcoreObservationDefaultList> {\n return axios.get(\"/procore/companies/hazards\", {\n params: payload,\n })\n },\n getLocations(\n payload: ProcoreProjectRequestPayload\n ): Promise<Array<ProcoreObservationLocation>> {\n return axios.get(\"/procore/projects/locations\", {\n params: payload,\n })\n },\n getSpecificationSections(\n payload: ProcoreProjectRequestPayload\n ): Promise<Array<ProcoreObservationSpecificationSection>> {\n return axios.get(\"/procore/specification-sections\", {\n params: payload,\n })\n },\n getCustomFieldOptions(\n payload: ProcoreCustomFieldOptionsRequestPayload\n ): Promise<Array<ProcoreObservationListItem>> {\n return axios.get(\"/procore/custom-field-options\", {\n params: payload,\n })\n },\n },\n autodesk: {\n sendRevoke(): Promise<void> {\n return axios.post(\"/users/auth/autodesk/revoke\")\n },\n getUserHubs(): Promise<AutodeskUserHub[]> {\n return axios.get(\"/autodesk/hubs\")\n },\n getProjects(hubId: string): Promise<AutodeskProject[]> {\n return axios.get(`/autodesk/hubs/${hubId}/projects`)\n },\n getFolders(\n hubId: string,\n projectId: string\n ): Promise<Array<AutodeskFolder>> {\n return axios.get(`/autodesk/hubs/${hubId}/projects/${projectId}/folders`)\n },\n getSubFolders(\n projectId: string,\n parentFolderId: string,\n getDerivatives: boolean\n ): Promise<Array<AutodeskFolder>> {\n return axios.get(\n `/autodesk/projects/${projectId}/folders/${parentFolderId}/subfolders`,\n {\n params: {\n getDerivatives,\n },\n }\n )\n },\n getFolder(projectId: string, folderId: string): Promise<AutodeskFolder> {\n return axios.get(`/autodesk/projects/${projectId}/folders/${folderId}`)\n },\n uploadEditedSnapshot(payload: AutodeskSnapshot): Promise<null> {\n return axios.post(\"/autodesk/upload-snapshot\", payload)\n },\n fetchViewerToken(exid: string): Promise<AutodeskTokenResponsePayload> {\n return axios.get(`/autodesk/${exid}/token/viewer`)\n },\n },\n voyageControl: {\n connect(payload: VoyageControlConnectorPayload): Promise<void> {\n return axios.post(\"/voyage-control/auth/connect\", payload)\n },\n sendRevoke(): Promise<void> {\n return axios.post(\"/voyage-control/auth/revoke\")\n },\n },\n hammertech: {\n connect(payload: HammertechConnectPayload): Promise<void> {\n return axios.post(\"/users/auth/hammertech/connect\", payload)\n },\n revoke(): Promise<void> {\n return axios.post(\"/users/auth/hammertech/revoke\")\n },\n getProjects(): Promise<HammertechProject[]> {\n return axios.get(\"/hammertech/projects\")\n },\n getIssueTypes(projectId: string): Promise<HammertechIssueType[]> {\n return axios.get(\"/hammertech/issue-types\", {\n params: {\n projectId,\n includeCustomFieldForms: true,\n },\n })\n },\n getLocations(projectId: string): Promise<HammertechLocation[]> {\n return axios.get(\"/hammertech/locations\", {\n params: { projectId },\n })\n },\n createIssue(\n payload: HammertechCreateIssuePayload\n ): Promise<HammertechIssueResponse> {\n return axios.post(\"/hammertech/issues\", payload)\n },\n createStoredFile(\n payload: HammertechStoredFilePayload\n ): Promise<HammertechStoredFileResponse> {\n return axios.post(\"/hammertech/stored-files\", payload)\n },\n },\n ring: {\n completeLinking(\n payload: RingCompleteLinkingPayload\n ): Promise<RingCompleteLinkingResponsePayload> {\n return axios.post(\"/ring/complete-linking\", payload)\n },\n getDevices(): Promise<RingDevicesResponsePayload> {\n return axios.get(\"/ring/devices\")\n },\n moveDevice(\n cameraExid: string,\n payload: RingMoveDevicePayload\n ): Promise<RingMoveDeviceResponsePayload> {\n return axios.patch(`/ring/devices/${cameraExid}/move`, payload)\n },\n deleteDevice(\n cameraExid: string\n ): Promise<{ status: string; cameraExid: string }> {\n return axios.delete(`/ring/devices/${cameraExid}`)\n },\n disconnect(): Promise<void> {\n return axios.post(\"/ring/disconnect\")\n },\n startLiveView(\n cameraExid: string,\n payload: RingLiveViewPayload\n ): Promise<RingLiveViewResponse> {\n return axios.post(`/ring/devices/${cameraExid}/live`, payload)\n },\n stopLiveView(\n cameraExid: string,\n sessionId: string\n ): Promise<RingStopLiveViewResponse> {\n return axios.delete(`/ring/devices/${cameraExid}/live/${sessionId}`)\n },\n },\n xweather: {\n connect(\n projectExid: string,\n payload: XWeatherCreatePayload\n ): Promise<XWeatherResponse> {\n return axios.post(`/projects/${projectExid}/xweather/connect`, payload)\n },\n revoke(projectExid: string): Promise<void> {\n return axios.post(`/projects/${projectExid}/xweather/revoke`)\n },\n },\n recordings: {\n oldest(\n cameraId: string,\n payload?: SnapshotRequestPayload\n ): Promise<Snapshot> {\n return axios.get(`/cameras/${cameraId}/recordings/snapshots/oldest`, {\n params: payload,\n })\n },\n latest(\n cameraId: string,\n payload?: SnapshotRequestPayload\n ): Promise<Snapshot> {\n return axios.get(`/cameras/${cameraId}/recordings/snapshots/latest`, {\n params: payload,\n })\n },\n nearest(\n cameraId: string,\n timestamp: string,\n payload?: SnapshotRequestPayload,\n extraParams?: AxiosRequestConfig\n ): Promise<NearestSnapshotResponsePayload> {\n return axios.get(\n `/cameras/${cameraId}/recordings/snapshots/${timestamp}/nearest`,\n {\n params: payload,\n ...(extraParams || {}),\n }\n )\n },\n availableDays({\n cameraId,\n year,\n month,\n payload,\n cancelToken,\n }: AvailableDaysRequestPayload): Promise<AvailableDaysResponsePayload> {\n return axios.get(\n `/cameras/${cameraId}/recordings/snapshots/${year}/${month}/days`,\n {\n params: payload,\n cancelToken,\n }\n )\n },\n availableHours({\n cameraId,\n year,\n month,\n day,\n payload,\n cancelToken,\n }: AvailableHoursRequestPayload): Promise<AvailableHoursResponsePayload> {\n return axios.get(\n `/cameras/${cameraId}/recordings/snapshots/${year}/${month}/${day}/hours`,\n {\n params: payload,\n cancelToken,\n }\n )\n },\n getSnapshot(\n cameraId: string,\n dateTime: string\n ): Promise<SnapshotRangeResponsePayload> {\n return axios.get(`/cameras/${cameraId}/recordings/snapshots/${dateTime}`)\n },\n getSnapshotRange(\n cameraId: string,\n payload: SnapshotRangeRequestPayload,\n extraParams?: AxiosRequestConfig\n ): Promise<SnapshotRangeResponsePayload> {\n return axios.get(`/cameras/${cameraId}/recordings/snapshots`, {\n params: payload,\n ...(extraParams || {}),\n })\n },\n },\n progressPhotos: {\n index(projectId: string): Promise<ProgressPhotosResponsePayload> {\n return axios.get(`/projects/${projectId}/progress-photos`)\n },\n show(id: string): Promise<ProgressPhotoItemResponsePayload> {\n return axios.get(`/progress-photos/${id}`)\n },\n create(\n payload: ProgressPhotosCreateUpdateRequestPayload\n ): Promise<ProgressPhotosResponsePayload> {\n return axios.post(\"/progress-photos\", payload)\n },\n update(\n id: string | number,\n payload: ProgressPhotosCreateUpdateRequestPayload\n ): Promise<Automation> {\n return axios.patch(`/progress-photos/${id}`, payload)\n },\n unsubscribe(\n progressPhotoId: string,\n params: ProgressPhotosUnSubscribeParams\n ): Promise<ProgressPhotosResponsePayload> {\n return axios.patch(\n `/progress-photos/${progressPhotoId}/unsubscribe?${toQueryString(\n params\n )}`\n )\n },\n delete(id: string, params?: ApiCredentials): Promise<void> {\n return axios.delete(`/progress-photos/${id}?${toQueryString(params)}`)\n },\n },\n mediaHub: {\n getAllMedia(\n projectExid: string,\n params: MediaFilterQueryParams\n ): Promise<PaginatedItems<Media>> {\n return axios.get(\n `projects/${projectExid}/media-hub?${toQueryString(params, {\n forceArrayBrackets: true,\n })}`\n )\n },\n getAllMediaUsers(projectExid: string): Promise<MediaUsersResponsePayload> {\n return axios.get(`/projects/${projectExid}/media-hub/users`)\n },\n cShow(projectExid: string, id: string): Promise<Media> {\n return axios.get(`/projects/${projectExid}/media-hub/${id}`)\n },\n cCreate(\n projectExid: string,\n payload: FormData | MediaCreateRequestPayload,\n onUploadProgress: (progressEvent: any) => void = (_event) => {}\n ): Promise<Media> {\n return axios.post(`/projects/${projectExid}/media-hub`, payload, {\n onUploadProgress,\n timeout: 7200000,\n })\n },\n cUpdate(\n projectExid: string,\n id: string,\n payload: MediaUpdateRequestPayload\n ): Promise<Media> {\n return axios.patch(`/projects/${projectExid}/media-hub/${id}`, payload)\n },\n cDelete(projectExid: string, id: string): Promise<void> {\n return axios.delete(`/projects/${projectExid}/media-hub/${id}`)\n },\n },\n shares: {\n deleteShareRequest(payload: {\n params: ShareDeletionRequestPayload\n }): Promise<void> {\n return axios.delete(`/share-requests/${payload.params.key}`)\n },\n getSharedUsers(cameraId: string): Promise<SharedUsersResponsePayload> {\n return axios.get(`/cameras/${cameraId}/shares/users`)\n },\n getShareRequestByKey(\n key: string\n ): Promise<Pick<ShareCreateResponsePayload, \"shareRequests\">> {\n return axios.get(`/shares/requests/${key}`)\n },\n },\n company: {\n show(\n companyId?: string,\n params: { with_zoho?: boolean } = {}\n ): Promise<CompanySummary> {\n if (!companyId) {\n return axios.get(\"/company\")\n } else\n return axios.get(\n `/company/${companyId}${\"with_zoho\" in params ? \"?with_zoho\" : \"\"}`\n )\n },\n getCompanyUsers(params: {\n params: { page: number; limit: number }\n }): Promise<PaginatedItems<CompanyUser>> {\n return axios.get(\"/company/users\", params)\n },\n getCompanyProjects(params: {\n params: { page: number; limit: number }\n }): Promise<PaginatedItems<CompanyProject>> {\n return axios.get(\"/company/projects\", params)\n },\n getCompanyCameras(\n params: PaginationParams | { params: PaginationParams }\n ): Promise<PaginatedItems<CompanyCameraSummary>> {\n const config = \"params\" in params ? params : { params }\n\n return axios.get(\"/company/cameras\", config)\n },\n getCompanyKits(params: {\n params: { page: number; limit: number }\n }): Promise<PaginatedItems<CompanyKit>> {\n return axios.get(\"/company/kits\", params)\n },\n },\n batteries: {\n ProjectBatteryReadings(\n projectExid: string\n ): Promise<ProjectBatteryReading[]> {\n return axios.get(`/projects/${projectExid}/battery-readings`)\n },\n batteryReadings(\n cameraExid: string,\n params: { fromDate: string; toDate: string }\n ): Promise<PaginatedItems<BatteryReading>> {\n return axios.get(`/cameras/${cameraExid}/battery-readings`, {\n params: params,\n })\n },\n readingsVoltageSummary(\n cameraExid: string,\n params: { fromDate: string; toDate: string }\n ): Promise<BatteryVoltage[]> {\n return axios.get(\n `/cameras/${cameraExid}//battery-readings/voltage-summary`,\n {\n params: params,\n }\n )\n },\n },\n layers: {\n getLayer(\n cameraId: string,\n params: BimLayersQueryParams,\n extraParams: AxiosRequestConfig = {}\n ): Promise<BIMLayer> {\n return axios.get(`/cameras/${cameraId}/layers`, {\n params,\n ...(extraParams || {}),\n })\n },\n getLayersById(\n cameraId: string,\n id: number,\n params: ApiCredentials\n ): Promise<BIMLayer> {\n return axios.get(`/cameras/${cameraId}/layers/${id}`, { params })\n },\n getLayers(\n cameraId: string,\n params: BimLayersQueryParams\n ): Promise<BIMLayer[]> {\n return axios.get(`/cameras/${cameraId}/layers`, { params })\n },\n createLayer(\n cameraId: string,\n params: BIMLayerPostPayload\n ): Promise<BIMLayer> {\n return axios.post(`/cameras/${cameraId}/layers`, params)\n },\n deleteLayer(\n cameraId: string,\n id: number,\n params?: ApiCredentials\n ): Promise<void> {\n return axios.delete(`/cameras/${cameraId}/layers/${id}`, { params })\n },\n updateLayer(\n cameraId: string,\n id: number,\n params: Partial<BIMLayerPostPayload>\n ): Promise<BIMLayer> {\n return axios.put(`/cameras/${cameraId}/layers/${id}`, params)\n },\n },\n comments: {\n fetchComments(\n projectExid: string,\n params: CommentsRequestPayload\n ): Promise<PaginatedItems<Comment>> {\n return axios.get(`/projects/${projectExid}/comments`, { params })\n },\n addComment(\n projectId: string,\n params: CommentCreationRequestPayload\n ): Promise<Comment> {\n return axios.post(`/projects/${projectId}/comments`, params)\n },\n archiveOrUnarchiveComment(\n projectId: string,\n id: number,\n archive: boolean\n ): Promise<Comment> {\n return axios.patch(\n `/projects/${projectId}/comments/${id}?${toQueryString({ archive })}`\n )\n },\n deleteComment(projectId: string, id: number): Promise<void> {\n return axios.delete(`/projects/${projectId}/comments/${id}`)\n },\n },\n storyblock: {\n getStory(params: {\n route: string\n params: string\n }): Promise<StoryblokResponse> {\n return axios.get(\"/proxy/storyblok\", { params })\n },\n },\n snapshots: {\n deliverViaEmail(\n projectExid: string,\n payload: SnapshotEmailDeliveryRequestPayload\n ): Promise<SnapshotEmailDeliveryResponsePayload> {\n return axios.post(\n `/projects/${projectExid}/snapshots/deliver/email`,\n payload\n )\n },\n },\n sockets: {\n getWsToken(): Promise<SocketAuthResponsePayload> {\n return axios.post(\"/sockets/auth\")\n },\n },\n mailing: {\n unsubscribe(params: { key: string }): Promise<void> {\n return axios.post(\"/mailing/unsubscribe\", params)\n },\n },\n widgets: {\n index(\n params: Partial<WidgetsListRequestPayload>\n ): Promise<PaginatedItems<Widget>> {\n return axios.get(`/widgets?${toQueryString(params)}`)\n },\n show(id: number): Promise<WidgetFull> {\n return axios.get(`/widgets/${id}`)\n },\n getByKeys(): Promise<WidgetFull> {\n return axios.get(\"/widgets/credentials\")\n },\n setSessionSettings(\n params: WidgetSessionSettingsPayload\n ): Promise<WidgetFull> {\n return axios.put(\"/widgets/session\", params)\n },\n setStatus(id: number, params: { active: boolean }): Promise<WidgetFull> {\n return axios.patch(`/widgets/${id}/status`, params)\n },\n create(payload: WidgetPayload): Promise<WidgetFull> {\n return axios.post(\"/widgets\", payload)\n },\n update(id: number, payload: WidgetPayload): Promise<WidgetFull> {\n return axios.put(`/widgets/${id}`, payload)\n },\n delete(id: number): Promise<void> {\n return axios.delete(`/widgets/${id}`)\n },\n },\n developerApps: {\n index(): Promise<{ items: OAuthClient[] }> {\n return axios.get(\"/developer/apps\")\n },\n show(clientId: string): Promise<OAuthClient> {\n return axios.get(`/developer/apps/${clientId}`)\n },\n create(payload: CreateOAuthClientPayload): Promise<OAuthClientWithSecret> {\n return axios.post(\"/developer/apps\", payload)\n },\n update(\n clientId: string,\n payload: UpdateOAuthClientPayload\n ): Promise<OAuthClient> {\n return axios.patch(`/developer/apps/${clientId}`, payload)\n },\n delete(clientId: string): Promise<void> {\n return axios.delete(`/developer/apps/${clientId}`)\n },\n regenerateSecret(clientId: string): Promise<OAuthClientWithSecret> {\n return axios.post(`/developer/apps/${clientId}/regenerate-secret`)\n },\n },\n oauth: {\n getClientInfo(clientId: string, scope: string): Promise<OAuthConsentInfo> {\n return axios.get(\"/oauth/client-info\", {\n params: { client_id: clientId, scope },\n })\n },\n submitConsent(payload: OAuthConsentPayload): Promise<OAuthConsentResponse> {\n return axios.post(\"/oauth/consent\", payload)\n },\n },\n zoho: {\n getDealLocation(\n dealId: string\n ): Promise<{ geographicBounds: GeoJSONPolygon | null }> {\n return axios.get(`/zoho/deals/${dealId}/location`)\n },\n updateDealLocation(\n dealId: string,\n payload: { geographicBounds: GeoJSONPolygon }\n ): Promise<void> {\n return axios.post(`/zoho/deals/${dealId}/location`, payload)\n },\n },\n}\n","import { axios } from \"./client\"\nimport { MoveParams, ZoomParams } from \"@evercam/api/types\"\n\nexport const PtzApi = {\n presets: {\n index({\n cameraExid,\n }: {\n cameraExid: string\n }): Promise<{ presets: Array<{ name: string; token: string }> }> {\n return axios.get(`/cameras/${cameraExid}/ptz/presets`)\n },\n go({\n cameraExid,\n presetId,\n }: {\n cameraExid: string\n presetId: string | number\n }) {\n return axios.post(`/cameras/${cameraExid}/ptz/presets/go/${presetId}`)\n },\n home({\n cameraExid,\n isRecordingFromNvr,\n }: {\n cameraExid: string\n isRecordingFromNvr: boolean\n }) {\n if (!isRecordingFromNvr) {\n return axios.post(`/cameras/${cameraExid}/ptz/home`)\n }\n\n return axios.post(`/cameras/${cameraExid}/ptz/relative`)\n },\n create({\n cameraExid,\n presetName,\n }: {\n cameraExid: string\n presetName: string\n }) {\n return axios.post(`/cameras/${cameraExid}/ptz/presets/create`, {\n presetName,\n })\n },\n update({\n cameraExid,\n presetId,\n presetName,\n }: {\n cameraExid: string\n presetId: string | number\n presetName: string\n }) {\n // eslint-disable-next-line\n return axios.post(`/cameras/${cameraExid}/ptz/presets/${presetId}/set`, {\n presetName,\n })\n },\n updateHome({\n cameraExid,\n presetName,\n }: {\n cameraExid: string\n presetName: string\n }) {\n // eslint-disable-next-line\n return axios.post(`/cameras/${cameraExid}/ptz/home/set`, {\n presetName,\n })\n },\n delete({\n cameraExid,\n presetId,\n }: {\n cameraExid: string\n presetId: string | number\n }) {\n // eslint-disable-next-line\n return axios.delete(\n `/cameras/${cameraExid}/ptz/presets/${presetId}/remove`\n )\n },\n },\n controls: {\n move({ cameraExid, direction, useContinuous }: MoveParams) {\n if (useContinuous) {\n return axios.post(\n `/cameras/${cameraExid}/ptz/continuous/start/${direction}`\n )\n }\n\n return axios.post(`/cameras/${cameraExid}/ptz/relative?${direction}=4`)\n },\n zoom({ cameraExid, direction, isRecordingFromNvr }: ZoomParams) {\n if (!isRecordingFromNvr) {\n const zoomValue = direction === \"in\" ? 1 : -1\n\n return axios.post(\n `/cameras/${cameraExid}/ptz/relative?zoom=${zoomValue}`\n )\n }\n\n return axios.post(\n `/cameras/${cameraExid}/ptz/continuous/zoom/${direction}`,\n {\n direction,\n }\n )\n },\n stop({ cameraExid }: { cameraExid: string }) {\n return axios.post(`/cameras/${cameraExid}/ptz/continuous/stop`)\n },\n },\n}\n","import { toQueryString } from \"@evercam/api/utils\"\nimport { axios } from \"./client\"\nimport type { AxiosRequestConfig } from \"axios\"\nimport type { SwrRequestConfig } from \"@evercam/api/types\"\nimport type {\n _360AssetsQueryParams,\n _360AssetsRequestPayload,\n _360QueueQueryParams,\n _360AssetsUploadPayload,\n _360AssetsResponse,\n _360AssetsCountsResponse,\n _360QueueResponse,\n _360FloorsResponse,\n DroneQueueResponse,\n DroneUploadsResponse,\n IngestUploadInitResponse,\n BimUploadsResponse,\n MobileAssetsQueryParams,\n MobileCaptureAssetsResponse,\n BimUploadPayload,\n BimUploadsQueryParams,\n BimUpdatedWebhookPayload,\n CalculateMeasuringOperationRequestPayload,\n DrawingsRequestPayload,\n DronesQueryParams,\n DroneUploadUpdateRequestPayload,\n IngestProcessingProgress,\n FlightImagesQueryParams,\n Generate360MapRequestPayload,\n GenerateFloorPayload,\n InspectionToolRequestPayload,\n JsonObject,\n _360WalkV2,\n _360FloorV2,\n} from \"@evercam/api/types\"\nimport { IngestVersions, IngestTypes } from \"@evercam/api/types\"\n\nexport const getIngestApiUrls = (type: string): string[] => {\n if (type === IngestTypes.Drone) {\n return (axios.env.ingestDroneApi || \"\").split(\";\")\n }\n if (type === IngestTypes.ThreeSixty) {\n return (axios.env.ingest360Api || \"\").split(\";\")\n }\n\n return []\n}\n\nexport const IngestApi = {\n drone: {\n createUpload(\n projectId: string,\n params: { uploadedBy: string }\n ): Promise<IngestUploadInitResponse> {\n return axios.post(\n `${getIngestApiUrls(IngestTypes.Drone)[0]}/drone/${projectId}/upload`,\n null,\n { params }\n )\n },\n async reprocessDrone(id: number, params: JsonObject = {}): Promise<void> {\n const ingestUrl = await IngestApi.utils.chooseIngestApiUrl(\n IngestTypes.Drone\n )\n\n return axios.post(`${ingestUrl}/drone/${id}/reprocess`, null, { params })\n },\n getDrones(params: {\n params: Partial<DronesQueryParams>\n }): Promise<DroneUploadsResponse> {\n return axios.get(\n `${getIngestApiUrls(IngestTypes.Drone)[0]}/drone/uploads/`,\n params\n )\n },\n getProcessingProgress(id: number): Promise<IngestProcessingProgress> {\n return axios.get(\n `${getIngestApiUrls(IngestTypes.Drone)[0]}/drone/uploads/${id}/progress`\n )\n },\n getArchive(id: number, params: { dataType: string }): Promise<Blob> {\n return axios.get(\n `${getIngestApiUrls(IngestTypes.Drone)[0]}/drone/uploads/archive/${id}`,\n {\n params,\n }\n )\n },\n deleteUpload(id: number): Promise<void> {\n return axios.delete(\n `${getIngestApiUrls(IngestTypes.Drone)[0]}/drone/uploads/${id}`\n )\n },\n prepareForUpload(\n projectId: string,\n params: {\n uploadedBy: string\n token: string\n }\n ): Promise<void> {\n return axios.put(\n `${\n getIngestApiUrls(IngestTypes.Drone)[0]\n }/drone/${projectId}/prepare-upload`,\n null,\n { params }\n )\n },\n async upload(\n projectId: string,\n params: {\n uploadedBy: string\n token: string\n },\n payload: DroneUploadUpdateRequestPayload\n ): Promise<void> {\n const ingestUrl = await IngestApi.utils.chooseIngestApiUrl(\n IngestTypes.Drone\n )\n\n return axios.put(`${ingestUrl}/drone/${projectId}/upload`, payload, {\n params,\n })\n },\n verifyToken(\n projectId: string,\n params: { token: string }\n ): Promise<JsonObject> {\n return axios.get(\n `${\n getIngestApiUrls(IngestTypes.Drone)[0]\n }/drone/uploads/${projectId}/verify`,\n {\n params: { token: params.token },\n }\n )\n },\n calculateMeasuringOperation(\n projectId: string,\n params: CalculateMeasuringOperationRequestPayload,\n ingestUrl: string = getIngestApiUrls(IngestTypes.Drone)[0]\n ): Promise<JsonObject> {\n return axios.post(\n `${ingestUrl}/drone/api/${projectId}/calculate-measuring-operation`,\n params\n )\n },\n inspectionTool(\n projectId: string,\n params: InspectionToolRequestPayload\n ): Promise<JsonObject> {\n return axios.post(\n `${\n getIngestApiUrls(IngestTypes.Drone)[0]\n }/drone/api/${projectId}/inspection-tool`,\n params\n )\n },\n isInspectionEnabled(\n projectId: string,\n params: JsonObject = {}\n ): Promise<JsonObject> {\n return axios.post(\n `${\n getIngestApiUrls(IngestTypes.Drone)[0]\n }/drone/api/${projectId}/inspection-enabled`,\n null,\n { params }\n )\n },\n getDroneQueueSize(droneUrl: string): Promise<DroneQueueResponse> {\n return axios.get(`${droneUrl}/drone/queue`)\n },\n getFlightImages(\n projectId: string,\n params: FlightImagesQueryParams\n ): Promise<JsonObject> {\n return axios.get(\n `${\n getIngestApiUrls(IngestTypes.Drone)[0]\n }/drone/api/${projectId}/flight-images`,\n {\n params,\n }\n )\n },\n async checkFlightAvailableFeatures(\n projectId: string,\n params: JsonObject\n ): Promise<JsonObject> {\n const urls = getIngestApiUrls(IngestTypes.Drone)\n\n const responses = await Promise.all(\n urls.map(async (url) => {\n try {\n const result = (await axios.get(\n `${url}/drone/api/${projectId}/flight-available-features`,\n { params }\n )) as unknown as JsonObject\n\n return { ...result, ingestUrl: url }\n } catch {\n return null\n }\n })\n )\n\n const validResponses = responses.filter(Boolean)\n const withDem = validResponses.find((r) => (r as any).isVolumeToolEnabled)\n\n return (withDem ?? validResponses[0] ?? {}) as JsonObject\n },\n },\n assets360: {\n get360Assets(params: {\n params: Partial<_360AssetsQueryParams>\n }): Promise<_360AssetsResponse> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.get(`${ingestUrl}/360/assets/`, params)\n },\n get360AssetsCounts(\n projectId: string,\n params: { uploadedBy: string }\n ): Promise<_360AssetsCountsResponse> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.get(`${ingestUrl}/360/assets/${projectId}/counts`, {\n params,\n })\n },\n update360(\n id: number,\n payload: _360AssetsRequestPayload\n ): Promise<_360WalkV2> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.put(`${ingestUrl}/360/assets/${id}`, payload)\n },\n update360ByProjectDateName(\n projectId: string,\n date: string,\n floor: string,\n payload: Partial<_360AssetsRequestPayload> & { drawingId?: number }\n ): Promise<_360WalkV2> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.put(\n `${ingestUrl}/360/assets/${projectId}/${date}/${floor}`,\n payload\n )\n },\n deleteUpload(id: number): Promise<void> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.delete(`${ingestUrl}/360/assets/${id}`)\n },\n getArchive(id: number, params: { dataType: string }): Promise<string> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.get(`${ingestUrl}/360/assets/archive/${id}`, {\n params,\n })\n },\n get360Progress(id: number): Promise<IngestProcessingProgress> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.get(`${ingestUrl}/360/assets/${id}/progress`)\n },\n createUpload(\n projectId: string,\n params: _360AssetsRequestPayload\n ): Promise<IngestUploadInitResponse> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.post(`${ingestUrl}/360/${projectId}/upload`, null, {\n params,\n })\n },\n async upload(\n id: number,\n params: JsonObject,\n payload: _360AssetsUploadPayload\n ): Promise<_360WalkV2> {\n const ingestUrl = await IngestApi.utils.chooseIngestApiUrl(\n IngestTypes.ThreeSixty\n )\n\n return axios.put(`${ingestUrl}/360/${id}/upload`, payload, {\n params,\n headers: {\n \"X-Processing-Source\": \"DASHBOARD\",\n },\n })\n },\n async reprocess360(id: number): Promise<void> {\n const ingestUrl = await IngestApi.utils.chooseIngestApiUrl(\n IngestTypes.ThreeSixty\n )\n\n return axios.put(`${ingestUrl}/360/${id}/reprocess`)\n },\n drawingExists(payload: {\n params: {\n name: string\n project_id: string\n }\n }): Promise<JsonObject> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.get(\n `${ingestUrl}/360/floors/exists?${toQueryString(\n payload.params ?? payload\n )}`\n )\n },\n getDrawings(payload: {\n params: DrawingsRequestPayload\n config?: SwrRequestConfig<_360FloorsResponse>\n }): Promise<_360FloorsResponse> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.get(\n `${ingestUrl}/360/floors/?${toQueryString(payload.params ?? payload)}`,\n payload.config\n )\n },\n getDrawingById(id: number, projectExid: string): Promise<_360FloorV2> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.get(\n `${ingestUrl}/360/floors/${id}?project_id=${projectExid}`\n )\n },\n updateDrawing(\n id: number,\n projectExid: string,\n payload: GenerateFloorPayload\n ): Promise<_360FloorV2> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.put(\n `${ingestUrl}/360/floors/${id}?project_id=${projectExid}`,\n payload\n )\n },\n deleteDrawing(id: number): Promise<void> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.delete(`${ingestUrl}/360/floors/${id}`)\n },\n restoreDrawing(id: number): Promise<void> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.post(`${ingestUrl}/360/floors/${id}/restore`)\n },\n transferWalks(\n sourceId: number,\n targetId: number,\n projectExid: string\n ): Promise<void> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.post(\n `${ingestUrl}/360/floors/${sourceId}/transfer-walks/${targetId}?project_id=${projectExid}`\n )\n },\n createDrawing(\n projectExid: string,\n payload: GenerateFloorPayload,\n createdBy: string\n ): Promise<_360FloorV2> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.post(\n `${ingestUrl}/360/floors/${projectExid}?created_by=${createdBy}`,\n payload\n )\n },\n fetchDrawingOverlay(\n id: number,\n params: { view: boolean; thumbnail?: boolean },\n onDownloadProgress?: (progress: ProgressEvent) => void,\n extraConfig: AxiosRequestConfig = {}\n ): Promise<string> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.get(`${ingestUrl}/360/floors/${id}/overlay`, {\n ...extraConfig,\n params,\n onDownloadProgress,\n })\n },\n getFloorArchive(id: number): Promise<string> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.get(`${ingestUrl}/360/floors/${id}/archive`)\n },\n generate360map(\n projectId: string,\n params: Generate360MapRequestPayload\n ): Promise<JsonObject> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.post(\n `${ingestUrl}/360/api/${projectId}/generate-360-map`,\n params\n )\n },\n get360QueueSize(\n ingestUrl: string,\n params: _360QueueQueryParams = {}\n ): Promise<_360QueueResponse> {\n return axios.get(`${ingestUrl}/360/queue`, { params })\n },\n },\n bim: {\n createUpload(\n projectId: string,\n params: { uploadedBy: string }\n ): Promise<IngestUploadInitResponse> {\n return axios.post(\n `${getIngestApiUrls(IngestTypes.Drone)[0]}/bim/${projectId}/upload`,\n null,\n { params }\n )\n },\n getBIMs(params: {\n params: Partial<BimUploadsQueryParams>\n }): Promise<BimUploadsResponse> {\n return axios.get(\n `${getIngestApiUrls(IngestTypes.Drone)[0]}/bim/uploads/`,\n params\n )\n },\n getArchive(id: number): Promise<Blob> {\n return axios.get(\n `${getIngestApiUrls(IngestTypes.Drone)[0]}/bim/uploads/archive/${id}`\n )\n },\n deleteUpload(id: number): Promise<void> {\n return axios.delete(\n `${getIngestApiUrls(IngestTypes.Drone)[0]}/bim/uploads/${id}`\n )\n },\n upload(\n projectId: string,\n params: {\n id: string\n name: string\n },\n payload: BimUploadPayload\n ): Promise<void> {\n return axios.put(\n `${getIngestApiUrls(IngestTypes.Drone)[0]}/bim/${projectId}/upload`,\n payload,\n { params }\n )\n },\n },\n webhook: {\n notifyBimUpdated(projectId: string, bimIdentifier: string): Promise<void> {\n const payload: BimUpdatedWebhookPayload = {\n eventName: \"bim.updated\",\n projectId,\n data: {\n updatedAt: new Date().toISOString(),\n bimIdentifier,\n },\n }\n\n return axios.post(\n `${getIngestApiUrls(IngestTypes.Drone)[0]}/webhook/`,\n payload\n )\n },\n },\n mobileCapture: {\n getProjectMobileAssets(\n params: MobileAssetsQueryParams,\n extraConfig: AxiosRequestConfig = {}\n ): Promise<MobileCaptureAssetsResponse> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.get(`${ingestUrl}/mobile/assets/`, {\n params,\n ...extraConfig,\n })\n },\n getMobileAssetPhoto(\n assetId: string | number,\n params: {\n projectId?: string\n project_id?: string\n isThumbnail?: boolean\n is_thumbnail?: boolean\n }\n ): Promise<string> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.get(`${ingestUrl}/mobile/assets/${assetId}`, {\n params,\n })\n },\n deleteAsset(assetId: string | number): Promise<void> {\n const ingestUrl = getIngestApiUrls(IngestTypes.ThreeSixty)[0]\n\n return axios.delete(`${ingestUrl}/mobile/assets/${assetId}`)\n },\n },\n utils: {\n async loadAllAssetsInQueue() {\n try {\n const droneUrls = getIngestApiUrls(IngestTypes.Drone)\n const urls360 = getIngestApiUrls(IngestTypes.ThreeSixty)\n const allAssets = []\n\n const droneResults = await Promise.all(\n droneUrls.map(async (ingestUrl) => {\n const result = await IngestApi.drone.getDroneQueueSize(ingestUrl)\n const version = IngestApi.utils.getIngestVersion(ingestUrl)\n\n return (result?.assetsDrone || []).map((asset) => ({\n ...asset,\n ingestVersion: version.toUpperCase(),\n }))\n })\n )\n\n const results360 = await Promise.all(\n urls360.map(async (ingestUrl) => {\n const result = await IngestApi.assets360.get360QueueSize(ingestUrl)\n const version = IngestApi.utils.getIngestVersion(ingestUrl)\n\n return (result?.assets360 || []).map((asset) => ({\n ...asset,\n ingestVersion: version.toUpperCase(),\n }))\n })\n )\n\n allAssets.push(...droneResults.flat(), ...results360.flat())\n\n return allAssets.sort(\n (a, b) =>\n new Date(a.updatedAt).getTime() - new Date(b.updatedAt).getTime()\n )\n } catch (error) {\n console.error(\"Error:\", error)\n\n return []\n }\n },\n getIngestVersion(ingestUrl: string): IngestVersions {\n const number = ingestUrl.match(/ingest(\\d*)/)?.[1] || \"1\"\n\n return `V${number}` as IngestVersions\n },\n async chooseIngestApiUrl(type: IngestTypes): Promise<string> {\n const urls = getIngestApiUrls(type)\n\n const queues = await Promise.all(\n urls.map(async (ingestUrl) => {\n try {\n let queueSize = 0\n if (type === IngestTypes.Drone) {\n const result = await IngestApi.drone.getDroneQueueSize(ingestUrl)\n queueSize = result?.assetsDrone?.length || 0\n } else {\n const result = await IngestApi.assets360.get360QueueSize(\n ingestUrl\n )\n queueSize = result?.assets360?.length || 0\n }\n\n return { ingestUrl, queue: queueSize }\n } catch {\n return { ingestUrl, queue: Infinity }\n }\n })\n )\n\n return queues.reduce((min, current) =>\n current.queue < min.queue ? current : min\n ).ingestUrl\n },\n },\n}\n","import { axios } from \"./client\"\nimport {\n ExNvrDeviceConfig,\n ExNvrLoginResponse,\n ExNvrRecordingInterval,\n ExNvrSystemStatus,\n} from \"@evercam/api/types\"\n\nexport const ExNvrApi = {\n users: {\n login(\n {\n apiUrl,\n username,\n password,\n }: {\n apiUrl: string\n username: string\n password: string\n },\n config: { timing?: boolean } = {}\n ): Promise<ExNvrLoginResponse> {\n return axios.post(\n `${apiUrl}/api/users/login`,\n {\n username,\n password,\n },\n config\n )\n },\n },\n devices: {\n getDevices({\n apiUrl,\n token,\n }: {\n apiUrl: string\n token: string\n }): Promise<ExNvrDeviceConfig> {\n return axios.get(`${apiUrl}/api/devices/`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n })\n },\n getSystemStatus(\n { apiUrl, token }: { apiUrl: string; token: string },\n config: Record<string, string> = {}\n ): Promise<ExNvrSystemStatus> {\n return axios.get(`${apiUrl}/api/system/status`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n ...config,\n })\n },\n getDeviceConfig(\n {\n apiUrl,\n deviceId,\n token,\n }: {\n apiUrl: string\n deviceId: string\n token: string\n },\n config: { timing?: boolean } = {}\n ): Promise<ExNvrDeviceConfig> {\n return axios.get(`${apiUrl}/api/devices/${deviceId}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n ...config,\n })\n },\n getAvailableRecordings(\n {\n apiUrl,\n deviceId,\n token,\n }: {\n apiUrl: string\n deviceId: string\n token: string\n },\n config: { timing?: boolean } = {}\n ): Promise<ExNvrRecordingInterval[]> {\n return axios.get(`${apiUrl}/api/devices/${deviceId}/recordings`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n ...config,\n })\n },\n downloadFootage({\n apiUrl,\n deviceId,\n token,\n startDate,\n duration,\n }: {\n apiUrl: string\n deviceId: string\n token: string\n startDate: string\n duration: number\n }): Promise<Blob> {\n return axios.get(`${apiUrl}/api/devices/${deviceId}/footage`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n params: {\n startDate,\n duration,\n },\n responseType: \"blob\",\n })\n },\n },\n}\n","import type {\n AuthzRoleUser,\n AuthzScope,\n AuthzScopeCreatePayload,\n AuthzScopeUpdatePayload,\n AuthzUserRolesResponse,\n PaginatedItems,\n ProjectExid,\n ProjectResourceRole,\n ProjectRoleRequestPayload,\n Role,\n RoleAssignmentLogBatch,\n RoleAssignmentLogsParams,\n RoleResourceType,\n} from \"@evercam/api/types\"\nimport { axios } from \"./client\"\nimport type { AxiosRequestConfig } from \"axios\"\n\nexport const AuthzApi = {\n roles: {\n async get(\n params?: AxiosRequestConfig & { params?: { scope?: string } }\n ): Promise<{ total: number; items: Role[] }> {\n return await axios.get(\"/admin/authz/roles\", params)\n },\n async getRoleDetails(id: number): Promise<Role> {\n return await axios.get(`/admin/authz/roles/${id}`)\n },\n createRole(params: Partial<Role> & Pick<Role, \"name\">): Promise<Role> {\n return axios.post(\"/admin/authz/roles\", params)\n },\n updateRole(id: number, params: Partial<Role>): Promise<Role> {\n return axios.patch(`/admin/authz/roles/${id}`, params)\n },\n deleteRole(id: number): Promise<void> {\n return axios.delete(`/admin/authz/roles/${id}`)\n },\n addPermission(id: number, action: string): Promise<void> {\n return axios.post(`/admin/authz/roles/${id}/permissions/`, { action })\n },\n deletePermission(id: number, action: string): Promise<void> {\n return axios.delete(`/admin/authz/roles/${id}/permissions/${action}`)\n },\n async getRoleUsers(id: number): Promise<AuthzRoleUser[]> {\n return axios.get(`/admin/authz/roles/${id}/users`)\n },\n async assignUsers(\n roleId: number,\n emails: Array<string>,\n resourceId: string = \"evercam-admin\"\n ): Promise<void> {\n return axios.post(`/admin/authz/roles/${roleId}/users`, {\n emails,\n resourceId,\n })\n },\n getAssignments(\n params: AxiosRequestConfig & { params: Partial<RoleAssignmentLogsParams> }\n ): Promise<PaginatedItems<RoleAssignmentLogBatch>> {\n return axios.get(\"/admin/authz/roles/assignments\", params)\n },\n getUserRoles(\n projectExid?: ProjectExid,\n resourceType?: RoleResourceType\n ): Promise<AuthzUserRolesResponse> {\n return axios.get(\"/users/roles\", {\n params: {\n resourceId: projectExid || null,\n resourceType: resourceType || null,\n },\n })\n },\n },\n projectRoles: {\n get(projectExid: ProjectExid): Promise<{ roles: Role[] }> {\n return axios.get(`/projects/${projectExid}/roles`)\n },\n create(\n projectExid: ProjectExid,\n params: ProjectRoleRequestPayload\n ): Promise<ProjectResourceRole> {\n return axios.post(`/projects/${projectExid}/roles`, params)\n },\n update(\n projectExid: ProjectExid,\n roleId: number,\n params: ProjectRoleRequestPayload\n ): Promise<ProjectResourceRole> {\n return axios.patch(`/projects/${projectExid}/roles/${roleId}`, params)\n },\n delete(projectExid: ProjectExid, roleId: number) {\n return axios.delete(`/projects/${projectExid}/roles/${roleId}`)\n },\n },\n scopes: {\n async get(): Promise<AuthzScope[]> {\n return await axios.get(\"/admin/authz/scopes\")\n },\n create(params: AuthzScopeCreatePayload): Promise<AuthzScope> {\n return axios.post(\"/admin/authz/scopes\", params)\n },\n delete(id: number): Promise<void> {\n return axios.delete(`/admin/authz/scopes/${id}`)\n },\n update(id: number, params: AuthzScopeUpdatePayload): Promise<AuthzScope> {\n return axios.patch(`/admin/authz/scopes/${id}`, params)\n },\n },\n}\n","import { axios } from \"./client\"\nimport {\n ChatScope,\n type ChatListPage,\n type ChatListParams,\n type ChatSession,\n} from \"@evercam/api/types\"\n\nfunction getWorkflowsBaseUrl(): string {\n return (axios.env.workflowsApiUrl || \"\").replace(/\\/+$/, \"\")\n}\n\n/**\n * The Evercam Workflows engine, for the admin Chat conversations viewer.\n *\n * The engine speaks camelCase natively, so every call preserves casing rather than\n * running the snake conversion the media API needs. The admin's bearer is attached\n * by the shared request interceptor — an admin resolves `is_admin` on the engine, so\n * `scope=all` returns every user's conversations.\n */\nexport const WorkflowsApi = {\n chat: {\n listConversations(params: ChatListParams = {}): Promise<ChatListPage> {\n return axios.get(`${getWorkflowsBaseUrl()}/chats/admin`, {\n params: { scope: ChatScope.All, ...params },\n preserveCasing: true,\n })\n },\n getConversation(id: string): Promise<ChatSession> {\n return axios.get(\n `${getWorkflowsBaseUrl()}/chats/${encodeURIComponent(id)}`,\n {\n preserveCasing: true,\n }\n )\n },\n },\n}\n"],"names":["_360PinType","_360UrlParams","_360AssetType","_360AssetLabel","_360IntergrationType","PathMarkerColor","EModelsType","AconexDocumentDataType","AconexFormComponentType","AconexMandatoryStatus","AconexIdentifiers","AnalyticsEventPageId","AnalyticsEvent","AnprDirection","AnprEventStatus","AnprExtractionStatus","AnprExtractionSaveMode","MediaType","MediaFileType","MediaStatus","MediaStatusId","ClipsCategory","MediaCategory","BimModelType","BimUploadStatus","BIMLayerTypes","ForgeBimUploadMethod","ForgeBimFileRejectionReason","ForgeBimUploadStage","ForgeBimDialogTrigger","CameraStatus","IntensityChange","IntensityChangeColorMap","CameraFeatureFlag","NvrModel","CameraModel","HddStatus","DuplicatedCameraFields","BimType","CompareStatus","DroneTagType","DroneMarkerType","DroneUrlParams","DroneProvider","ErrorType","ErrorCode","EvercamApiErrorCode","GateReportDetectionType","GateReportEventType","DetectionLabel","SegmentLabel","GateReportVehicleType","GateReportDataSource","GateReportEventDirection","GateReportExportType","GateReportProcessingStatus","VEHICLE_TYPE_IDS","HddFormat","HddType","HddState","WarehouseLocationIndex","WarehouseLocation","HddSize","IngestProcessingStatus","MobileAssetsType","IngestVersions","IngestTypes","IngestProcessingStepStatus","IngestProcessingRunStatus","MapType","Connector","ProcoreType","NotificationType","NvrDeviceType","NvrHddStatus","ProcoreObservationCustomFieldDataType","ProcoreObservationDefaultFieldNames","ProcoreTools","ProcoreToolUserAccessLevelIds","AutomationDialogType","ProjectStatus","ProjectArchiveTier","ProjectFeatureFlag","ProjectStorageStatus","BrainTool","CloudRecordingFrequency","CloudRecordingDuration","CloudRecordingDurationLabel","CloudRecordingStatus","SnapshotExtractionInterval","VpnServer","RoiType","RoiShapeType","RoiDirection","UrlParamValue","TimelineUrlParam","Timeline360UrlParams","TimelineDroneUrlParams","TimelineMediaUrlParams","TimelineBimUrlParams","TimelineExNvrRecordingsUrlParams","TimelineAnprUrlParams","TimelineMobileCaptureUrlParams","TimelineCommentsUrlParams","PowerType","PowerSchedule","RouterStatus","RouterScanInputMode","InviteStatus","SmsCommands","SmsStatuses","PerformanceStatus","WebGLExtensions","PlannerUrlParams","EDistortImageModes","EMapTypes","EMarkers","EPageType","ERoles","ProjectStorageProvider","ExNvrFootageAvailableStatus","ExNvrDeviceState","ExNvrMetricId","TimelapseStatus","TimelapseDuration","TimelapseScheduleType","TimelapsePeriod","TimelapseType","TimelapseExportStep","UserFeatureFlag","ContactRole","Persona","VideoWallItemType","HammertechRegion","HammertechPriority","HammertechClassification","HAMMERTECH_FILE_FIELD_TYPES","isHammertechFileFieldType","type","isHammertechSignatureWithName","WeatherReportScope","WeatherProvider","CommentsScope","CommentsLabel","PpeLabel","DetectionModel","ObservationMissingItem","ObservationCountsGranularity","ObservationRequiredItem","Operator","UnitSystem","MobileDevice","_3dViewer","InfoPage","DownloadFileType","TimelinePrecision","TaskStatus","PtzDirection","ZoomDirection","KitSupportCheckId","KitSupportCheckStatus","KitStatus","KitRegion","KitAlarm","KitMetricId","KitMetricPeriod","GrafanaMetricId","KitChartType","KitStorageTransport","AuditLogActionType","AuditLogEntity","SnapshotExtractionStatus","SnapshotExtractionType","SnapshotTransferStatus","SiteAnalyticsMode","SmartSearchComponentType","SmartSearchCondition","SmartSearchTargets","SmartSearchReturnType","SmartSearchOperatorType","SmartSearchOperators","SmartSearchConditionTypes","SiteAnalyticsViewType","VisionProvider","VISION_PROVIDER_OPTIONS","DelayUnit","CommonWidgetSettingsKeys","RecordingsWidgetSettingsKeys","LiveViewWidgetSettingsKeys","BimCompareWidgetSettingsKeys","VideoWallWidgetSettingsKeys","ThreeSixtyKeys","WidgetType","WidgetTypesByResource","CountryId","CountryCode","CameraRegion","AutomationProvider","AutomationType","AutomationWeatherReportType","AutomationExportFormat","AutomationWeatherDataGranularity","AutomationConfigStep","ActiveUsersMetric","RoleResourceType","RoleAssignmentLogAction","isProjectRole","role","isCameraRole","RING_AUTO_IMPORT_QUEUED","SiteViewSoftwareType","SiteViewerType","AiApp","AiProvider","AiConfigsPromptDialogMode","AiConfigsKeyDialogMode","AI_APP_CONFIGS","AI_PROVIDER_CONFIGS","AiPromptModel","AiPromptType","AiObservationFeasibilityStatus","AiObservationTimeDetection","AI_OBSERVATION_FEASIBILITY_CONFIGS","VehicleClassifierSource","AppRuntimeState","ChatMode","ChatScope","ObservationEventStatus","OBSERVATION_EVENT_STATUS_CONFIGS","ObservationSourceType","ObservationEventTrigger","Walk360ProcessedSessionStatus","toQueryString","paramsObject","forceSnakeCase","forceArrayBrackets","params","humps","acc","param","value","index","encodedParam","_acc","key","v","i","paramName","queryStringToObject","queryString","MEDIA_API_PREVIEW_URL_REGEX","getMediaApiPreviewName","url","_a","createErrorClass","errorName","error","e","BadRequestError","NotFoundError","UnauthorizedError","GatewayTimeoutError","BadGatewayError","ForbiddenError","HlsError","SnapshotError","ConflictError","InternalServerError","maxRequestsPerSecond","rateLimitWindow","recentRequestTimes","requestsRateLimit","now","delay","resolve","onRequest","request","axiosEnv","ensureBaseUrl","removeAuthorizationHeader","addAuthTokenHeader","addMediaApiPreviewHeader","commonHeaders","_b","envHeaders","transformCamelCaseToSnakeCase","onResponse","response","data","_c","_e","_d","duration","onError","statusCode","method","backendErrorCode","_g","_f","customError","customMessage","Axios","breadcrumbLogger","ensureCommonHeaders","target","JwtToken","preview","paramsIgnoredCasing","item","formData","OnRequestExpiredTokenInterceptor","isTokenExpired","handler","axios","h","promisifyRequest","reject","createStore","dbName","storeName","dbp","getDB","db","txMode","callback","defaultGetStoreFunc","defaultGetStore","get","customStore","store","set","del","clear","SwrStore","prefix","__publicField","config","paramsKey","serializedValue","Swr","axiosInstance","finalConfig","cachedPromise","freshPromise","fresh","err","requestInterceptors","responseInterceptors","errorInterceptors","vars","defaultGet","args","requestInterceptor","errorInterceptor","interceptor","responseInterceptor","setHeader","headerName","setToken","token","CANCEL_REASON","createRequestManager","requests","source","KIT_SUPPORT_CHECKLIST_TIMEOUT","AdminApi","cameraId","device","payload","providerId","exid","extraConfig","newOwnerId","id","ids","template","extractionId","cameraExid","kitId","metric","fromDate","toDate","tagId","projectExid","hddId","footageId","simId","number","tag","email","VideoWallApi","body","getFirebaseDbApi","getFirebaseStorageUrl","getFirebaseStorageToken","getForgeTokenServerUrl","firebaseRequestConfig","_3dFirebaseApi","projectId","tags","markers","dateId","points","plan","uuid","plans","model","trueIndex","modelData","models","isScene3D","transform","items","floorIndex","floorId","floors","dates","pins","projectID","dateID","floorID","featureFlagName","stepsValue","details","gpxContent","blob","modelIndex","viewId","view","viewerType","viewerPath","dbLink","mapViews","link","sitePlanId","getAiApiUrl","getAiApiUrlV2","AiApi","extraParams","anprEventId","captureTime","updatedBy","iouThreshold","eventId","isApproved","restParams","queryParams","queryId","cameraExids","query","fileType","directDownload","limit","page","state","appUuid","appId","serviceId","promptId","observationTypeId","keyId","revoke","sortBy","sortDir","observationTypeIds","rest","options","verdicts","WebRtcApi","WeatherApi","getLabsBaseUrl","labsPrNumber","EvercamLabsApi","fileName","metrics","period","EvercamApi","provider","apiId","apiKey","widgetId","widgetKey","user","sessionId","dateTime","headers","name","emails","scope","documentTypeId","hubId","parentFolderId","getDerivatives","folderId","timestamp","year","month","cancelToken","day","progressPhotoId","onUploadProgress","_event","companyId","archive","clientId","dealId","PtzApi","presetId","isRecordingFromNvr","presetName","direction","useContinuous","zoomValue","getIngestApiUrls","IngestApi","ingestUrl","droneUrl","urls","validResponses","withDem","r","date","floor","sourceId","targetId","createdBy","onDownloadProgress","bimIdentifier","assetId","droneUrls","urls360","allAssets","droneResults","result","version","asset","results360","a","b","queueSize","min","current","ExNvrApi","apiUrl","username","password","deviceId","startDate","AuthzApi","action","roleId","resourceId","resourceType","getWorkflowsBaseUrl","WorkflowsApi"],"mappings":"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","x_google_ignoreList":[58]}