een-api-toolkit 0.3.103 → 0.3.105

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 (36) hide show
  1. package/CHANGELOG.md +37 -97
  2. package/dist/index.cjs +3 -4
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.js +2147 -2960
  5. package/dist/index.js.map +1 -1
  6. package/dist/service-C15aBZxB.cjs +2 -0
  7. package/dist/service-C15aBZxB.cjs.map +1 -0
  8. package/dist/service-uw8agT31.js +348 -0
  9. package/dist/service-uw8agT31.js.map +1 -0
  10. package/docs/AI-CONTEXT.md +1 -1
  11. package/docs/ai-reference/AI-AUTH.md +1 -1
  12. package/docs/ai-reference/AI-AUTOMATIONS.md +1 -1
  13. package/docs/ai-reference/AI-DEVICES.md +1 -1
  14. package/docs/ai-reference/AI-EVENT-DATA-SCHEMAS.md +1 -1
  15. package/docs/ai-reference/AI-EVENTS.md +1 -1
  16. package/docs/ai-reference/AI-GROUPING.md +1 -1
  17. package/docs/ai-reference/AI-JOBS.md +1 -1
  18. package/docs/ai-reference/AI-MEDIA.md +1 -1
  19. package/docs/ai-reference/AI-PTZ.md +1 -1
  20. package/docs/ai-reference/AI-SETUP.md +1 -1
  21. package/docs/ai-reference/AI-USERS.md +1 -1
  22. package/examples/vue-alerts-metrics/package-lock.json +7 -7
  23. package/examples/vue-automations/e2e/auth.spec.ts +44 -28
  24. package/examples/vue-automations/package-lock.json +7 -7
  25. package/examples/vue-bridges/package-lock.json +7 -7
  26. package/examples/vue-cameras/package-lock.json +7 -7
  27. package/examples/vue-event-subscriptions/package-lock.json +7 -7
  28. package/examples/vue-events/package-lock.json +7 -7
  29. package/examples/vue-feeds/package-lock.json +7 -7
  30. package/examples/vue-jobs/package-lock.json +7 -7
  31. package/examples/vue-layouts/package-lock.json +7 -7
  32. package/examples/vue-media/package-lock.json +7 -7
  33. package/examples/vue-ptz/package-lock.json +4 -4
  34. package/examples/vue-users/package-lock.json +9 -9
  35. package/examples/vue-users/package.json +1 -1
  36. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -2,99 +2,10 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- ## [0.3.103] - 2026-02-26
5
+ ## [0.3.105] - 2026-03-26
6
6
 
7
7
  ### Release Summary
8
8
 
9
- #### PR #134: release: v0.3.101 - multi-move-type PTZ support
10
- ## Summary
11
- - Add move type dropdown (Position / Direction / Center On) to the PositionInput panel in `examples/vue-ptz`
12
- - Dynamic input fields per move type with proper validation
13
- - Replace auto-updating x/y/z with explicit "Import Current Position" button
14
- - Refactored `apply()` with `buildMove()` extraction for cleaner code
15
- - `try/finally` for defensive state reset, null-safe optional chaining
16
-
17
- ## Version
18
- `0.3.101`
19
-
20
- ## Commits
21
- - `2a4aac8f` feat: add multi-move-type support to vue-ptz PositionInput
22
- - `f125139c` fix: address code review findings for PositionInput
23
- - `addcc0ec` fix: wrap movePtz calls in try/finally to always reset applying state
24
- - `a1365f24` fix: address remaining review findings for PositionInput
25
-
26
- ## Local test results
27
- - Lint: passed (0 errors, 1 pre-existing warning)
28
- - Unit tests: 684/684 passed
29
- - Build: success
30
- - E2E tests: 12/12 example apps passed
31
- - Security review: no issues found
32
- - Docs confidential data scan: clean (274 .md files scanned)
33
-
34
- ## Test plan
35
- - [ ] Select "Position" move type — verify x/y/z inputs, Import Current Position button
36
- - [ ] Select "Direction" move type — verify checkboxes + step size, Apply sends direction move
37
- - [ ] Select "Center On" move type — verify rX/rY inputs, Apply sends centerOn move
38
- - [ ] Verify x/y/z fields do NOT auto-update when position refreshes
39
-
40
- 🤖 Generated with [Claude Code](https://claude.com/claude-code)
41
-
42
- #### PR #135: chore: bump 11 dev dependencies (v0.3.101)
43
- ## Summary
44
- Dependabot bump of 11 dev dependencies (all minor/patch versions). Only `package-lock.json` changed — no source code, configuration, or documentation modified.
45
-
46
- | Package | From | To |
47
- |---|---|---|
48
- | `@eslint/js` | 9.39.2 | 9.39.3 |
49
- | `@types/node` | 25.2.3 | 25.3.0 |
50
- | `@typescript-eslint/eslint-plugin` | 8.55.0 | 8.56.0 |
51
- | `@typescript-eslint/parser` | 8.55.0 | 8.56.0 |
52
- | `dotenv` | 17.2.4 | 17.3.1 |
53
- | `eslint` | 9.39.2 | 9.39.3 |
54
- | `eslint-plugin-vue` | 10.7.0 | 10.8.0 |
55
- | `jsdom` | 28.0.0 | 28.1.0 |
56
- | `typedoc` | 0.28.16 | 0.28.17 |
57
- | `vue-eslint-parser` | 10.2.0 | 10.4.0 |
58
- | `vue-tsc` | 3.2.4 | 3.2.5 |
59
-
60
- ## Version
61
- `0.3.101`
62
-
63
- ## Commits
64
- - `237e9886` chore(deps-dev): bump the npm-dependencies group with 11 updates
65
-
66
- ## Local test results
67
- - Lint: passed (0 errors, 1 pre-existing warning)
68
- - Unit tests: 684/684 passed
69
- - Build: success
70
- - E2E tests: 12/12 example apps passed (run on identical code in dependabot branch)
71
-
72
- ## Test plan
73
- - [ ] Verify all CI checks pass (no runtime impact expected from dev dependency updates)
74
-
75
- 🤖 Generated with [Claude Code](https://claude.com/claude-code)
76
-
77
- #### PR #136: Bump github/codeql-action from 4.32.3 to 4.32.4
78
- ## Summary
79
- - Bumps `github/codeql-action` SHA pins from v4.32.3 to v4.32.4 in `.github/workflows/codeql.yml`
80
- - Dependabot-originated update merged via develop
81
-
82
- ## Details
83
- - **Version**: v0.3.101
84
- - **Commits**:
85
- - `b3ddb541` chore(deps): bump github/codeql-action from 4.32.3 to 4.32.4
86
- - `cd3c541f` Merge pull request #131
87
-
88
- ## Test Results
89
- - Lint: passed (0 errors, 1 pre-existing warning)
90
- - Unit tests: 684/684 passed
91
- - Build: passed
92
- - E2E: 12/12 example apps passed locally
93
- - Security: no concerns (SHA pin update only)
94
- - Docs: no .md files changed
95
-
96
- 🤖 Generated with [Claude Code](https://claude.com/claude-code)
97
-
98
9
  #### PR #138: Release v0.3.103: New data schemas, access activation event, alert schemas
99
10
  ## Summary
100
11
 
@@ -136,20 +47,49 @@ No secrets, credentials, internal hostnames, or PII found in changed documentati
136
47
 
137
48
  🤖 Generated with [Claude Code](https://claude.com/claude-code)
138
49
 
50
+ #### PR #148: Release v0.3.104: dependency updates and audit fixes
51
+ ## Summary
52
+ - Merged 4 Dependabot PRs updating GitHub Actions and npm dev dependencies
53
+ - Resolved all 13 npm audit vulnerabilities via `npm audit fix`
54
+ - No source code changes — only dependency updates, lock files, and auto-generated docs
55
+
56
+ ### Dependabot PRs included
57
+ - **#142** `actions/setup-node` 6.2.0 → 6.3.0
58
+ - **#139** `actions/upload-artifact` 6.0.0 → 7.0.0
59
+ - **#146** `github/codeql-action` 4.32.4 → 4.34.1
60
+ - **#147** 15 npm dev dependency updates (eslint, vite 8, vitest, vue, typedoc, etc.)
61
+
62
+ ### Audit fix
63
+ Resolved vulnerabilities in: minimatch, picomatch, yaml, flatted, lodash, ajv, diff, @rushstack/* packages. `npm audit` now reports 0 vulnerabilities.
64
+
65
+ ## Test plan
66
+ - [x] Lint passes (0 errors, 1 pre-existing warning)
67
+ - [x] Type check passes
68
+ - [x] 684/684 unit tests pass
69
+ - [x] Build succeeds (ES + CJS)
70
+ - [x] No confidential data in documentation
71
+ - [ ] E2E tests (proxy unavailable locally; CI will validate)
72
+
73
+ **Version**: 0.3.104
74
+
75
+ 🤖 Generated with [Claude Code](https://claude.com/claude-code)
76
+
139
77
 
140
78
  ### Detailed Changes
141
79
 
142
- #### Features
143
- - Address review feedback: sort schemas, clarify unmapped entries, fix doc order
144
- - Add new data schemas, event type, and alert schemas from API spec updates
80
+ #### Bug Fixes
81
+ - fix: make vue-automations E2E tests resilient to empty data
82
+ - fix: resolve 13 npm audit vulnerabilities in dev dependencies
145
83
 
146
84
  #### Other Changes
147
- - chore(deps-dev): bump the npm-dependencies group with 11 updates
148
- - chore(deps): bump github/codeql-action from 4.32.3 to 4.32.4
85
+ - chore(deps-dev): bump the npm-dependencies group across 1 directory with 16 updates
86
+ - chore(deps): bump github/codeql-action from 4.32.4 to 4.34.1
87
+ - chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0
88
+ - chore(deps): bump actions/upload-artifact from 6.0.0 to 7.0.0
149
89
 
150
90
  ### Links
151
91
  - [npm package](https://www.npmjs.com/package/een-api-toolkit)
152
- - [Full Changelog](https://github.com/klaushofrichter/een-api-toolkit/compare/v0.3.101...v0.3.103)
92
+ - [Full Changelog](https://github.com/klaushofrichter/een-api-toolkit/compare/v0.3.103...v0.3.105)
153
93
 
154
94
  ---
155
- *Released: 2026-02-26 14:49:23 CST*
95
+ *Released: 2026-03-26 15:29:25 CDT*
package/dist/index.cjs CHANGED
@@ -1,4 +1,3 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const De=require("pinia"),E=require("vue"),Oe={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},me=()=>{try{return Oe?.VITE_DEBUG==="true"}catch{return!1}};function s(...e){me()&&console.log("[een-api-toolkit]",...e)}const be={localStorage:"persists across sessions",sessionStorage:"per-tab, cleared on tab close",memory:"tokens lost on page refresh"};class $e{store=new Map;getItem(n){return this.store.get(n)??null}setItem(n,t){this.store.set(n,t)}removeItem(n){this.store.delete(n)}}class le{constructor(n){this.storage=n}getItem(n){return this.storage.getItem(n)}setItem(n,t){this.storage.setItem(n,t)}removeItem(n){this.storage.removeItem(n)}}let Y="localStorage",G=null;function J(){return G||(G=new $e),G}function ke(e){Y=e}function we(){return Y}function Z(){switch(Y){case"memory":return J();case"sessionStorage":return typeof sessionStorage<"u"?new le(sessionStorage):(s("sessionStorage unavailable, falling back to memory storage"),J());default:return typeof localStorage<"u"?new le(localStorage):(s("localStorage unavailable, falling back to memory storage"),J())}}const D={};let w={};function je(e={}){const n=e.storageStrategy??"localStorage";ke(n),w={proxyUrl:e.proxyUrl??D?.VITE_PROXY_URL,clientId:e.clientId??D?.VITE_EEN_CLIENT_ID,redirectUri:e.redirectUri??D?.VITE_REDIRECT_URI,storageStrategy:n,debug:e.debug??D?.VITE_DEBUG==="true"}}function Fe(){return w}function C(){return w.proxyUrl??D?.VITE_PROXY_URL}function de(){return w.clientId??D?.VITE_EEN_CLIENT_ID}function ee(){return w.redirectUri??D?.VITE_REDIRECT_URI??"http://127.0.0.1:3333"}function l(e){return{data:e,error:null}}function r(e,n,t,i){return{data:null,error:{code:e,message:n,status:t,details:i}}}function Le(e){if(e)return typeof e=="string"?e:e.connectionStatus}function Ne(e){return typeof e=="object"&&e!==null}function T(e){return e.endsWith("+00:00")?e:e.endsWith("Z")?e.replace("Z","+00:00"):e}const qe=[".eagleeyenetworks.com",".een.cloud"];function B(e){if(!e||typeof e!="string")return!1;const n=e.toLowerCase().trim();return!n||!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)*$/.test(n)?!1:qe.some(i=>n===i.substring(1)||n.endsWith(i))}let X=null;function Pe(){return X||(X=Promise.resolve().then(()=>He).then(e=>e.refreshToken)),X}const d=De.defineStore("een-auth",()=>{const e=E.ref(null),n=E.ref(null),t=E.ref(null),i=E.ref(null),a=E.ref(null),o=E.ref(443),c=E.ref(null),u=E.ref(null),R=E.ref(!1);let h=null;const A=E.ref(!1),g=E.ref(null),O=E.computed(()=>!!e.value),m=E.computed(()=>a.value?o.value===443?`https://${a.value}`:`https://${a.value}:${o.value}`:null),U=E.computed(()=>n.value?Date.now()>=n.value:!0),W=E.computed(()=>n.value?Math.max(0,n.value-Date.now()):0);function V(f,_){e.value=f,n.value=Date.now()+_*1e3,k(),M(),s("Token set, expires in",_,"seconds")}function q(f){t.value=f,k()}function S(f){i.value=f,k()}function $(f){let _,p=443;if(typeof f=="string")try{const v=new URL(f.startsWith("http")?f:`https://${f}`);_=v.hostname,p=v.port?parseInt(v.port,10):443}catch(v){return console.warn(`[EEN API Toolkit] Rejected invalid URL: ${f}`),s("Failed to parse URL:",v instanceof Error?v.message:String(v)),!1}else _=f.hostname.toLowerCase().trim(),p=f.port??443;return typeof p!="number"||!Number.isInteger(p)||p<1||p>65535?(console.warn(`[EEN API Toolkit] Rejected invalid port: ${p}`),!1):B(_)?(a.value=_,o.value=p,k(),s("Base URL set:",m.value),!0):(console.warn(`[EEN API Toolkit] Rejected hostname - not an allowed EEN domain: ${_}`),!1)}function I(f){c.value=f,k()}function M(){if(u.value&&(clearTimeout(u.value),u.value=null),!n.value||!e.value)return;const f=Date.now(),p=n.value-f,v=300*1e3,b=p/2,P=Math.min(v,b),Se=Math.max(p-P,60*1e3),ue=Math.max(Se,5e3);s("Auto-refresh scheduled in",Math.round(ue/1e3),"seconds"),u.value=setTimeout(async()=>{await Ae()},ue)}async function Ae(){return h?(s("Refresh already in progress, waiting for existing refresh"),h):(R.value=!0,s("Performing auto-refresh"),h=(async()=>{try{const _=await(await Pe())();_.error?(A.value=!0,g.value=_.error.message,s("Auto-refresh failed:",_.error.message)):(A.value=!1,g.value=null,s("Auto-refresh successful"))}catch(f){A.value=!0,g.value=f instanceof Error?f.message:String(f),s("Auto-refresh error:",f)}finally{R.value=!1,h=null}})(),h)}function Te(){A.value=!1,g.value=null}function K(){u.value&&(clearTimeout(u.value),u.value=null),e.value=null,n.value=null,t.value=null,i.value=null,a.value=null,o.value=443,c.value=null,A.value=!1,g.value=null,ye()}function se(){K(),s("Logged out")}function Ie(){Ue(),e.value&&!U.value?(M(),s("Initialized from storage")):e.value&&U.value&&(s("Stored token expired, clearing"),se())}function k(){try{const f=Z();e.value&&f.setItem("een_token",e.value),n.value&&f.setItem("een_tokenExpiration",String(n.value)),t.value&&f.setItem("een_refreshTokenMarker",t.value),i.value&&f.setItem("een_sessionId",i.value),a.value&&f.setItem("een_hostname",a.value),o.value!==443&&f.setItem("een_port",String(o.value)),c.value&&f.setItem("een_userProfile",JSON.stringify(c.value))}catch(f){s("Failed to save to storage:",f instanceof Error?f.message:String(f))}}function Ue(){try{const f=Z();e.value=f.getItem("een_token");const _=f.getItem("een_tokenExpiration");n.value=_?parseInt(_,10):null,t.value=f.getItem("een_refreshTokenMarker"),i.value=f.getItem("een_sessionId");const p=f.getItem("een_hostname");if(p&&!B(p)){console.warn(`[EEN API Toolkit] Rejected stored hostname - clearing all auth data: ${p}`),K();return}a.value=p;const v=f.getItem("een_port"),b=v?parseInt(v,10):443;if(!Number.isInteger(b)||b<1||b>65535){console.warn(`[EEN API Toolkit] Rejected stored port - clearing all auth data: ${v}`),K();return}o.value=b;const P=f.getItem("een_userProfile");c.value=P?JSON.parse(P):null}catch(f){s("Failed to load from storage:",f instanceof Error?f.message:String(f))}}function ye(){try{const f=Z();f.removeItem("een_token"),f.removeItem("een_tokenExpiration"),f.removeItem("een_refreshTokenMarker"),f.removeItem("een_sessionId"),f.removeItem("een_hostname"),f.removeItem("een_port"),f.removeItem("een_userProfile")}catch(f){s("Failed to clear storage:",f instanceof Error?f.message:String(f))}}return{token:e,tokenExpiration:n,refreshTokenMarker:t,sessionId:i,hostname:a,port:o,userProfile:c,isRefreshing:R,refreshFailed:A,refreshFailedMessage:g,isAuthenticated:O,baseUrl:m,isTokenExpired:U,tokenExpiresIn:W,setToken:V,setRefreshTokenMarker:q,setSessionId:S,setBaseUrl:$,setUserProfile:I,setupAutoRefresh:M,clearRefreshFailed:Te,logout:se,initialize:Ie}}),Be="https://auth.eagleeyenetworks.com/oauth2/authorize";function fe(){const e=de();if(!e)throw new Error("Client ID not configured. Call initEenToolkit() or set VITE_EEN_CLIENT_ID");const n=crypto.randomUUID();try{sessionStorage.setItem("een_oauth_state",n)}catch{}const t=new URLSearchParams({client_id:e,response_type:"code",scope:"vms.all",redirect_uri:ee(),state:n});return s("Generated auth URL with state:",n),`${Be}?${t.toString()}`}async function te(e){const n=C();if(!n)return r("AUTH_FAILED","Proxy URL not configured. Call initEenToolkit() or set VITE_PROXY_URL");const t=new URLSearchParams({code:e,redirect_uri:ee()});try{const i=await fetch(`${n}/proxy/getAccessToken?${t.toString()}`,{method:"POST",credentials:"include",headers:{Accept:"application/json"}});if(!i.ok){const o=await i.text().catch(()=>"Unknown error");return r("AUTH_FAILED",`Token exchange failed: ${o}`,i.status)}const a=await i.json();return s("Token received, expires in:",a.expiresIn),l(a)}catch(i){return r("NETWORK_ERROR",`Failed to exchange code: ${String(i)}`)}}async function ge(){const e=C();if(!e)return r("AUTH_FAILED","Proxy URL not configured");const n=d();try{const t={Accept:"application/json"};n.sessionId&&(t.Authorization=`Bearer ${n.sessionId}`);const i=await fetch(`${e}/proxy/refreshAccessToken`,{method:"POST",credentials:"include",headers:t});if(!i.ok){const o=await i.text().catch(()=>"Unknown error");return r("AUTH_FAILED",`Token refresh failed: ${o}`,i.status)}const a=await i.json();return n.setToken(a.accessToken,a.expiresIn),s("Token refreshed, expires in:",a.expiresIn),l(a)}catch(t){return r("NETWORK_ERROR",`Failed to refresh token: ${String(t)}`)}}async function Re(){const e=C();if(!e)return r("AUTH_FAILED","Proxy URL not configured");const n=d();try{const t={Accept:"application/json"};n.sessionId&&(t.Authorization=`Bearer ${n.sessionId}`);const i=await fetch(`${e}/proxy/revoke`,{method:"POST",credentials:"include",headers:t});if(n.logout(),!i.ok){const a=await i.text().catch(()=>"Unknown error");return r("AUTH_FAILED",`Token revocation failed: ${a}`,i.status)}return s("Token revoked"),l(void 0)}catch(t){return n.logout(),r("NETWORK_ERROR",`Failed to revoke token: ${String(t)}`)}}async function he(e,n){let t=null;try{t=sessionStorage.getItem("een_oauth_state"),sessionStorage.removeItem("een_oauth_state")}catch{}if(!t)return r("AUTH_FAILED","No OAuth state found. Please restart the login process.");if(!Ce(n,t))return r("AUTH_FAILED","Invalid OAuth state. Possible CSRF attack.");s("State validated, exchanging code for token");const i=await te(e);if(i.error)return i;const a=d(),o=i.data;return a.setBaseUrl(o.httpsBaseUrl)?(a.setToken(o.accessToken,o.expiresIn),a.setRefreshTokenMarker("present"),a.setSessionId(o.sessionId),s("Auth callback complete, user:",o.userEmail),l(o)):r("AUTH_FAILED","OAuth response contained an invalid or disallowed hostname")}function Ce(e,n){if(e.length!==n.length)return!1;let t=0;for(let i=0;i<e.length;i++)t|=e.charCodeAt(i)^n.charCodeAt(i);return t===0}const He=Object.freeze(Object.defineProperty({__proto__:null,getAccessToken:te,getAuthUrl:fe,handleAuthCallback:he,refreshToken:ge,revokeToken:Re},Symbol.toStringTag,{value:"Module"}));async function ze(){const e=d();if(!e.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!e.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const n=`${e.baseUrl}/api/v3.0/users/self`;s("Fetching current user:",n);try{const t=await fetch(n,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${e.token}`}});if(!t.ok)return ne(t);const i=await t.json();return s("Current user fetched:",i.email),e.setUserProfile(i),l(i)}catch(t){return r("NETWORK_ERROR",`Failed to fetch current user: ${String(t)}`)}}async function Qe(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.include&&e.include.length>0&&t.append("include",e.include.join(","));const i=t.toString(),a=`${n.baseUrl}/api/v3.0/users${i?`?${i}`:""}`;s("Fetching users:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return ne(o);const c=await o.json();return s("Users fetched:",c.results?.length??0,"users"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch users: ${String(o)}`)}}async function xe(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","User ID is required");const i=new URLSearchParams;n?.include&&n.include.length>0&&i.append("include",n.include.join(","));const a=i.toString(),o=`${t.baseUrl}/api/v3.0/users/${encodeURIComponent(e)}${a?`?${a}`:""}`;s("Fetching user:",o);try{const c=await fetch(o,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t.token}`}});if(!c.ok)return ne(c);const u=await c.json();return s("User fetched:",u.email),l(u)}catch(c){return r("NETWORK_ERROR",`Failed to fetch user: ${String(c)}`)}}async function ne(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch{t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}async function We(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.include&&e.include.length>0&&t.append("include",e.include.join(",")),e?.sort&&e.sort.length>0&&t.append("sort",e.sort.join(",")),e?.locationId__in&&e.locationId__in.length>0&&t.append("locationId__in",e.locationId__in.join(",")),e?.bridgeId__in&&e.bridgeId__in.length>0&&t.append("bridgeId__in",e.bridgeId__in.join(",")),e?.multiCameraId&&t.append("multiCameraId",e.multiCameraId),e?.multiCameraId__ne&&t.append("multiCameraId__ne",e.multiCameraId__ne),e?.multiCameraId__in&&e.multiCameraId__in.length>0&&t.append("multiCameraId__in",e.multiCameraId__in.join(",")),e?.tags__contains&&e.tags__contains.length>0&&t.append("tags__contains",e.tags__contains.join(",")),e?.tags__any&&e.tags__any.length>0&&t.append("tags__any",e.tags__any.join(",")),e?.packages__contains&&e.packages__contains.length>0&&t.append("packages__contains",e.packages__contains.join(",")),e?.name&&t.append("name",e.name),e?.name__contains&&t.append("name__contains",e.name__contains),e?.name__in&&e.name__in.length>0&&t.append("name__in",e.name__in.join(",")),e?.id__in&&e.id__in.length>0&&t.append("id__in",e.id__in.join(",")),e?.id__notIn&&e.id__notIn.length>0&&t.append("id__notIn",e.id__notIn.join(",")),e?.id__contains&&t.append("id__contains",e.id__contains),e?.layoutId&&t.append("layoutId",e.layoutId),typeof e?.shared=="boolean"&&t.append("shareDetails.shared",String(e.shared)),e?.sharedCameraAccount&&t.append("shareDetails.accountId",e.sharedCameraAccount),typeof e?.firstResponder=="boolean"&&t.append("shareDetails.firstResponder",String(e.firstResponder)),typeof e?.directToCloud=="boolean"&&t.append("deviceInfo.directToCloud",String(e.directToCloud)),e?.speakerId__in&&e.speakerId__in.length>0&&t.append("speakerId__in",e.speakerId__in.join(",")),e?.q&&t.append("q",e.q),typeof e?.qRelevance__gte=="number"&&t.append("qRelevance__gte",String(e.qRelevance__gte)),e?.enabledAnalytics__contains&&e.enabledAnalytics__contains.length>0&&t.append("enabledAnalytics__contains",e.enabledAnalytics__contains.join(",")),e?.status__in&&e.status__in.length>0&&t.append("status__in",e.status__in.join(",")),e?.status__ne&&t.append("status__ne",e.status__ne);const i=t.toString(),a=`${n.baseUrl}/api/v3.0/cameras${i?`?${i}`:""}`;s("Fetching cameras:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return re(o);const c=await o.json();return s("Cameras fetched:",c.results?.length??0,"cameras"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch cameras: ${String(o)}`)}}async function Ve(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Camera ID is required");const i=new URLSearchParams;n?.include&&n.include.length>0&&i.append("include",n.include.join(","));const a=i.toString(),o=`${t.baseUrl}/api/v3.0/cameras/${encodeURIComponent(e)}${a?`?${a}`:""}`;s("Fetching camera:",o);try{const c=await fetch(o,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t.token}`}});if(!c.ok)return re(c);const u=await c.json();return s("Camera fetched:",u.name),l(u)}catch(c){return r("NETWORK_ERROR",`Failed to fetch camera: ${String(c)}`)}}async function Me(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Camera ID is required");const i=new URLSearchParams;n?.include&&n.include.length>0&&i.append("include",n.include.join(","));const a=i.toString(),o=`${t.baseUrl}/api/v3.0/cameras/${encodeURIComponent(e)}/settings${a?`?${a}`:""}`;s("Fetching camera settings:",o);try{const c=await fetch(o,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t.token}`}});if(!c.ok)return re(c);const u=await c.json();return s("Camera settings fetched for:",e),l(u)}catch(c){return r("NETWORK_ERROR",`Failed to fetch camera settings: ${String(c)}`)}}async function re(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch(i){s("Failed to parse error response JSON:",i),t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}async function Ke(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.include&&e.include.length>0&&t.append("include",e.include.join(",")),e?.sort&&e.sort.length>0&&t.append("sort",e.sort.join(",")),e?.locationId__in&&e.locationId__in.length>0&&t.append("locationId__in",e.locationId__in.join(",")),e?.tags__contains&&e.tags__contains.length>0&&t.append("tags__contains",e.tags__contains.join(",")),e?.tags__any&&e.tags__any.length>0&&t.append("tags__any",e.tags__any.join(",")),e?.name&&t.append("name",e.name),e?.name__contains&&t.append("name__contains",e.name__contains),e?.name__in&&e.name__in.length>0&&t.append("name__in",e.name__in.join(",")),e?.id__in&&e.id__in.length>0&&t.append("id__in",e.id__in.join(",")),e?.id__notIn&&e.id__notIn.length>0&&t.append("id__notIn",e.id__notIn.join(",")),e?.q&&t.append("q",e.q),typeof e?.qRelevance__gte=="number"&&t.append("qRelevance__gte",String(e.qRelevance__gte)),e?.status__in&&e.status__in.length>0&&t.append("status__in",e.status__in.join(",")),e?.status__ne&&t.append("status__ne",e.status__ne);const i=t.toString(),a=`${n.baseUrl}/api/v3.0/bridges${i?`?${i}`:""}`;s("Fetching bridges:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return _e(o);const c=await o.json();return s("Bridges fetched:",c.results?.length??0,"bridges"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch bridges: ${String(o)}`)}}async function Ge(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Bridge ID is required");const i=new URLSearchParams;n?.include&&n.include.length>0&&i.append("include",n.include.join(","));const a=i.toString(),o=`${t.baseUrl}/api/v3.0/bridges/${encodeURIComponent(e)}${a?`?${a}`:""}`;s("Fetching bridge:",o);try{const c=await fetch(o,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t.token}`}});if(!c.ok)return _e(c);const u=await c.json();return s("Bridge fetched:",u.name),l(u)}catch(c){return r("NETWORK_ERROR",`Failed to fetch bridge: ${String(c)}`)}}async function _e(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch(i){s("Failed to parse error response JSON:",i),t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}async function Je(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.include&&e.include.length>0&&t.append("include",e.include.join(",")),e?.sort&&e.sort.length>0&&t.append("sort",e.sort.join(",")),e?.name&&t.append("name",e.name),e?.name__in&&e.name__in.length>0&&t.append("name__in",e.name__in.join(",")),e?.name__contains&&t.append("name__contains",e.name__contains),e?.id__in&&e.id__in.length>0&&t.append("id__in",e.id__in.join(",")),e?.["layoutPanes.cameras.bridgeId"]&&t.append("layoutPanes.cameras.bridgeId",e["layoutPanes.cameras.bridgeId"]),e?.q&&t.append("q",e.q),typeof e?.qRelevance__gte=="number"&&t.append("qRelevance__gte",String(e.qRelevance__gte));const i=t.toString(),a=`${n.baseUrl}/api/v3.0/layouts${i?`?${i}`:""}`;s("Fetching layouts:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return j(o);const c=await o.json();return s("Layouts fetched:",c.results?.length??0,"layouts"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch layouts: ${String(o)}`)}}async function Ze(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Layout ID is required");const i=new URLSearchParams;n?.include&&n.include.length>0&&i.append("include",n.include.join(","));const a=i.toString(),o=`${t.baseUrl}/api/v3.0/layouts/${encodeURIComponent(e)}${a?`?${a}`:""}`;s("Fetching layout:",o);try{const c=await fetch(o,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t.token}`}});if(!c.ok)return j(c);const u=await c.json();return s("Layout fetched:",u.name),l(u)}catch(c){return r("NETWORK_ERROR",`Failed to fetch layout: ${String(c)}`)}}async function Xe(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e.name)return r("VALIDATION_ERROR","Layout name is required");if(!e.settings)return r("VALIDATION_ERROR","Layout settings are required");const t=`${n.baseUrl}/api/v3.0/layouts`;s("Creating layout:",e.name);const i={name:e.name,settings:e.settings};e.panes&&(i.panes=e.panes);try{const a=await fetch(t,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",Authorization:`Bearer ${n.token}`},body:JSON.stringify(i)});if(!a.ok)return j(a);const o=await a.json();return s("Layout created:",o.id,o.name),l(o)}catch(a){return r("NETWORK_ERROR",`Failed to create layout: ${String(a)}`)}}async function Ye(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Layout ID is required");if(n.name===void 0&&n.settings===void 0&&n.panes===void 0)return r("VALIDATION_ERROR","At least one field (name, settings, or panes) must be provided for update");const i=`${t.baseUrl}/api/v3.0/layouts/${encodeURIComponent(e)}`;s("Updating layout:",e);const a={};n.name!==void 0&&(a.name=n.name),n.settings!==void 0&&(a.settings=n.settings),n.panes!==void 0&&(a.panes=n.panes);try{const o=await fetch(i,{method:"PATCH",headers:{Accept:"application/json","Content-Type":"application/json",Authorization:`Bearer ${t.token}`},body:JSON.stringify(a)});return o.ok?(s("Layout updated:",e),l(void 0)):j(o)}catch(o){return r("NETWORK_ERROR",`Failed to update layout: ${String(o)}`)}}async function et(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Layout ID is required");const t=`${n.baseUrl}/api/v3.0/layouts/${encodeURIComponent(e)}`;s("Deleting layout:",e);try{const i=await fetch(t,{method:"DELETE",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});return i.ok?(s("Layout deleted:",e),l(void 0)):j(i)}catch(i){return r("NETWORK_ERROR",`Failed to delete layout: ${String(i)}`)}}async function j(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch(i){s("Failed to parse error response JSON:",i),t=e.statusText||"Unknown error"}switch(n){case 400:return r("VALIDATION_ERROR",`Bad request: ${t}`,n);case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}const tt=3e4;function F(e=tt){const n=new AbortController,t=setTimeout(()=>n.abort(),e);return{controller:n,timeoutId:t}}function pe(e){const n=new Uint8Array(e),t=8192,i=[];for(let o=0;o<n.byteLength;o+=t){const c=n.subarray(o,Math.min(o+t,n.byteLength));let u="";for(let R=0;R<c.length;R++)u+=String.fromCharCode(c[R]);i.push(u)}const a=i.join("");return typeof btoa=="function"?btoa(a):Buffer.from(a,"binary").toString("base64")}async function nt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e.deviceId)return r("VALIDATION_ERROR","Device ID is required");if(!e.type)return r("VALIDATION_ERROR","Stream type is required (preview or main)");if(!e.mediaType)return r("VALIDATION_ERROR","Media type is required (video or image)");if(!e.startTimestamp)return r("VALIDATION_ERROR","Start timestamp is required");const t=new URLSearchParams;t.append("deviceId",e.deviceId),t.append("type",e.type),t.append("mediaType",e.mediaType),t.append("startTimestamp__gte",e.startTimestamp),e.endTimestamp&&t.append("endTimestamp__lte",e.endTimestamp),typeof e.coalesce=="boolean"&&t.append("coalesce",String(e.coalesce)),e.include&&e.include.length>0&&t.append("include",e.include.join(",")),e.pageToken&&t.append("pageToken",e.pageToken),typeof e.pageSize=="number"&&t.append("pageSize",String(e.pageSize));const i=`${n.baseUrl}/api/v3.0/media?${t.toString()}`;s("Fetching media intervals:",i);const{controller:a,timeoutId:o}=F();try{const c=await fetch(i,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`},signal:a.signal});if(!c.ok)return H(c);const u=await c.json();return s("Media intervals fetched:",u.results?.length??0,"intervals"),l(u)}catch(c){return c instanceof Error&&c.name==="AbortError"?r("NETWORK_ERROR","Request timed out"):r("NETWORK_ERROR",`Failed to fetch media intervals: ${String(c)}`)}finally{clearTimeout(o)}}async function rt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e.deviceId)return r("VALIDATION_ERROR","Device ID is required");const t=e.type??"preview",i=new URLSearchParams;i.append("deviceId",e.deviceId),i.append("type",t);const a=`${n.baseUrl}/api/v3.0/media/liveImage.jpeg?${i.toString()}`;s("Fetching live image:",a);const{controller:o,timeoutId:c}=F();try{const u=await fetch(a,{method:"GET",headers:{Accept:"image/jpeg",Authorization:`Bearer ${n.token}`},signal:o.signal}),R=u.headers.get("X-Een-Timestamp"),h=u.headers.get("X-Een-PrevToken");if(!u.ok)return H(u);const A=await u.arrayBuffer(),O=`data:image/jpeg;base64,${pe(A)}`;return s("Live image fetched, timestamp:",R),l({imageData:O,timestamp:R,prevToken:h})}catch(u){return u instanceof Error&&u.name==="AbortError"?r("NETWORK_ERROR","Request timed out"):r("NETWORK_ERROR",`Failed to fetch live image: ${String(u)}`)}finally{clearTimeout(c)}}async function it(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e.deviceId&&!e.pageToken)return r("VALIDATION_ERROR","Either deviceId or pageToken is required");if(!e.pageToken&&!(e.timestamp__lt||e.timestamp__lte||e.timestamp||e.timestamp__gte||e.timestamp__gt))return r("VALIDATION_ERROR","At least one timestamp parameter is required");if(e.include?.includes("overlaySvgHeader")&&(!e.overlayId__in||e.overlayId__in.length===0))return r("VALIDATION_ERROR","At least one overlayId must be provided when requesting overlay headers");const t=new URLSearchParams;e.deviceId&&t.append("deviceId",e.deviceId),e.pageToken&&t.append("pageToken",e.pageToken),e.type&&t.append("type",e.type),e.timestamp__lt&&t.append("timestamp__lt",e.timestamp__lt),e.timestamp__lte&&t.append("timestamp__lte",e.timestamp__lte),e.timestamp&&t.append("timestamp",e.timestamp),e.timestamp__gte&&t.append("timestamp__gte",e.timestamp__gte),e.timestamp__gt&&t.append("timestamp__gt",e.timestamp__gt),e.overlayId__in&&e.overlayId__in.length>0&&t.append("overlayId__in",e.overlayId__in.join(",")),e.include&&e.include.length>0&&t.append("include",e.include.join(",")),typeof e.targetWidth=="number"&&t.append("targetWidth",String(e.targetWidth)),typeof e.targetHeight=="number"&&t.append("targetHeight",String(e.targetHeight));const i=`${n.baseUrl}/api/v3.0/media/recordedImage.jpeg?${t.toString()}`;s("Fetching recorded image:",i);const{controller:a,timeoutId:o}=F();try{const c=await fetch(i,{method:"GET",headers:{Accept:"image/jpeg",Authorization:`Bearer ${n.token}`},signal:a.signal}),u=c.headers.get("X-Een-Timestamp"),R=c.headers.get("X-Een-NextToken"),h=c.headers.get("X-Een-PrevToken"),A=c.headers.get("X-Een-OverlaySvg");if(!c.ok)return H(c);const g=await c.arrayBuffer(),m=`data:image/jpeg;base64,${pe(g)}`;return s("Recorded image fetched, timestamp:",u),l({imageData:m,timestamp:u,nextToken:R,prevToken:h,overlaySvg:A})}catch(c){return c instanceof Error&&c.name==="AbortError"?r("NETWORK_ERROR","Request timed out"):r("NETWORK_ERROR",`Failed to fetch recorded image: ${String(c)}`)}finally{clearTimeout(o)}}async function H(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch{t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);case 503:return r("SERVICE_UNAVAILABLE",`Service unavailable: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}async function Ee(){const e=d();if(!e.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!e.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const n=`${e.baseUrl}/api/v3.0/media/session`;s("Fetching media session:",n);const{controller:t,timeoutId:i}=F();try{const a=await fetch(n,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${e.token}`},signal:t.signal});if(!a.ok)return H(a);const o=await a.json();return s("Media session URL received:",o.url),l(o)}catch(a){return a instanceof Error&&a.name==="AbortError"?r("NETWORK_ERROR","Request timed out"):r("NETWORK_ERROR",`Failed to fetch media session: ${String(a)}`)}finally{clearTimeout(i)}}async function ot(){const e=d();if(!e.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");const n=await Ee();if(n.error)return r(n.error.code,`Failed to get media session: ${n.error.message}`,n.error.status);if(!n.data?.url)return r("API_ERROR","No session URL returned from media session endpoint");const t=n.data.url;s("Calling session URL to set cookie:",t);try{const o=new URL(t);if(!B(o.hostname))return r("VALIDATION_ERROR",`Session URL domain not allowed: ${o.hostname}`)}catch{return r("VALIDATION_ERROR","Invalid session URL format")}const{controller:i,timeoutId:a}=F();try{const o=await fetch(t,{method:"GET",credentials:"include",headers:{Accept:"*/*",Authorization:`Bearer ${e.token}`},signal:i.signal});if(!o.ok&&o.status!==204){const c=o.status;let u;try{const R=await o.json();u=R.message??R.error??o.statusText}catch{u=o.statusText||"Unknown error"}return r("API_ERROR",`Failed to set media session cookie: ${u}`,c)}return s("Media session cookie set successfully"),l({success:!0,sessionUrl:t})}catch(o){return o instanceof Error&&o.name==="AbortError"?r("NETWORK_ERROR","Request timed out while setting session cookie"):r("NETWORK_ERROR",`Failed to set media session cookie: ${String(o)}`)}finally{clearTimeout(a)}}async function at(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;typeof e?.pageSize=="number"&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.deviceId&&t.append("deviceId",e.deviceId),e?.deviceId__in&&e.deviceId__in.length>0&&t.append("deviceId__in",e.deviceId__in.join(",")),e?.type&&t.append("type",e.type),e?.include&&e.include.length>0&&t.append("include",e.include.join(","));const i=t.toString(),a=`${n.baseUrl}/api/v3.0/feeds${i?`?${i}`:""}`;s("Fetching feeds:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`},signal:e?.signal});if(!o.ok)return ct(o);const c=await o.json();return s("Feeds fetched:",c.results?.length??0,"feeds"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch feeds: ${String(o)}`)}}async function ct(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error}catch(i){s("Failed to parse error response JSON:",i)}switch(n){case 401:return r("AUTH_REQUIRED",t||"Authentication failed",n);case 403:return r("FORBIDDEN",t||"Access denied",n);case 404:return r("NOT_FOUND",t||"Not found",n);case 429:return r("RATE_LIMITED",t||"Rate limited",n);case 503:return r("SERVICE_UNAVAILABLE",t||"Service unavailable",n);default:return r("API_ERROR",t||e.statusText||"API error",n)}}async function st(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e.actor)return r("VALIDATION_ERROR","actor parameter is required");if(!e.type__in||e.type__in.length===0)return r("VALIDATION_ERROR","type__in parameter is required and must not be empty");if(!e.startTimestamp__gte)return r("VALIDATION_ERROR","startTimestamp__gte parameter is required");const t=new URLSearchParams;t.append("actor",e.actor),t.append("type__in",e.type__in.join(",")),t.append("startTimestamp__gte",T(e.startTimestamp__gte)),e.pageSize&&t.append("pageSize",String(e.pageSize)),e.pageToken&&t.append("pageToken",e.pageToken),e.startTimestamp__lte&&t.append("startTimestamp__lte",T(e.startTimestamp__lte)),e.endTimestamp__gte&&t.append("endTimestamp__gte",T(e.endTimestamp__gte)),e.endTimestamp__lte&&t.append("endTimestamp__lte",T(e.endTimestamp__lte)),e.sort&&t.append("sort",e.sort),e.include&&e.include.length>0&&t.append("include",e.include.join(","));const i=t.toString(),a=`${n.baseUrl}/api/v3.0/events${i?`?${i}`:""}`;s("Fetching events:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return z(o);const c=await o.json();return s("Events fetched:",c.results?.length??0,"events"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch events: ${String(o)}`)}}async function ut(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Event ID is required");const i=new URLSearchParams;n?.include&&n.include.length>0&&i.append("include",n.include.join(","));const a=i.toString(),o=`${t.baseUrl}/api/v3.0/events/${encodeURIComponent(e)}${a?`?${a}`:""}`;s("Fetching event:",o);try{const c=await fetch(o,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t.token}`}});if(!c.ok)return z(c);const u=await c.json();return s("Event fetched:",u.id),l(u)}catch(c){return r("NETWORK_ERROR",`Failed to fetch event: ${String(c)}`)}}async function lt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.language&&t.append("language",e.language);const i=t.toString(),a=`${n.baseUrl}/api/v3.0/eventTypes${i?`?${i}`:""}`;s("Fetching event types:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return z(o);const c=await o.json();return s("Event types fetched:",c.results?.length??0,"types"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch event types: ${String(o)}`)}}async function dt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e.actor)return r("VALIDATION_ERROR","actor parameter is required");const t=new URLSearchParams;t.append("actor",e.actor);const i=t.toString(),a=`${n.baseUrl}/api/v3.0/events:listFieldValues${i?`?${i}`:""}`;s("Fetching event field values:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return z(o);const c=await o.json();return s("Event field values fetched:",c.type?.length??0,"types"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch event field values: ${String(o)}`)}}async function z(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch(i){s("Failed to parse error response JSON:",i),t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}const L={"een.motionDetectionEvent.v1":["een.objectDetection.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.motionInRegionDetectionEvent.v1":["een.motionRegion.v1","een.objectDetection.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.personDetectionEvent.v1":["een.objectDetection.v1","een.personAttributes.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.objectClassification.v1","een.objectRegionMapping.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1","een.geoLocation.v1"],"een.personMotionDetectionEvent.v1":["een.objectDetection.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.objectClassification.v1"],"een.animalDetectionEvent.v1":["een.objectDetection.v1","een.animalAttributes.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.objectClassification.v1","een.objectRegionMapping.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.faceDetectionEvent.v1":["een.objectDetection.v1","een.personAttributes.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.objectClassification.v1","een.objectRegionMapping.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.vehicleDetectionEvent.v1":["een.objectDetection.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.objectClassification.v1","een.vehicleAttributes.v1","een.objectRegionMapping.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.vehicleMotionDetectionEvent.v1":["een.objectDetection.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.objectClassification.v1","een.vehicleAttributes.v1"],"een.gunDetectionEvent.v1":["een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.objectDetection.v1","een.motionRegion.v1","een.objectClassification.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1","een.weaponAttributes.v1","een.personAttributes.v1","een.humanValidationDetails.v1"],"een.weaponDetectionEvent.v1":["een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.objectDetection.v1","een.motionRegion.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.fallDetectionEvent.v1":["een.objectDetection.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.fireDetectionEvent.v1":["een.objectDetection.v1","een.objectClassification.v1","een.croppedFrameImageUrl.v1","een.fullFrameImageUrl.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.spillDetectionEvent.v1":["een.objectDetection.v1","een.objectClassification.v1","een.croppedFrameImageUrl.v1","een.fullFrameImageUrl.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.crowdFormationDetectionEvent.v1":["een.objectDetection.v1","een.objectClassification.v1","een.croppedFrameImageUrl.v1","een.fullFrameImageUrl.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.tamperDetectionEvent.v1":["een.fullFrameImageUrl.v1"],"een.loiterDetectionEvent.v1":["een.loiterArea.v1","een.objectDetection.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.objectLineCrossEvent.v1":["een.lineCrossLine.v1","een.objectDetection.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.entryDirection.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.objectLineCrossCountEvent.v1":["een.lineCrossLine.v1","een.objectDetection.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.entryDirection.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.countedObjectLineCrossEvent.v1":["een.countedLineCross.v1"],"een.objectIntrusionEvent.v1":["een.intrusionArea.v1","een.objectDetection.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.entryDirection.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.objectRemovalEvent.v1":["een.monitoredArea.v1","een.objectDetection.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.personTailgateEvent.v1":["een.objectDetection.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.ppeViolationEvent.v1":["een.objectDetection.v1","een.personAttributes.v1","een.fullFrameImageUrl.v1","een.croppedFrameImageUrl.v1","een.objectClassification.v1","een.objectRegionMapping.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.sceneLabelEvent.v1":["een.objectDetection.v1","een.objectClassification.v1","een.vehicleAttributes.v1","een.personAttributes.v1","een.animalAttributes.v1","een.croppedFrameImageUrl.v1","een.fullFrameImageUrl.v1","een.objectRegionMapping.v1","een.displayOverlay.boundingBox.v1","een.customLabels.v1","een.eevaAttributes.v1","een.fullFrameImageUrlWithOverlay.v1"],"een.eevaQueryEvent.v1":["een.customLabels.v1","een.eevaAttributes.v1","een.objectDetection.v1","een.fullFrameImageUrl.v1","een.fullFrameImageUrlWithOverlay.v1","een.displayOverlay.boundingBox.v1"],"een.lprPlateReadEvent.v1":["een.objectDetection.v1","een.lprDetection.v1","een.vehicleAttributes.v1","een.lprAccessType.v1","een.userData.v1","een.userTags.v1","een.croppedFrameImageUrl.v1","een.fullFrameImageUrl.v1","een.displayOverlay.boundingBox.v1","een.fullFrameImageUrlWithOverlay.v1","een.vehicleListInfo.v1","een.resourceDetails.v1","een.vspInsightsSummary.v1"],"een.fleetCodeRecognitionEvent.v1":["een.objectDetection.v1","een.dotNumberRecognition.v1","een.truckNumberRecognition.v1","een.trailerNumberRecognition.v1","een.croppedFrameImageUrl.v1","een.fullFrameImageUrl.v1","een.recognizedText.v1","een.resourceDetails.v1"],"een.gunShotAudioDetectionEvent.v1":["een.audioDetection.v1","een.geoLocation.v1"],"een.t3AlarmAudioDetectionEvent.v1":["een.audioDetection.v1"],"een.t4AlarmAudioDetectionEvent.v1":["een.audioDetection.v1"],"een.posTransactionEvent.v1":["een.posTransactionStart.v1","een.posTransactionEnd.v1","een.posTransactionItem.v1","een.posTransactionPayment.v1","een.posTransactionCartChangeTrail.v1","een.posTransactionCardLoadSummary.v1","een.posTransactionFlag.v1","een.posTransactionLabel.v1","een.rawData.v1","een.displayLocationSummary.v1","een.fullFrameImageUrl.v1"],"een.deviceCloudStatusUpdateEvent.v1":["een.deviceCloudStatusUpdate.v1","een.deviceCloudPreviousStatus.v1"],"een.deviceCloudConnectionStatusUpdateEvent.v1":["een.deviceCloudConnectionStatusUpdate.v1","een.deviceCloudConnectionPreviousStatus.v1"],"een.edgeReportedDeviceStatusEvent.v1":["een.deviceCommonStatusUpdate.v1","een.deviceErrorStatusUpdate.v1"],"een.deviceIOEvent.v1":["een.deviceIO.v1"],"een.deviceOperationEvent.v1":["een.resourceDetails.v1","een.deviceOperationDetails.v1","een.deviceOperationSubStep.v1","een.deviceOperationUpdate.v1"],"een.ptzPositionUpdateEvent.v1":["een.ptzPositionUpdate.v1"],"een.doorStatusEvent.v1":["een.measurementStringValueUpdate.v1"],"een.batteryLevelUpdateEvent.v1":["een.batteryLevelUpdate.v1"],"een.measurementThresholdStatusEvent.v1":["een.measurementThresholdStatus.v1","een.measurementValueUpdate.v1","een.measurementStringValueUpdate.v1"],"een.thermalCameraThresholdStatusEvent.v1":["een.thermalCameraValueUpdate.v1","een.thermalMonitoredArea.v1"],"een.layoutCreationEvent.v1":["een.resourceDetails.v1"],"een.layoutUpdateEvent.v1":["een.resourceDetails.v1"],"een.layoutDeletionEvent.v1":["een.resourceDetails.v1"],"een.deviceCreationEvent.v1":["een.resourceDetails.v1"],"een.deviceUpdateEvent.v1":["een.resourceDetails.v1"],"een.deviceDeletionEvent.v1":["een.resourceDetails.v1"],"een.userCreationEvent.v1":["een.resourceDetails.v1"],"een.userUpdateEvent.v1":["een.resourceDetails.v1"],"een.userDeletionEvent.v1":["een.resourceDetails.v1"],"een.accountCreationEvent.v1":["een.resourceDetails.v1"],"een.accountUpdateEvent.v1":["een.resourceDetails.v1"],"een.accountDeletionEvent.v1":["een.resourceDetails.v1"],"een.jobCreationEvent.v1":["een.jobDetails.v1","een.ownerDetails.v1"],"een.jobUpdateEvent.v1":["een.jobDetails.v1","een.ownerDetails.v1"],"een.jobDeletionEvent.v1":["een.ownerDetails.v1"],"een.accessActivationEvent.v1":["een.credentialAccessActivation.v1","een.creatorDetails.v1","een.userAccessActivation.v1"],"een.panicButtonEvent.v1":["een.geoLocation.v1"],"een.evacuateProtocolEvent.v1":[],"een.holdProtocolEvent.v1":[],"een.lockdownProtocolEvent.v1":[],"een.secureProtocolEvent.v1":[],"een.shelterProtocolEvent.v1":[],"een.violenceDetectionEvent.v1":[],"een.fightDetectionEvent.v1":[],"een.handsUpDetectionEvent.v1":[],"een.vapeDetectionEvent.v1":[]};function ie(e){return L[e]??[]}function ft(e){const n=new Set;for(const t of e){const i=ie(t);for(const a of i)n.add(`data.${a}`)}return Array.from(n)}function gt(e){return ie(e).length>0}function Rt(e){const n=[];for(const[t,i]of Object.entries(L))i.includes(e)&&n.push(t);return n}function ht(){const e=new Set;for(const n of Object.values(L))for(const t of n)e.add(t);return Array.from(e)}function _t(){return Object.keys(L)}async function pt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e.actor)return r("VALIDATION_ERROR","actor parameter is required");if(!e.eventType)return r("VALIDATION_ERROR","eventType parameter is required");const t=new URLSearchParams;t.append("actor",e.actor),t.append("eventType",e.eventType),e.timestamp__gte&&t.append("timestamp__gte",T(e.timestamp__gte)),e.timestamp__lte&&t.append("timestamp__lte",T(e.timestamp__lte)),e.aggregateByMinutes!==void 0&&t.append("aggregateByMinutes",String(e.aggregateByMinutes));const i=t.toString(),a=`${n.baseUrl}/api/v3.0/eventMetrics${i?`?${i}`:""}`;s("Fetching event metrics:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return Et(o);const c=await o.json();return s("Event metrics fetched:",c.length,"metrics"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch event metrics: ${String(o)}`)}}async function Et(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch(i){s("Failed to parse error response JSON:",i),t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}async function vt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.timestamp__lte&&t.append("timestamp__lte",T(e.timestamp__lte)),e?.timestamp__gte&&t.append("timestamp__gte",T(e.timestamp__gte)),e?.creatorId&&t.append("creatorId",e.creatorId),e?.alertType__in&&e.alertType__in.length>0&&t.append("alertType__in",e.alertType__in.join(",")),e?.actorId__in&&e.actorId__in.length>0&&t.append("actorId__in",e.actorId__in.join(",")),e?.actorType__in&&e.actorType__in.length>0&&t.append("actorType__in",e.actorType__in.join(",")),e?.actorAccountId&&t.append("actorAccountId",e.actorAccountId),e?.ruleId&&t.append("ruleId",e.ruleId),e?.ruleId__in&&e.ruleId__in.length>0&&t.append("ruleId__in",e.ruleId__in.join(",")),e?.eventId&&t.append("eventId",e.eventId),e?.locationId__in&&e.locationId__in.length>0&&t.append("locationId__in",e.locationId__in.join(",")),e?.priority__gte!==void 0&&t.append("priority__gte",String(e.priority__gte)),e?.priority__lte!==void 0&&t.append("priority__lte",String(e.priority__lte)),e?.showInvalidAlerts!==void 0&&t.append("showInvalidAlerts",String(e.showInvalidAlerts)),e?.alertActionId__in&&e.alertActionId__in.length>0&&t.append("alertActionId__in",e.alertActionId__in.join(",")),e?.alertActionStatus__in&&e.alertActionStatus__in.length>0&&t.append("alertActionStatus__in",e.alertActionStatus__in.join(",")),e?.include&&e.include.length>0&&t.append("include",e.include.join(",")),e?.sort&&e.sort.length>0&&t.append("sort",e.sort.join(",")),e?.language&&t.append("language",e.language);const i=t.toString(),a=`${n.baseUrl}/api/v3.0/alerts${i?`?${i}`:""}`;s("Fetching alerts:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return oe(o);const c=await o.json();return s("Alerts fetched:",c.results?.length??0,"alerts"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch alerts: ${String(o)}`)}}async function At(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Alert ID is required");const i=new URLSearchParams;n?.include&&n.include.length>0&&i.append("include",n.include.join(","));const a=i.toString(),o=`${t.baseUrl}/api/v3.0/alerts/${encodeURIComponent(e)}${a?`?${a}`:""}`;s("Fetching alert:",o);try{const c=await fetch(o,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t.token}`}});if(!c.ok)return oe(c);const u=await c.json();return s("Alert fetched:",u.id),l(u)}catch(c){return r("NETWORK_ERROR",`Failed to fetch alert: ${String(c)}`)}}async function Tt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken);const i=t.toString(),a=`${n.baseUrl}/api/v3.0/alertTypes${i?`?${i}`:""}`;s("Fetching alert types:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return oe(o);const c=await o.json();return s("Alert types fetched:",c.results?.length??0,"types"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch alert types: ${String(o)}`)}}async function oe(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch(i){s("Failed to parse error response JSON:",i),t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}async function It(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.timestamp__lte&&t.append("timestamp__lte",T(e.timestamp__lte)),e?.timestamp__gte&&t.append("timestamp__gte",T(e.timestamp__gte)),e?.alertId&&t.append("alertId",e.alertId),e?.alertType&&t.append("alertType",e.alertType),e?.actorId&&t.append("actorId",e.actorId),e?.actorType&&t.append("actorType",e.actorType),e?.actorAccountId&&t.append("actorAccountId",e.actorAccountId),e?.category&&t.append("category",e.category),e?.userId&&t.append("userId",e.userId),e?.read!==void 0&&t.append("read",String(e.read)),e?.status&&t.append("status",e.status),e?.includeV1Notifications!==void 0&&t.append("includeV1Notifications",String(e.includeV1Notifications)),e?.sort&&e.sort.length>0&&t.append("sort",e.sort.join(",")),e?.language&&t.append("language",e.language);const i=t.toString(),a=`${n.baseUrl}/api/v3.0/notifications${i?`?${i}`:""}`;s("Fetching notifications:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return ve(o);const c=await o.json();return s("Notifications fetched:",c.results?.length??0,"notifications"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch notifications: ${String(o)}`)}}async function Ut(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Notification ID is required");const t=`${n.baseUrl}/api/v3.0/notifications/${encodeURIComponent(e)}`;s("Fetching notification:",t);try{const i=await fetch(t,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!i.ok)return ve(i);const a=await i.json();return s("Notification fetched:",a.id),l(a)}catch(i){return r("NETWORK_ERROR",`Failed to fetch notification: ${String(i)}`)}}async function ve(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch(i){s("Failed to parse error response JSON:",i),t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}async function yt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken);const i=t.toString(),a=`${n.baseUrl}/api/v3.0/eventSubscriptions${i?`?${i}`:""}`;s("Fetching event subscriptions:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return Q(o);const c=await o.json();return s("Event subscriptions fetched:",c.results?.length??0,"subscriptions"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch event subscriptions: ${String(o)}`)}}async function St(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Subscription ID is required");const t=`${n.baseUrl}/api/v3.0/eventSubscriptions/${encodeURIComponent(e)}`;s("Fetching event subscription:",t);try{const i=await fetch(t,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!i.ok)return Q(i);const a=await i.json();return s("Event subscription fetched:",a.id),l(a)}catch(i){return r("NETWORK_ERROR",`Failed to fetch event subscription: ${String(i)}`)}}async function Dt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e.deliveryConfig)return r("VALIDATION_ERROR","deliveryConfig is required");if(!e.filters||e.filters.length===0)return r("VALIDATION_ERROR","At least one filter is required");for(const i of e.filters){if(!i.actors||i.actors.length===0)return r("VALIDATION_ERROR","Each filter must have at least one actor");if(!i.types||i.types.length===0)return r("VALIDATION_ERROR","Each filter must have at least one event type")}const t=`${n.baseUrl}/api/v3.0/eventSubscriptions`;s("Creating event subscription:",t);try{const i=await fetch(t,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",Authorization:`Bearer ${n.token}`},body:JSON.stringify(e)});if(!i.ok)return Q(i);const a=await i.json();return s("Event subscription created:",a.id),l(a)}catch(i){return r("NETWORK_ERROR",`Failed to create event subscription: ${String(i)}`)}}async function Ot(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Subscription ID is required");const t=`${n.baseUrl}/api/v3.0/eventSubscriptions/${encodeURIComponent(e)}`;s("Deleting event subscription:",t);try{const i=await fetch(t,{method:"DELETE",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});return i.ok?(s("Event subscription deleted:",e),l(void 0)):Q(i)}catch(i){return r("NETWORK_ERROR",`Failed to delete event subscription: ${String(i)}`)}}function mt(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.token)return r("AUTH_REQUIRED","Access token not available");if(!e)return r("VALIDATION_ERROR","SSE URL is required");try{const g=new URL(e);if(!B(g.hostname))return r("VALIDATION_ERROR",`SSE URL domain not allowed: ${g.hostname}`)}catch{return r("VALIDATION_ERROR","Invalid SSE URL format")}const i=1024*1024;let a="connecting",o=new AbortController,c=!1;const u=g=>{a=g,n.onStatusChange?.(a)},R=()=>{c||(c=!0,s("Closing SSE connection"),o?.abort(),o=null,u("disconnected"))};return(async()=>{if(!(c||!o)){u("connecting"),s("Connecting to SSE:",e);try{const g=await fetch(e,{method:"GET",headers:{Accept:"text/event-stream",Authorization:`Bearer ${t.token}`},signal:o.signal});if(!g.ok)throw new Error(`HTTP ${g.status}: ${g.statusText}`);if(!g.body)throw new Error("Response body is not available");u("connected"),s("SSE connected");const O=g.body.getReader(),m=new TextDecoder;let U="";for(;!c;){const{done:W,value:V}=await O.read();if(W){s("SSE stream ended");break}if(U+=m.decode(V,{stream:!0}),U.length>i){s("SSE buffer exceeded maximum size, resetting"),U="";continue}const q=U.split(`
2
- `);U=q.pop()||"";let S="";for(const $ of q)if($.startsWith("data:")){const I=$.substring(5).trimStart();S=S?`${S}
3
- ${I}`:I}else if($===""&&S){try{const I=JSON.parse(S);s("SSE event received:",I.type,I.actorId),n.onEvent(I)}catch(I){s("Failed to parse SSE event:",I)}S=""}}}catch(g){if(c||g instanceof Error&&g.name==="AbortError")return;s("SSE error:",g),u("error"),n.onError?.(g instanceof Error?g:new Error(String(g)))}}})(),l({close:R,get status(){return a}})}async function Q(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch(i){s("Failed to parse error response JSON:",i),t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",t,n);case 403:return r("FORBIDDEN",t,n);case 404:return r("NOT_FOUND",t,n);case 429:return r("RATE_LIMITED",t,n);default:return r("API_ERROR",t,n)}}async function bt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.enabled!==void 0&&t.append("enabled",String(e.enabled)),e?.id__in&&e.id__in.length>0&&t.append("id__in",e.id__in.join(",")),e?.outputAlertType__in&&e.outputAlertType__in.length>0&&t.append("outputAlertType__in",e.outputAlertType__in.join(",")),e?.priority__gte!==void 0&&t.append("priority__gte",String(e.priority__gte)),e?.priority__lte!==void 0&&t.append("priority__lte",String(e.priority__lte));const i=t.toString(),a=`${n.baseUrl}/api/v3.0/eventAlertConditionRules${i?`?${i}`:""}`;s("Fetching event alert condition rules:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return y(o);const c=await o.json();return s("Event alert condition rules fetched:",c.results?.length??0,"rules"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch event alert condition rules: ${String(o)}`)}}async function $t(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.enabled!==void 0&&t.append("enabled",String(e.enabled));const i=t.toString(),a=`${n.baseUrl}/api/v3.0/eventAlertConditionRules:listFieldValues${i?`?${i}`:""}`;s("Fetching event alert condition rule field values:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return y(o);const c=await o.json();return s("Event alert condition rule field values fetched"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch field values: ${String(o)}`)}}async function kt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Rule ID is required");const t=`${n.baseUrl}/api/v3.0/eventAlertConditionRules/${encodeURIComponent(e)}`;s("Fetching event alert condition rule:",t);try{const i=await fetch(t,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!i.ok)return y(i);const a=await i.json();return s("Event alert condition rule fetched:",a.id),l(a)}catch(i){return r("NETWORK_ERROR",`Failed to fetch event alert condition rule: ${String(i)}`)}}async function wt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.enabled!==void 0&&t.append("enabled",String(e.enabled)),e?.id__in&&e.id__in.length>0&&t.append("id__in",e.id__in.join(",")),e?.actorId__in&&e.actorId__in.length>0&&t.append("actorId__in",e.actorId__in.join(",")),e?.inputEventType__in&&e.inputEventType__in.length>0&&t.append("inputEventType__in",e.inputEventType__in.join(",")),e?.outputAlertType&&t.append("outputAlertType",e.outputAlertType),e?.type&&t.append("type",e.type),e?.include&&e.include.length>0&&t.append("include",e.include.join(","));const i=t.toString(),a=`${n.baseUrl}/api/v3.0/alertConditionRules${i?`?${i}`:""}`;s("Fetching alert condition rules:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return y(o);const c=await o.json();return s("Alert condition rules fetched:",c.results?.length??0,"rules"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch alert condition rules: ${String(o)}`)}}async function jt(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Rule ID is required");const i=new URLSearchParams;n?.include&&n.include.length>0&&i.append("include",n.include.join(","));const a=i.toString(),o=`${t.baseUrl}/api/v3.0/alertConditionRules/${encodeURIComponent(e)}${a?`?${a}`:""}`;s("Fetching alert condition rule:",o);try{const c=await fetch(o,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t.token}`}});if(!c.ok)return y(c);const u=await c.json();return s("Alert condition rule fetched:",u.id),l(u)}catch(c){return r("NETWORK_ERROR",`Failed to fetch alert condition rule: ${String(c)}`)}}async function Ft(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.enabled!==void 0&&t.append("enabled",String(e.enabled)),e?.id__in&&e.id__in.length>0&&t.append("id__in",e.id__in.join(",")),e?.alertType__in&&e.alertType__in.length>0&&t.append("alertType__in",e.alertType__in.join(",")),e?.actorId__in&&e.actorId__in.length>0&&t.append("actorId__in",e.actorId__in.join(",")),e?.alertActionId__in&&e.alertActionId__in.length>0&&t.append("alertActionId__in",e.alertActionId__in.join(",")),e?.ruleId__in&&e.ruleId__in.length>0&&t.append("ruleId__in",e.ruleId__in.join(","));const i=t.toString(),a=`${n.baseUrl}/api/v3.0/alertActionRules${i?`?${i}`:""}`;s("Fetching alert action rules:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return y(o);const c=await o.json();return s("Alert action rules fetched:",c.results?.length??0,"rules"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch alert action rules: ${String(o)}`)}}async function Lt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Rule ID is required");const t=`${n.baseUrl}/api/v3.0/alertActionRules/${encodeURIComponent(e)}`;s("Fetching alert action rule:",t);try{const i=await fetch(t,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!i.ok)return y(i);const a=await i.json();return s("Alert action rule fetched:",a.id),l(a)}catch(i){return r("NETWORK_ERROR",`Failed to fetch alert action rule: ${String(i)}`)}}async function Nt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.enabled!==void 0&&t.append("enabled",String(e.enabled)),e?.id__in&&e.id__in.length>0&&t.append("id__in",e.id__in.join(",")),e?.type__in&&e.type__in.length>0&&t.append("type__in",e.type__in.join(","));const i=t.toString(),a=`${n.baseUrl}/api/v3.0/alertActions${i?`?${i}`:""}`;s("Fetching alert actions:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return y(o);const c=await o.json();return s("Alert actions fetched:",c.results?.length??0,"actions"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch alert actions: ${String(o)}`)}}async function qt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Action ID is required");const t=`${n.baseUrl}/api/v3.0/alertActions/${encodeURIComponent(e)}`;s("Fetching alert action:",t);try{const i=await fetch(t,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!i.ok)return y(i);const a=await i.json();return s("Alert action fetched:",a.id),l(a)}catch(i){return r("NETWORK_ERROR",`Failed to fetch alert action: ${String(i)}`)}}async function y(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch(i){s("Failed to parse error response JSON:",i),t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}async function Pt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e.cameraId)return r("VALIDATION_ERROR","Camera ID is required");if(!e.type)return r("VALIDATION_ERROR","Export type is required");if(!e.startTimestamp)return r("VALIDATION_ERROR","Start timestamp is required");if(!e.endTimestamp)return r("VALIDATION_ERROR","End timestamp is required");const t=`${n.baseUrl}/api/v3.0/exports`;if(s("Creating export job:",t),(e.type==="timeLapse"||e.type==="bundle")&&!e.playbackMultiplier)return r("VALIDATION_ERROR","Playback multiplier is required for timeLapse and bundle exports");if(e.playbackMultiplier!==void 0&&(e.playbackMultiplier<1||e.playbackMultiplier>48))return r("VALIDATION_ERROR","Playback multiplier must be between 1 and 48");const i={name:e.name||`Export-${Date.now()}`,directory:e.directory||"/"};e.notes&&(i.notes=e.notes),e.tags&&e.tags.length>0&&(i.tags=e.tags);const a={startTimestamp:e.startTimestamp,endTimestamp:e.endTimestamp},o={deviceId:e.cameraId,type:e.type,info:i,period:a};e.playbackMultiplier!==void 0&&(o.playbackMultiplier=e.playbackMultiplier),e.autoDelete!==void 0&&(o.autoDelete=e.autoDelete);try{const c=await fetch(t,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",Authorization:`Bearer ${n.token}`},body:JSON.stringify(o)});if(!c.ok)return Bt(c);const u=await c.json();return s("Export job created:",u.id),l(u)}catch(c){return r("NETWORK_ERROR",`Failed to create export job: ${String(c)}`)}}async function Bt(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch{t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}async function Ct(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.state__in&&e.state__in.length>0&&t.append("state__in",e.state__in.join(",")),e?.type&&t.append("type",e.type),e?.type__in&&e.type__in.length>0&&t.append("type__in",e.type__in.join(",")),e?.createTimestamp__gte&&t.append("createTimestamp__gte",e.createTimestamp__gte),e?.createTimestamp__lte&&t.append("createTimestamp__lte",e.createTimestamp__lte),e?.userId&&t.append("userId",e.userId),e?.sort&&e.sort.length>0&&t.append("sort",e.sort.join(","));const i=t.toString(),a=`${n.baseUrl}/api/v3.0/jobs${i?`?${i}`:""}`;s("Fetching jobs:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return ae(o);const c=await o.json();return s("Jobs fetched:",c.results?.length??0,"jobs"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch jobs: ${String(o)}`)}}async function Ht(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Job ID is required");const i=new URLSearchParams;n?.include&&n.include.length>0&&i.append("include",n.include.join(","));const a=i.toString(),o=`${t.baseUrl}/api/v3.0/jobs/${encodeURIComponent(e)}${a?`?${a}`:""}`;s("Fetching job:",o);try{const c=await fetch(o,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t.token}`}});if(!c.ok)return ae(c);const u=await c.json();return s("Job fetched:",u.arguments?.originalRequest?.name||u.id,"state:",u.state),l(u)}catch(c){return r("NETWORK_ERROR",`Failed to fetch job: ${String(c)}`)}}async function zt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Job ID is required");const t=`${n.baseUrl}/api/v3.0/jobs/${encodeURIComponent(e)}`;s("Deleting job:",t);try{const i=await fetch(t,{method:"DELETE",headers:{Authorization:`Bearer ${n.token}`}});return i.ok?(s("Job deleted:",e),l(void 0)):ae(i)}catch(i){return r("NETWORK_ERROR",`Failed to delete job: ${String(i)}`)}}async function ae(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch{t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}async function Qt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.include&&e.include.length>0&&t.append("include",e.include.join(",")),e?.type__in&&e.type__in.length>0&&t.append("type__in",e.type__in.join(",")),e?.cameraId&&t.append("cameraId",e.cameraId),e?.cameraId__in&&e.cameraId__in.length>0&&t.append("cameraId__in",e.cameraId__in.join(",")),e?.jobId&&t.append("jobId",e.jobId),e?.createTimestamp__gte&&t.append("createTimestamp__gte",e.createTimestamp__gte),e?.createTimestamp__lte&&t.append("createTimestamp__lte",e.createTimestamp__lte),e?.tags__contains&&e.tags__contains.length>0&&t.append("tags__contains",e.tags__contains.join(",")),e?.q&&t.append("q",e.q),e?.sort&&e.sort.length>0&&t.append("sort",e.sort.join(","));const i=t.toString(),a=`${n.baseUrl}/api/v3.0/files${i?`?${i}`:""}`;s("Fetching files:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return N(o);const c=await o.json();return s("Files fetched:",c.results?.length??0,"files"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch files: ${String(o)}`)}}async function xt(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","File ID is required");const i=new URLSearchParams;n?.include&&n.include.length>0&&i.append("include",n.include.join(","));const a=i.toString(),o=`${t.baseUrl}/api/v3.0/files/${encodeURIComponent(e)}${a?`?${a}`:""}`;s("Fetching file:",o);try{const c=await fetch(o,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t.token}`}});if(!c.ok)return N(c);const u=await c.json();return s("File fetched:",u.name),l(u)}catch(c){return r("NETWORK_ERROR",`Failed to fetch file: ${String(c)}`)}}async function Wt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e.name)return r("VALIDATION_ERROR","File name is required");const t=`${n.baseUrl}/api/v3.0/files`;s("Creating file:",t);const i={name:e.name};e.type&&(i.type=e.type),e.filename&&(i.filename=e.filename),e.description&&(i.description=e.description),e.tags&&e.tags.length>0&&(i.tags=e.tags),e.cameraId&&(i.cameraId=e.cameraId);try{const a=await fetch(t,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",Authorization:`Bearer ${n.token}`},body:JSON.stringify(i)});if(!a.ok)return N(a);const o=await a.json();return s("File created:",o.id),l(o)}catch(a){return r("NETWORK_ERROR",`Failed to create file: ${String(a)}`)}}async function Vt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","File ID is required");const t=`${n.baseUrl}/api/v3.0/files/${encodeURIComponent(e)}:download`;s("Downloading file:",t);try{const i=await fetch(t,{method:"GET",headers:{Authorization:`Bearer ${n.token}`}});if(!i.ok)return N(i);const a=await i.blob(),o=i.headers.get("Content-Disposition");let c="download";if(o){const h=o.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);h&&h[1]&&(c=h[1].replace(/['"]/g,""))}const u=i.headers.get("Content-Type")||"application/octet-stream",R={blob:a,filename:c,contentType:u,size:a.size};return s("File downloaded:",c,a.size,"bytes"),l(R)}catch(i){return r("NETWORK_ERROR",`Failed to download file: ${String(i)}`)}}async function Mt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","File ID is required");const t=`${n.baseUrl}/api/v3.0/files/${encodeURIComponent(e)}`;s("Deleting file:",t);try{const i=await fetch(t,{method:"DELETE",headers:{Authorization:`Bearer ${n.token}`}});return i.ok?(s("File deleted (recycled):",e),l(void 0)):N(i)}catch(i){return r("NETWORK_ERROR",`Failed to delete file: ${String(i)}`)}}async function N(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch{t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}async function Kt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");const t=new URLSearchParams;e?.pageSize&&t.append("pageSize",String(e.pageSize)),e?.pageToken&&t.append("pageToken",e.pageToken),e?.status__in&&e.status__in.length>0&&t.append("status__in",e.status__in.join(",")),e?.cameraId&&t.append("cameraId",e.cameraId),e?.cameraId__in&&e.cameraId__in.length>0&&t.append("cameraId__in",e.cameraId__in.join(",")),e?.jobId&&t.append("jobId",e.jobId),e?.fileId&&t.append("fileId",e.fileId),e?.createTimestamp__gte&&t.append("createTimestamp__gte",e.createTimestamp__gte),e?.createTimestamp__lte&&t.append("createTimestamp__lte",e.createTimestamp__lte),e?.q&&t.append("q",e.q),e?.sort&&e.sort.length>0&&t.append("sort",e.sort.join(","));const i=t.toString(),a=`${n.baseUrl}/api/v3.0/downloads${i?`?${i}`:""}`;s("Fetching downloads:",a);try{const o=await fetch(a,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!o.ok)return ce(o);const c=await o.json();return s("Downloads fetched:",c.results?.length??0,"downloads"),l(c)}catch(o){return r("NETWORK_ERROR",`Failed to fetch downloads: ${String(o)}`)}}async function Gt(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Download ID is required");const i=new URLSearchParams;n?.include&&n.include.length>0&&i.append("include",n.include.join(","));const a=i.toString(),o=`${t.baseUrl}/api/v3.0/downloads/${encodeURIComponent(e)}${a?`?${a}`:""}`;s("Fetching download:",o);try{const c=await fetch(o,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t.token}`}});if(!c.ok)return ce(c);const u=await c.json();return s("Download fetched:",u.name,"status:",u.status),l(u)}catch(c){return r("NETWORK_ERROR",`Failed to fetch download: ${String(c)}`)}}async function Jt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Download ID is required");const t=`${n.baseUrl}/api/v3.0/downloads/${encodeURIComponent(e)}:download`;s("Downloading:",t);try{const i=await fetch(t,{method:"GET",headers:{Authorization:`Bearer ${n.token}`}});if(!i.ok)return ce(i);const a=await i.blob(),o=i.headers.get("Content-Disposition");let c="download";if(o){const h=o.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);h&&h[1]&&(c=h[1].replace(/['"]/g,""))}const u=i.headers.get("Content-Type")||"application/octet-stream",R={blob:a,filename:c,contentType:u,size:a.size};return s("Downloaded:",c,a.size,"bytes"),l(R)}catch(i){return r("NETWORK_ERROR",`Failed to download: ${String(i)}`)}}async function ce(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch{t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}async function Zt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Camera ID is required");const t=`${n.baseUrl}/api/v3.0/cameras/${encodeURIComponent(e)}/ptz/position`;s("Fetching PTZ position:",t);try{const i=await fetch(t,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!i.ok)return x(i);const a=await i.json();return s("PTZ position fetched for:",e),l(a)}catch(i){return r("NETWORK_ERROR",`Failed to fetch PTZ position: ${String(i)}`)}}async function Xt(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Camera ID is required");const i=`${t.baseUrl}/api/v3.0/cameras/${encodeURIComponent(e)}/ptz/position`;s("Moving PTZ camera:",i,"move:",n);try{const a=await fetch(i,{method:"PUT",headers:{Accept:"application/json","Content-Type":"application/json",Authorization:`Bearer ${t.token}`},body:JSON.stringify(n)});return a.ok?(s("PTZ move sent for:",e),l(void 0)):x(a)}catch(a){return r("NETWORK_ERROR",`Failed to move PTZ camera: ${String(a)}`)}}async function Yt(e){const n=d();if(!n.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!n.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Camera ID is required");const t=`${n.baseUrl}/api/v3.0/cameras/${encodeURIComponent(e)}/ptz/settings`;s("Fetching PTZ settings:",t);try{const i=await fetch(t,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${n.token}`}});if(!i.ok)return x(i);const a=await i.json();return s("PTZ settings fetched for:",e),l(a)}catch(i){return r("NETWORK_ERROR",`Failed to fetch PTZ settings: ${String(i)}`)}}async function en(e,n){const t=d();if(!t.isAuthenticated)return r("AUTH_REQUIRED","Authentication required");if(!t.baseUrl)return r("AUTH_REQUIRED","Base URL not configured");if(!e)return r("VALIDATION_ERROR","Camera ID is required");const i=`${t.baseUrl}/api/v3.0/cameras/${encodeURIComponent(e)}/ptz/settings`;s("Updating PTZ settings:",i);try{const a=await fetch(i,{method:"PATCH",headers:{Accept:"application/json","Content-Type":"application/json",Authorization:`Bearer ${t.token}`},body:JSON.stringify(n)});return a.ok?(s("PTZ settings updated for:",e),l(void 0)):x(a)}catch(a){return r("NETWORK_ERROR",`Failed to update PTZ settings: ${String(a)}`)}}async function x(e){const n=e.status;let t;try{const i=await e.json();t=i.message??i.error??e.statusText}catch(i){s("Failed to parse error response JSON:",i),t=e.statusText||"Unknown error"}switch(n){case 401:return r("AUTH_REQUIRED",`Authentication failed: ${t}`,n);case 403:return r("FORBIDDEN",`Access denied: ${t}`,n);case 404:return r("NOT_FOUND",`Not found: ${t}`,n);case 429:return r("RATE_LIMITED",`Rate limited: ${t}`,n);default:return r("API_ERROR",`API error: ${t}`,n)}}exports.EVENT_TYPE_DATA_SCHEMAS=L;exports.STORAGE_STRATEGY_DESCRIPTIONS=be;exports.addFile=Wt;exports.connectToEventSubscription=mt;exports.createEventSubscription=Dt;exports.createExportJob=Pt;exports.createLayout=Xe;exports.deleteEventSubscription=Ot;exports.deleteFile=Mt;exports.deleteJob=zt;exports.deleteLayout=et;exports.downloadDownload=Jt;exports.downloadFile=Vt;exports.eventTypeHasDataSchemas=gt;exports.failure=r;exports.formatTimestamp=T;exports.getAccessToken=te;exports.getAlert=At;exports.getAlertAction=qt;exports.getAlertActionRule=Lt;exports.getAlertConditionRule=jt;exports.getAllDataSchemas=ht;exports.getAllKnownEventTypes=_t;exports.getAuthUrl=fe;exports.getBridge=Ge;exports.getBridges=Ke;exports.getCamera=Ve;exports.getCameraSettings=Me;exports.getCameraStatusString=Le;exports.getCameras=We;exports.getClientId=de;exports.getConfig=Fe;exports.getCurrentUser=ze;exports.getDataSchemasForEventType=ie;exports.getDownload=Gt;exports.getEvent=ut;exports.getEventAlertConditionRule=kt;exports.getEventAlertConditionRuleFieldValues=$t;exports.getEventMetrics=pt;exports.getEventSubscription=St;exports.getEventTypesForDataSchema=Rt;exports.getFile=xt;exports.getIncludeParameterForEventTypes=ft;exports.getJob=Ht;exports.getLayout=Ze;exports.getLayouts=Je;exports.getLiveImage=rt;exports.getMediaSession=Ee;exports.getNotification=Ut;exports.getProxyUrl=C;exports.getPtzPosition=Zt;exports.getPtzSettings=Yt;exports.getRecordedImage=it;exports.getRedirectUri=ee;exports.getStorageStrategy=we;exports.getUser=xe;exports.getUsers=Qe;exports.handleAuthCallback=he;exports.initEenToolkit=je;exports.initMediaSession=ot;exports.isStatusObject=Ne;exports.listAlertActionRules=Ft;exports.listAlertActions=Nt;exports.listAlertConditionRules=wt;exports.listAlertTypes=Tt;exports.listAlerts=vt;exports.listDownloads=Kt;exports.listEventAlertConditionRules=bt;exports.listEventFieldValues=dt;exports.listEventSubscriptions=yt;exports.listEventTypes=lt;exports.listEvents=st;exports.listFeeds=at;exports.listFiles=Qt;exports.listJobs=Ct;exports.listMedia=nt;exports.listNotifications=It;exports.movePtz=Xt;exports.refreshToken=ge;exports.revokeToken=Re;exports.success=l;exports.updateLayout=Ye;exports.updatePtzSettings=en;exports.useAuthStore=d;
4
- //# sourceMappingURL=index.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./service-C15aBZxB.cjs`);function t(e){if(e)return typeof e==`string`?e:e.connectionStatus}function n(e){return typeof e==`object`&&!!e}function r(e){return e.endsWith(`+00:00`)?e:e.endsWith(`Z`)?e.replace(`Z`,`+00:00`):e}async function i(){let t=e.s();if(!t.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!t.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let n=`${t.baseUrl}/api/v3.0/users/self`;e.v(`Fetching current user:`,n);try{let r=await fetch(n,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${t.token}`}});if(!r.ok)return s(r);let i=await r.json();return e.v(`Current user fetched:`,i.email),t.setUserProfile(i),e.u(i)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch current user: ${String(t)}`)}}async function a(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken),t?.include&&t.include.length>0&&r.append(`include`,t.include.join(`,`));let i=r.toString(),a=`${n.baseUrl}/api/v3.0/users${i?`?${i}`:``}`;e.v(`Fetching users:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return s(t);let r=await t.json();return e.v(`Users fetched:`,r.results?.length??0,`users`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch users: ${String(t)}`)}}async function o(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`User ID is required`);let i=new URLSearchParams;n?.include&&n.include.length>0&&i.append(`include`,n.include.join(`,`));let a=i.toString(),o=`${r.baseUrl}/api/v3.0/users/${encodeURIComponent(t)}${a?`?${a}`:``}`;e.v(`Fetching user:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${r.token}`}});if(!t.ok)return s(t);let n=await t.json();return e.v(`User fetched:`,n.email),e.u(n)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch user: ${String(t)}`)}}async function s(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch{r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}async function c(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken),t?.include&&t.include.length>0&&r.append(`include`,t.include.join(`,`)),t?.sort&&t.sort.length>0&&r.append(`sort`,t.sort.join(`,`)),t?.locationId__in&&t.locationId__in.length>0&&r.append(`locationId__in`,t.locationId__in.join(`,`)),t?.bridgeId__in&&t.bridgeId__in.length>0&&r.append(`bridgeId__in`,t.bridgeId__in.join(`,`)),t?.multiCameraId&&r.append(`multiCameraId`,t.multiCameraId),t?.multiCameraId__ne&&r.append(`multiCameraId__ne`,t.multiCameraId__ne),t?.multiCameraId__in&&t.multiCameraId__in.length>0&&r.append(`multiCameraId__in`,t.multiCameraId__in.join(`,`)),t?.tags__contains&&t.tags__contains.length>0&&r.append(`tags__contains`,t.tags__contains.join(`,`)),t?.tags__any&&t.tags__any.length>0&&r.append(`tags__any`,t.tags__any.join(`,`)),t?.packages__contains&&t.packages__contains.length>0&&r.append(`packages__contains`,t.packages__contains.join(`,`)),t?.name&&r.append(`name`,t.name),t?.name__contains&&r.append(`name__contains`,t.name__contains),t?.name__in&&t.name__in.length>0&&r.append(`name__in`,t.name__in.join(`,`)),t?.id__in&&t.id__in.length>0&&r.append(`id__in`,t.id__in.join(`,`)),t?.id__notIn&&t.id__notIn.length>0&&r.append(`id__notIn`,t.id__notIn.join(`,`)),t?.id__contains&&r.append(`id__contains`,t.id__contains),t?.layoutId&&r.append(`layoutId`,t.layoutId),typeof t?.shared==`boolean`&&r.append(`shareDetails.shared`,String(t.shared)),t?.sharedCameraAccount&&r.append(`shareDetails.accountId`,t.sharedCameraAccount),typeof t?.firstResponder==`boolean`&&r.append(`shareDetails.firstResponder`,String(t.firstResponder)),typeof t?.directToCloud==`boolean`&&r.append(`deviceInfo.directToCloud`,String(t.directToCloud)),t?.speakerId__in&&t.speakerId__in.length>0&&r.append(`speakerId__in`,t.speakerId__in.join(`,`)),t?.q&&r.append(`q`,t.q),typeof t?.qRelevance__gte==`number`&&r.append(`qRelevance__gte`,String(t.qRelevance__gte)),t?.enabledAnalytics__contains&&t.enabledAnalytics__contains.length>0&&r.append(`enabledAnalytics__contains`,t.enabledAnalytics__contains.join(`,`)),t?.status__in&&t.status__in.length>0&&r.append(`status__in`,t.status__in.join(`,`)),t?.status__ne&&r.append(`status__ne`,t.status__ne);let i=r.toString(),a=`${n.baseUrl}/api/v3.0/cameras${i?`?${i}`:``}`;e.v(`Fetching cameras:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return d(t);let r=await t.json();return e.v(`Cameras fetched:`,r.results?.length??0,`cameras`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch cameras: ${String(t)}`)}}async function l(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Camera ID is required`);let i=new URLSearchParams;n?.include&&n.include.length>0&&i.append(`include`,n.include.join(`,`));let a=i.toString(),o=`${r.baseUrl}/api/v3.0/cameras/${encodeURIComponent(t)}${a?`?${a}`:``}`;e.v(`Fetching camera:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${r.token}`}});if(!t.ok)return d(t);let n=await t.json();return e.v(`Camera fetched:`,n.name),e.u(n)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch camera: ${String(t)}`)}}async function u(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Camera ID is required`);let i=new URLSearchParams;n?.include&&n.include.length>0&&i.append(`include`,n.include.join(`,`));let a=i.toString(),o=`${r.baseUrl}/api/v3.0/cameras/${encodeURIComponent(t)}/settings${a?`?${a}`:``}`;e.v(`Fetching camera settings:`,o);try{let n=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${r.token}`}});if(!n.ok)return d(n);let i=await n.json();return e.v(`Camera settings fetched for:`,t),e.u(i)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch camera settings: ${String(t)}`)}}async function d(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch(n){e.v(`Failed to parse error response JSON:`,n),r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}async function f(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken),t?.include&&t.include.length>0&&r.append(`include`,t.include.join(`,`)),t?.sort&&t.sort.length>0&&r.append(`sort`,t.sort.join(`,`)),t?.locationId__in&&t.locationId__in.length>0&&r.append(`locationId__in`,t.locationId__in.join(`,`)),t?.tags__contains&&t.tags__contains.length>0&&r.append(`tags__contains`,t.tags__contains.join(`,`)),t?.tags__any&&t.tags__any.length>0&&r.append(`tags__any`,t.tags__any.join(`,`)),t?.name&&r.append(`name`,t.name),t?.name__contains&&r.append(`name__contains`,t.name__contains),t?.name__in&&t.name__in.length>0&&r.append(`name__in`,t.name__in.join(`,`)),t?.id__in&&t.id__in.length>0&&r.append(`id__in`,t.id__in.join(`,`)),t?.id__notIn&&t.id__notIn.length>0&&r.append(`id__notIn`,t.id__notIn.join(`,`)),t?.q&&r.append(`q`,t.q),typeof t?.qRelevance__gte==`number`&&r.append(`qRelevance__gte`,String(t.qRelevance__gte)),t?.status__in&&t.status__in.length>0&&r.append(`status__in`,t.status__in.join(`,`)),t?.status__ne&&r.append(`status__ne`,t.status__ne);let i=r.toString(),a=`${n.baseUrl}/api/v3.0/bridges${i?`?${i}`:``}`;e.v(`Fetching bridges:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return m(t);let r=await t.json();return e.v(`Bridges fetched:`,r.results?.length??0,`bridges`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch bridges: ${String(t)}`)}}async function p(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Bridge ID is required`);let i=new URLSearchParams;n?.include&&n.include.length>0&&i.append(`include`,n.include.join(`,`));let a=i.toString(),o=`${r.baseUrl}/api/v3.0/bridges/${encodeURIComponent(t)}${a?`?${a}`:``}`;e.v(`Fetching bridge:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${r.token}`}});if(!t.ok)return m(t);let n=await t.json();return e.v(`Bridge fetched:`,n.name),e.u(n)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch bridge: ${String(t)}`)}}async function m(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch(n){e.v(`Failed to parse error response JSON:`,n),r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}async function ee(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken),t?.include&&t.include.length>0&&r.append(`include`,t.include.join(`,`)),t?.sort&&t.sort.length>0&&r.append(`sort`,t.sort.join(`,`)),t?.name&&r.append(`name`,t.name),t?.name__in&&t.name__in.length>0&&r.append(`name__in`,t.name__in.join(`,`)),t?.name__contains&&r.append(`name__contains`,t.name__contains),t?.id__in&&t.id__in.length>0&&r.append(`id__in`,t.id__in.join(`,`)),t?.[`layoutPanes.cameras.bridgeId`]&&r.append(`layoutPanes.cameras.bridgeId`,t[`layoutPanes.cameras.bridgeId`]),t?.q&&r.append(`q`,t.q),typeof t?.qRelevance__gte==`number`&&r.append(`qRelevance__gte`,String(t.qRelevance__gte));let i=r.toString(),a=`${n.baseUrl}/api/v3.0/layouts${i?`?${i}`:``}`;e.v(`Fetching layouts:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return _(t);let r=await t.json();return e.v(`Layouts fetched:`,r.results?.length??0,`layouts`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch layouts: ${String(t)}`)}}async function te(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Layout ID is required`);let i=new URLSearchParams;n?.include&&n.include.length>0&&i.append(`include`,n.include.join(`,`));let a=i.toString(),o=`${r.baseUrl}/api/v3.0/layouts/${encodeURIComponent(t)}${a?`?${a}`:``}`;e.v(`Fetching layout:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${r.token}`}});if(!t.ok)return _(t);let n=await t.json();return e.v(`Layout fetched:`,n.name),e.u(n)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch layout: ${String(t)}`)}}async function ne(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t.name)return e.l(`VALIDATION_ERROR`,`Layout name is required`);if(!t.settings)return e.l(`VALIDATION_ERROR`,`Layout settings are required`);let r=`${n.baseUrl}/api/v3.0/layouts`;e.v(`Creating layout:`,t.name);let i={name:t.name,settings:t.settings};t.panes&&(i.panes=t.panes);try{let t=await fetch(r,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/json`,Authorization:`Bearer ${n.token}`},body:JSON.stringify(i)});if(!t.ok)return _(t);let a=await t.json();return e.v(`Layout created:`,a.id,a.name),e.u(a)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to create layout: ${String(t)}`)}}async function h(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Layout ID is required`);if(n.name===void 0&&n.settings===void 0&&n.panes===void 0)return e.l(`VALIDATION_ERROR`,`At least one field (name, settings, or panes) must be provided for update`);let i=`${r.baseUrl}/api/v3.0/layouts/${encodeURIComponent(t)}`;e.v(`Updating layout:`,t);let a={};n.name!==void 0&&(a.name=n.name),n.settings!==void 0&&(a.settings=n.settings),n.panes!==void 0&&(a.panes=n.panes);try{let n=await fetch(i,{method:`PATCH`,headers:{Accept:`application/json`,"Content-Type":`application/json`,Authorization:`Bearer ${r.token}`},body:JSON.stringify(a)});return n.ok?(e.v(`Layout updated:`,t),e.u(void 0)):_(n)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to update layout: ${String(t)}`)}}async function g(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Layout ID is required`);let r=`${n.baseUrl}/api/v3.0/layouts/${encodeURIComponent(t)}`;e.v(`Deleting layout:`,t);try{let i=await fetch(r,{method:`DELETE`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});return i.ok?(e.v(`Layout deleted:`,t),e.u(void 0)):_(i)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to delete layout: ${String(t)}`)}}async function _(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch(n){e.v(`Failed to parse error response JSON:`,n),r=t.statusText||`Unknown error`}switch(n){case 400:return e.l(`VALIDATION_ERROR`,`Bad request: ${r}`,n);case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}var v=3e4;function y(e=v){let t=new AbortController;return{controller:t,timeoutId:setTimeout(()=>t.abort(),e)}}function b(e){let t=new Uint8Array(e),n=8192,r=[];for(let e=0;e<t.byteLength;e+=n){let i=t.subarray(e,Math.min(e+n,t.byteLength)),a=``;for(let e=0;e<i.length;e++)a+=String.fromCharCode(i[e]);r.push(a)}let i=r.join(``);return typeof btoa==`function`?btoa(i):Buffer.from(i,`binary`).toString(`base64`)}async function re(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t.deviceId)return e.l(`VALIDATION_ERROR`,`Device ID is required`);if(!t.type)return e.l(`VALIDATION_ERROR`,`Stream type is required (preview or main)`);if(!t.mediaType)return e.l(`VALIDATION_ERROR`,`Media type is required (video or image)`);if(!t.startTimestamp)return e.l(`VALIDATION_ERROR`,`Start timestamp is required`);let r=new URLSearchParams;r.append(`deviceId`,t.deviceId),r.append(`type`,t.type),r.append(`mediaType`,t.mediaType),r.append(`startTimestamp__gte`,t.startTimestamp),t.endTimestamp&&r.append(`endTimestamp__lte`,t.endTimestamp),typeof t.coalesce==`boolean`&&r.append(`coalesce`,String(t.coalesce)),t.include&&t.include.length>0&&r.append(`include`,t.include.join(`,`)),t.pageToken&&r.append(`pageToken`,t.pageToken),typeof t.pageSize==`number`&&r.append(`pageSize`,String(t.pageSize));let i=`${n.baseUrl}/api/v3.0/media?${r.toString()}`;e.v(`Fetching media intervals:`,i);let{controller:a,timeoutId:o}=y();try{let t=await fetch(i,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`},signal:a.signal});if(!t.ok)return x(t);let r=await t.json();return e.v(`Media intervals fetched:`,r.results?.length??0,`intervals`),e.u(r)}catch(t){return t instanceof Error&&t.name===`AbortError`?e.l(`NETWORK_ERROR`,`Request timed out`):e.l(`NETWORK_ERROR`,`Failed to fetch media intervals: ${String(t)}`)}finally{clearTimeout(o)}}async function ie(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t.deviceId)return e.l(`VALIDATION_ERROR`,`Device ID is required`);let r=t.type??`preview`,i=new URLSearchParams;i.append(`deviceId`,t.deviceId),i.append(`type`,r);let a=`${n.baseUrl}/api/v3.0/media/liveImage.jpeg?${i.toString()}`;e.v(`Fetching live image:`,a);let{controller:o,timeoutId:s}=y();try{let t=await fetch(a,{method:`GET`,headers:{Accept:`image/jpeg`,Authorization:`Bearer ${n.token}`},signal:o.signal}),r=t.headers.get(`X-Een-Timestamp`),i=t.headers.get(`X-Een-PrevToken`);if(!t.ok)return x(t);let s=`data:image/jpeg;base64,${b(await t.arrayBuffer())}`;return e.v(`Live image fetched, timestamp:`,r),e.u({imageData:s,timestamp:r,prevToken:i})}catch(t){return t instanceof Error&&t.name===`AbortError`?e.l(`NETWORK_ERROR`,`Request timed out`):e.l(`NETWORK_ERROR`,`Failed to fetch live image: ${String(t)}`)}finally{clearTimeout(s)}}async function ae(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t.deviceId&&!t.pageToken)return e.l(`VALIDATION_ERROR`,`Either deviceId or pageToken is required`);if(!t.pageToken&&!(t.timestamp__lt||t.timestamp__lte||t.timestamp||t.timestamp__gte||t.timestamp__gt))return e.l(`VALIDATION_ERROR`,`At least one timestamp parameter is required`);if(t.include?.includes(`overlaySvgHeader`)&&(!t.overlayId__in||t.overlayId__in.length===0))return e.l(`VALIDATION_ERROR`,`At least one overlayId must be provided when requesting overlay headers`);let r=new URLSearchParams;t.deviceId&&r.append(`deviceId`,t.deviceId),t.pageToken&&r.append(`pageToken`,t.pageToken),t.type&&r.append(`type`,t.type),t.timestamp__lt&&r.append(`timestamp__lt`,t.timestamp__lt),t.timestamp__lte&&r.append(`timestamp__lte`,t.timestamp__lte),t.timestamp&&r.append(`timestamp`,t.timestamp),t.timestamp__gte&&r.append(`timestamp__gte`,t.timestamp__gte),t.timestamp__gt&&r.append(`timestamp__gt`,t.timestamp__gt),t.overlayId__in&&t.overlayId__in.length>0&&r.append(`overlayId__in`,t.overlayId__in.join(`,`)),t.include&&t.include.length>0&&r.append(`include`,t.include.join(`,`)),typeof t.targetWidth==`number`&&r.append(`targetWidth`,String(t.targetWidth)),typeof t.targetHeight==`number`&&r.append(`targetHeight`,String(t.targetHeight));let i=`${n.baseUrl}/api/v3.0/media/recordedImage.jpeg?${r.toString()}`;e.v(`Fetching recorded image:`,i);let{controller:a,timeoutId:o}=y();try{let t=await fetch(i,{method:`GET`,headers:{Accept:`image/jpeg`,Authorization:`Bearer ${n.token}`},signal:a.signal}),r=t.headers.get(`X-Een-Timestamp`),o=t.headers.get(`X-Een-NextToken`),s=t.headers.get(`X-Een-PrevToken`),c=t.headers.get(`X-Een-OverlaySvg`);if(!t.ok)return x(t);let l=`data:image/jpeg;base64,${b(await t.arrayBuffer())}`;return e.v(`Recorded image fetched, timestamp:`,r),e.u({imageData:l,timestamp:r,nextToken:o,prevToken:s,overlaySvg:c})}catch(t){return t instanceof Error&&t.name===`AbortError`?e.l(`NETWORK_ERROR`,`Request timed out`):e.l(`NETWORK_ERROR`,`Failed to fetch recorded image: ${String(t)}`)}finally{clearTimeout(o)}}async function x(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch{r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);case 503:return e.l(`SERVICE_UNAVAILABLE`,`Service unavailable: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}async function S(){let t=e.s();if(!t.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!t.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let n=`${t.baseUrl}/api/v3.0/media/session`;e.v(`Fetching media session:`,n);let{controller:r,timeoutId:i}=y();try{let i=await fetch(n,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${t.token}`},signal:r.signal});if(!i.ok)return x(i);let a=await i.json();return e.v(`Media session URL received:`,a.url),e.u(a)}catch(t){return t instanceof Error&&t.name===`AbortError`?e.l(`NETWORK_ERROR`,`Request timed out`):e.l(`NETWORK_ERROR`,`Failed to fetch media session: ${String(t)}`)}finally{clearTimeout(i)}}async function oe(){let t=e.s();if(!t.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);let n=await S();if(n.error)return e.l(n.error.code,`Failed to get media session: ${n.error.message}`,n.error.status);if(!n.data?.url)return e.l(`API_ERROR`,`No session URL returned from media session endpoint`);let r=n.data.url;e.v(`Calling session URL to set cookie:`,r);try{let t=new URL(r);if(!e.c(t.hostname))return e.l(`VALIDATION_ERROR`,`Session URL domain not allowed: ${t.hostname}`)}catch{return e.l(`VALIDATION_ERROR`,`Invalid session URL format`)}let{controller:i,timeoutId:a}=y();try{let n=await fetch(r,{method:`GET`,credentials:`include`,headers:{Accept:`*/*`,Authorization:`Bearer ${t.token}`},signal:i.signal});if(!n.ok&&n.status!==204){let t=n.status,r;try{let e=await n.json();r=e.message??e.error??n.statusText}catch{r=n.statusText||`Unknown error`}return e.l(`API_ERROR`,`Failed to set media session cookie: ${r}`,t)}return e.v(`Media session cookie set successfully`),e.u({success:!0,sessionUrl:r})}catch(t){return t instanceof Error&&t.name===`AbortError`?e.l(`NETWORK_ERROR`,`Request timed out while setting session cookie`):e.l(`NETWORK_ERROR`,`Failed to set media session cookie: ${String(t)}`)}finally{clearTimeout(a)}}async function se(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;typeof t?.pageSize==`number`&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken),t?.deviceId&&r.append(`deviceId`,t.deviceId),t?.deviceId__in&&t.deviceId__in.length>0&&r.append(`deviceId__in`,t.deviceId__in.join(`,`)),t?.type&&r.append(`type`,t.type),t?.include&&t.include.length>0&&r.append(`include`,t.include.join(`,`));let i=r.toString(),a=`${n.baseUrl}/api/v3.0/feeds${i?`?${i}`:``}`;e.v(`Fetching feeds:`,a);try{let r=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`},signal:t?.signal});if(!r.ok)return C(r);let i=await r.json();return e.v(`Feeds fetched:`,i.results?.length??0,`feeds`),e.u(i)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch feeds: ${String(t)}`)}}async function C(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error}catch(t){e.v(`Failed to parse error response JSON:`,t)}switch(n){case 401:return e.l(`AUTH_REQUIRED`,r||`Authentication failed`,n);case 403:return e.l(`FORBIDDEN`,r||`Access denied`,n);case 404:return e.l(`NOT_FOUND`,r||`Not found`,n);case 429:return e.l(`RATE_LIMITED`,r||`Rate limited`,n);case 503:return e.l(`SERVICE_UNAVAILABLE`,r||`Service unavailable`,n);default:return e.l(`API_ERROR`,r||t.statusText||`API error`,n)}}async function w(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t.actor)return e.l(`VALIDATION_ERROR`,`actor parameter is required`);if(!t.type__in||t.type__in.length===0)return e.l(`VALIDATION_ERROR`,`type__in parameter is required and must not be empty`);if(!t.startTimestamp__gte)return e.l(`VALIDATION_ERROR`,`startTimestamp__gte parameter is required`);let i=new URLSearchParams;i.append(`actor`,t.actor),i.append(`type__in`,t.type__in.join(`,`)),i.append(`startTimestamp__gte`,r(t.startTimestamp__gte)),t.pageSize&&i.append(`pageSize`,String(t.pageSize)),t.pageToken&&i.append(`pageToken`,t.pageToken),t.startTimestamp__lte&&i.append(`startTimestamp__lte`,r(t.startTimestamp__lte)),t.endTimestamp__gte&&i.append(`endTimestamp__gte`,r(t.endTimestamp__gte)),t.endTimestamp__lte&&i.append(`endTimestamp__lte`,r(t.endTimestamp__lte)),t.sort&&i.append(`sort`,t.sort),t.include&&t.include.length>0&&i.append(`include`,t.include.join(`,`));let a=i.toString(),o=`${n.baseUrl}/api/v3.0/events${a?`?${a}`:``}`;e.v(`Fetching events:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return O(t);let r=await t.json();return e.v(`Events fetched:`,r.results?.length??0,`events`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch events: ${String(t)}`)}}async function T(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Event ID is required`);let i=new URLSearchParams;n?.include&&n.include.length>0&&i.append(`include`,n.include.join(`,`));let a=i.toString(),o=`${r.baseUrl}/api/v3.0/events/${encodeURIComponent(t)}${a?`?${a}`:``}`;e.v(`Fetching event:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${r.token}`}});if(!t.ok)return O(t);let n=await t.json();return e.v(`Event fetched:`,n.id),e.u(n)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch event: ${String(t)}`)}}async function E(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken),t?.language&&r.append(`language`,t.language);let i=r.toString(),a=`${n.baseUrl}/api/v3.0/eventTypes${i?`?${i}`:``}`;e.v(`Fetching event types:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return O(t);let r=await t.json();return e.v(`Event types fetched:`,r.results?.length??0,`types`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch event types: ${String(t)}`)}}async function D(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t.actor)return e.l(`VALIDATION_ERROR`,`actor parameter is required`);let r=new URLSearchParams;r.append(`actor`,t.actor);let i=r.toString(),a=`${n.baseUrl}/api/v3.0/events:listFieldValues${i?`?${i}`:``}`;e.v(`Fetching event field values:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return O(t);let r=await t.json();return e.v(`Event field values fetched:`,r.type?.length??0,`types`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch event field values: ${String(t)}`)}}async function O(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch(n){e.v(`Failed to parse error response JSON:`,n),r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}var k={"een.motionDetectionEvent.v1":[`een.objectDetection.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.motionInRegionDetectionEvent.v1":[`een.motionRegion.v1`,`een.objectDetection.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.personDetectionEvent.v1":[`een.objectDetection.v1`,`een.personAttributes.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.objectClassification.v1`,`een.objectRegionMapping.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`,`een.geoLocation.v1`],"een.personMotionDetectionEvent.v1":[`een.objectDetection.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.objectClassification.v1`],"een.animalDetectionEvent.v1":[`een.objectDetection.v1`,`een.animalAttributes.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.objectClassification.v1`,`een.objectRegionMapping.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.faceDetectionEvent.v1":[`een.objectDetection.v1`,`een.personAttributes.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.objectClassification.v1`,`een.objectRegionMapping.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.vehicleDetectionEvent.v1":[`een.objectDetection.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.objectClassification.v1`,`een.vehicleAttributes.v1`,`een.objectRegionMapping.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.vehicleMotionDetectionEvent.v1":[`een.objectDetection.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.objectClassification.v1`,`een.vehicleAttributes.v1`],"een.gunDetectionEvent.v1":[`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.objectDetection.v1`,`een.motionRegion.v1`,`een.objectClassification.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`,`een.weaponAttributes.v1`,`een.personAttributes.v1`,`een.humanValidationDetails.v1`],"een.weaponDetectionEvent.v1":[`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.objectDetection.v1`,`een.motionRegion.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.fallDetectionEvent.v1":[`een.objectDetection.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.fireDetectionEvent.v1":[`een.objectDetection.v1`,`een.objectClassification.v1`,`een.croppedFrameImageUrl.v1`,`een.fullFrameImageUrl.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.spillDetectionEvent.v1":[`een.objectDetection.v1`,`een.objectClassification.v1`,`een.croppedFrameImageUrl.v1`,`een.fullFrameImageUrl.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.crowdFormationDetectionEvent.v1":[`een.objectDetection.v1`,`een.objectClassification.v1`,`een.croppedFrameImageUrl.v1`,`een.fullFrameImageUrl.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.tamperDetectionEvent.v1":[`een.fullFrameImageUrl.v1`],"een.loiterDetectionEvent.v1":[`een.loiterArea.v1`,`een.objectDetection.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.objectLineCrossEvent.v1":[`een.lineCrossLine.v1`,`een.objectDetection.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.entryDirection.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.objectLineCrossCountEvent.v1":[`een.lineCrossLine.v1`,`een.objectDetection.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.entryDirection.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.countedObjectLineCrossEvent.v1":[`een.countedLineCross.v1`],"een.objectIntrusionEvent.v1":[`een.intrusionArea.v1`,`een.objectDetection.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.entryDirection.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.objectRemovalEvent.v1":[`een.monitoredArea.v1`,`een.objectDetection.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.personTailgateEvent.v1":[`een.objectDetection.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.ppeViolationEvent.v1":[`een.objectDetection.v1`,`een.personAttributes.v1`,`een.fullFrameImageUrl.v1`,`een.croppedFrameImageUrl.v1`,`een.objectClassification.v1`,`een.objectRegionMapping.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.sceneLabelEvent.v1":[`een.objectDetection.v1`,`een.objectClassification.v1`,`een.vehicleAttributes.v1`,`een.personAttributes.v1`,`een.animalAttributes.v1`,`een.croppedFrameImageUrl.v1`,`een.fullFrameImageUrl.v1`,`een.objectRegionMapping.v1`,`een.displayOverlay.boundingBox.v1`,`een.customLabels.v1`,`een.eevaAttributes.v1`,`een.fullFrameImageUrlWithOverlay.v1`],"een.eevaQueryEvent.v1":[`een.customLabels.v1`,`een.eevaAttributes.v1`,`een.objectDetection.v1`,`een.fullFrameImageUrl.v1`,`een.fullFrameImageUrlWithOverlay.v1`,`een.displayOverlay.boundingBox.v1`],"een.lprPlateReadEvent.v1":[`een.objectDetection.v1`,`een.lprDetection.v1`,`een.vehicleAttributes.v1`,`een.lprAccessType.v1`,`een.userData.v1`,`een.userTags.v1`,`een.croppedFrameImageUrl.v1`,`een.fullFrameImageUrl.v1`,`een.displayOverlay.boundingBox.v1`,`een.fullFrameImageUrlWithOverlay.v1`,`een.vehicleListInfo.v1`,`een.resourceDetails.v1`,`een.vspInsightsSummary.v1`],"een.fleetCodeRecognitionEvent.v1":[`een.objectDetection.v1`,`een.dotNumberRecognition.v1`,`een.truckNumberRecognition.v1`,`een.trailerNumberRecognition.v1`,`een.croppedFrameImageUrl.v1`,`een.fullFrameImageUrl.v1`,`een.recognizedText.v1`,`een.resourceDetails.v1`],"een.gunShotAudioDetectionEvent.v1":[`een.audioDetection.v1`,`een.geoLocation.v1`],"een.t3AlarmAudioDetectionEvent.v1":[`een.audioDetection.v1`],"een.t4AlarmAudioDetectionEvent.v1":[`een.audioDetection.v1`],"een.posTransactionEvent.v1":[`een.posTransactionStart.v1`,`een.posTransactionEnd.v1`,`een.posTransactionItem.v1`,`een.posTransactionPayment.v1`,`een.posTransactionCartChangeTrail.v1`,`een.posTransactionCardLoadSummary.v1`,`een.posTransactionFlag.v1`,`een.posTransactionLabel.v1`,`een.rawData.v1`,`een.displayLocationSummary.v1`,`een.fullFrameImageUrl.v1`],"een.deviceCloudStatusUpdateEvent.v1":[`een.deviceCloudStatusUpdate.v1`,`een.deviceCloudPreviousStatus.v1`],"een.deviceCloudConnectionStatusUpdateEvent.v1":[`een.deviceCloudConnectionStatusUpdate.v1`,`een.deviceCloudConnectionPreviousStatus.v1`],"een.edgeReportedDeviceStatusEvent.v1":[`een.deviceCommonStatusUpdate.v1`,`een.deviceErrorStatusUpdate.v1`],"een.deviceIOEvent.v1":[`een.deviceIO.v1`],"een.deviceOperationEvent.v1":[`een.resourceDetails.v1`,`een.deviceOperationDetails.v1`,`een.deviceOperationSubStep.v1`,`een.deviceOperationUpdate.v1`],"een.ptzPositionUpdateEvent.v1":[`een.ptzPositionUpdate.v1`],"een.doorStatusEvent.v1":[`een.measurementStringValueUpdate.v1`],"een.batteryLevelUpdateEvent.v1":[`een.batteryLevelUpdate.v1`],"een.measurementThresholdStatusEvent.v1":[`een.measurementThresholdStatus.v1`,`een.measurementValueUpdate.v1`,`een.measurementStringValueUpdate.v1`],"een.thermalCameraThresholdStatusEvent.v1":[`een.thermalCameraValueUpdate.v1`,`een.thermalMonitoredArea.v1`],"een.layoutCreationEvent.v1":[`een.resourceDetails.v1`],"een.layoutUpdateEvent.v1":[`een.resourceDetails.v1`],"een.layoutDeletionEvent.v1":[`een.resourceDetails.v1`],"een.deviceCreationEvent.v1":[`een.resourceDetails.v1`],"een.deviceUpdateEvent.v1":[`een.resourceDetails.v1`],"een.deviceDeletionEvent.v1":[`een.resourceDetails.v1`],"een.userCreationEvent.v1":[`een.resourceDetails.v1`],"een.userUpdateEvent.v1":[`een.resourceDetails.v1`],"een.userDeletionEvent.v1":[`een.resourceDetails.v1`],"een.accountCreationEvent.v1":[`een.resourceDetails.v1`],"een.accountUpdateEvent.v1":[`een.resourceDetails.v1`],"een.accountDeletionEvent.v1":[`een.resourceDetails.v1`],"een.jobCreationEvent.v1":[`een.jobDetails.v1`,`een.ownerDetails.v1`],"een.jobUpdateEvent.v1":[`een.jobDetails.v1`,`een.ownerDetails.v1`],"een.jobDeletionEvent.v1":[`een.ownerDetails.v1`],"een.accessActivationEvent.v1":[`een.credentialAccessActivation.v1`,`een.creatorDetails.v1`,`een.userAccessActivation.v1`],"een.panicButtonEvent.v1":[`een.geoLocation.v1`],"een.evacuateProtocolEvent.v1":[],"een.holdProtocolEvent.v1":[],"een.lockdownProtocolEvent.v1":[],"een.secureProtocolEvent.v1":[],"een.shelterProtocolEvent.v1":[],"een.violenceDetectionEvent.v1":[],"een.fightDetectionEvent.v1":[],"een.handsUpDetectionEvent.v1":[],"een.vapeDetectionEvent.v1":[]};function A(e){return k[e]??[]}function j(e){let t=new Set;for(let n of e){let e=A(n);for(let n of e)t.add(`data.${n}`)}return Array.from(t)}function M(e){return A(e).length>0}function N(e){let t=[];for(let[n,r]of Object.entries(k))r.includes(e)&&t.push(n);return t}function P(){let e=new Set;for(let t of Object.values(k))for(let n of t)e.add(n);return Array.from(e)}function F(){return Object.keys(k)}async function I(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t.actor)return e.l(`VALIDATION_ERROR`,`actor parameter is required`);if(!t.eventType)return e.l(`VALIDATION_ERROR`,`eventType parameter is required`);let i=new URLSearchParams;i.append(`actor`,t.actor),i.append(`eventType`,t.eventType),t.timestamp__gte&&i.append(`timestamp__gte`,r(t.timestamp__gte)),t.timestamp__lte&&i.append(`timestamp__lte`,r(t.timestamp__lte)),t.aggregateByMinutes!==void 0&&i.append(`aggregateByMinutes`,String(t.aggregateByMinutes));let a=i.toString(),o=`${n.baseUrl}/api/v3.0/eventMetrics${a?`?${a}`:``}`;e.v(`Fetching event metrics:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return L(t);let r=await t.json();return e.v(`Event metrics fetched:`,r.length,`metrics`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch event metrics: ${String(t)}`)}}async function L(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch(n){e.v(`Failed to parse error response JSON:`,n),r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}async function R(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let i=new URLSearchParams;t?.pageSize&&i.append(`pageSize`,String(t.pageSize)),t?.pageToken&&i.append(`pageToken`,t.pageToken),t?.timestamp__lte&&i.append(`timestamp__lte`,r(t.timestamp__lte)),t?.timestamp__gte&&i.append(`timestamp__gte`,r(t.timestamp__gte)),t?.creatorId&&i.append(`creatorId`,t.creatorId),t?.alertType__in&&t.alertType__in.length>0&&i.append(`alertType__in`,t.alertType__in.join(`,`)),t?.actorId__in&&t.actorId__in.length>0&&i.append(`actorId__in`,t.actorId__in.join(`,`)),t?.actorType__in&&t.actorType__in.length>0&&i.append(`actorType__in`,t.actorType__in.join(`,`)),t?.actorAccountId&&i.append(`actorAccountId`,t.actorAccountId),t?.ruleId&&i.append(`ruleId`,t.ruleId),t?.ruleId__in&&t.ruleId__in.length>0&&i.append(`ruleId__in`,t.ruleId__in.join(`,`)),t?.eventId&&i.append(`eventId`,t.eventId),t?.locationId__in&&t.locationId__in.length>0&&i.append(`locationId__in`,t.locationId__in.join(`,`)),t?.priority__gte!==void 0&&i.append(`priority__gte`,String(t.priority__gte)),t?.priority__lte!==void 0&&i.append(`priority__lte`,String(t.priority__lte)),t?.showInvalidAlerts!==void 0&&i.append(`showInvalidAlerts`,String(t.showInvalidAlerts)),t?.alertActionId__in&&t.alertActionId__in.length>0&&i.append(`alertActionId__in`,t.alertActionId__in.join(`,`)),t?.alertActionStatus__in&&t.alertActionStatus__in.length>0&&i.append(`alertActionStatus__in`,t.alertActionStatus__in.join(`,`)),t?.include&&t.include.length>0&&i.append(`include`,t.include.join(`,`)),t?.sort&&t.sort.length>0&&i.append(`sort`,t.sort.join(`,`)),t?.language&&i.append(`language`,t.language);let a=i.toString(),o=`${n.baseUrl}/api/v3.0/alerts${a?`?${a}`:``}`;e.v(`Fetching alerts:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return V(t);let r=await t.json();return e.v(`Alerts fetched:`,r.results?.length??0,`alerts`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch alerts: ${String(t)}`)}}async function z(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Alert ID is required`);let i=new URLSearchParams;n?.include&&n.include.length>0&&i.append(`include`,n.include.join(`,`));let a=i.toString(),o=`${r.baseUrl}/api/v3.0/alerts/${encodeURIComponent(t)}${a?`?${a}`:``}`;e.v(`Fetching alert:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${r.token}`}});if(!t.ok)return V(t);let n=await t.json();return e.v(`Alert fetched:`,n.id),e.u(n)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch alert: ${String(t)}`)}}async function B(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken);let i=r.toString(),a=`${n.baseUrl}/api/v3.0/alertTypes${i?`?${i}`:``}`;e.v(`Fetching alert types:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return V(t);let r=await t.json();return e.v(`Alert types fetched:`,r.results?.length??0,`types`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch alert types: ${String(t)}`)}}async function V(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch(n){e.v(`Failed to parse error response JSON:`,n),r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}async function H(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let i=new URLSearchParams;t?.pageSize&&i.append(`pageSize`,String(t.pageSize)),t?.pageToken&&i.append(`pageToken`,t.pageToken),t?.timestamp__lte&&i.append(`timestamp__lte`,r(t.timestamp__lte)),t?.timestamp__gte&&i.append(`timestamp__gte`,r(t.timestamp__gte)),t?.alertId&&i.append(`alertId`,t.alertId),t?.alertType&&i.append(`alertType`,t.alertType),t?.actorId&&i.append(`actorId`,t.actorId),t?.actorType&&i.append(`actorType`,t.actorType),t?.actorAccountId&&i.append(`actorAccountId`,t.actorAccountId),t?.category&&i.append(`category`,t.category),t?.userId&&i.append(`userId`,t.userId),t?.read!==void 0&&i.append(`read`,String(t.read)),t?.status&&i.append(`status`,t.status),t?.includeV1Notifications!==void 0&&i.append(`includeV1Notifications`,String(t.includeV1Notifications)),t?.sort&&t.sort.length>0&&i.append(`sort`,t.sort.join(`,`)),t?.language&&i.append(`language`,t.language);let a=i.toString(),o=`${n.baseUrl}/api/v3.0/notifications${a?`?${a}`:``}`;e.v(`Fetching notifications:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return W(t);let r=await t.json();return e.v(`Notifications fetched:`,r.results?.length??0,`notifications`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch notifications: ${String(t)}`)}}async function U(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Notification ID is required`);let r=`${n.baseUrl}/api/v3.0/notifications/${encodeURIComponent(t)}`;e.v(`Fetching notification:`,r);try{let t=await fetch(r,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return W(t);let i=await t.json();return e.v(`Notification fetched:`,i.id),e.u(i)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch notification: ${String(t)}`)}}async function W(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch(n){e.v(`Failed to parse error response JSON:`,n),r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}async function G(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken);let i=r.toString(),a=`${n.baseUrl}/api/v3.0/eventSubscriptions${i?`?${i}`:``}`;e.v(`Fetching event subscriptions:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return q(t);let r=await t.json();return e.v(`Event subscriptions fetched:`,r.results?.length??0,`subscriptions`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch event subscriptions: ${String(t)}`)}}async function K(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Subscription ID is required`);let r=`${n.baseUrl}/api/v3.0/eventSubscriptions/${encodeURIComponent(t)}`;e.v(`Fetching event subscription:`,r);try{let t=await fetch(r,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return q(t);let i=await t.json();return e.v(`Event subscription fetched:`,i.id),e.u(i)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch event subscription: ${String(t)}`)}}async function ce(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t.deliveryConfig)return e.l(`VALIDATION_ERROR`,`deliveryConfig is required`);if(!t.filters||t.filters.length===0)return e.l(`VALIDATION_ERROR`,`At least one filter is required`);for(let n of t.filters){if(!n.actors||n.actors.length===0)return e.l(`VALIDATION_ERROR`,`Each filter must have at least one actor`);if(!n.types||n.types.length===0)return e.l(`VALIDATION_ERROR`,`Each filter must have at least one event type`)}let r=`${n.baseUrl}/api/v3.0/eventSubscriptions`;e.v(`Creating event subscription:`,r);try{let i=await fetch(r,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/json`,Authorization:`Bearer ${n.token}`},body:JSON.stringify(t)});if(!i.ok)return q(i);let a=await i.json();return e.v(`Event subscription created:`,a.id),e.u(a)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to create event subscription: ${String(t)}`)}}async function le(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Subscription ID is required`);let r=`${n.baseUrl}/api/v3.0/eventSubscriptions/${encodeURIComponent(t)}`;e.v(`Deleting event subscription:`,r);try{let i=await fetch(r,{method:`DELETE`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});return i.ok?(e.v(`Event subscription deleted:`,t),e.u(void 0)):q(i)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to delete event subscription: ${String(t)}`)}}function ue(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.token)return e.l(`AUTH_REQUIRED`,`Access token not available`);if(!t)return e.l(`VALIDATION_ERROR`,`SSE URL is required`);try{let n=new URL(t);if(!e.c(n.hostname))return e.l(`VALIDATION_ERROR`,`SSE URL domain not allowed: ${n.hostname}`)}catch{return e.l(`VALIDATION_ERROR`,`Invalid SSE URL format`)}let i=`connecting`,a=new AbortController,o=!1,s=e=>{i=e,n.onStatusChange?.(i)};return(async()=>{if(!(o||!a)){s(`connecting`),e.v(`Connecting to SSE:`,t);try{let i=await fetch(t,{method:`GET`,headers:{Accept:`text/event-stream`,Authorization:`Bearer ${r.token}`},signal:a.signal});if(!i.ok)throw Error(`HTTP ${i.status}: ${i.statusText}`);if(!i.body)throw Error(`Response body is not available`);s(`connected`),e.v(`SSE connected`);let c=i.body.getReader(),l=new TextDecoder,u=``;for(;!o;){let{done:t,value:r}=await c.read();if(t){e.v(`SSE stream ended`);break}if(u+=l.decode(r,{stream:!0}),u.length>1048576){e.v(`SSE buffer exceeded maximum size, resetting`),u=``;continue}let i=u.split(`
2
+ `);u=i.pop()||``;let a=``;for(let t of i)if(t.startsWith(`data:`)){let e=t.substring(5).trimStart();a=a?`${a}\n${e}`:e}else if(t===``&&a){try{let t=JSON.parse(a);e.v(`SSE event received:`,t.type,t.actorId),n.onEvent(t)}catch(t){e.v(`Failed to parse SSE event:`,t)}a=``}}}catch(t){if(o||t instanceof Error&&t.name===`AbortError`)return;e.v(`SSE error:`,t),s(`error`),n.onError?.(t instanceof Error?t:Error(String(t)))}}})(),e.u({close:()=>{o||(o=!0,e.v(`Closing SSE connection`),a?.abort(),a=null,s(`disconnected`))},get status(){return i}})}async function q(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch(n){e.v(`Failed to parse error response JSON:`,n),r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,r,n);case 403:return e.l(`FORBIDDEN`,r,n);case 404:return e.l(`NOT_FOUND`,r,n);case 429:return e.l(`RATE_LIMITED`,r,n);default:return e.l(`API_ERROR`,r,n)}}async function de(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken),t?.enabled!==void 0&&r.append(`enabled`,String(t.enabled)),t?.id__in&&t.id__in.length>0&&r.append(`id__in`,t.id__in.join(`,`)),t?.outputAlertType__in&&t.outputAlertType__in.length>0&&r.append(`outputAlertType__in`,t.outputAlertType__in.join(`,`)),t?.priority__gte!==void 0&&r.append(`priority__gte`,String(t.priority__gte)),t?.priority__lte!==void 0&&r.append(`priority__lte`,String(t.priority__lte));let i=r.toString(),a=`${n.baseUrl}/api/v3.0/eventAlertConditionRules${i?`?${i}`:``}`;e.v(`Fetching event alert condition rules:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return J(t);let r=await t.json();return e.v(`Event alert condition rules fetched:`,r.results?.length??0,`rules`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch event alert condition rules: ${String(t)}`)}}async function fe(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.enabled!==void 0&&r.append(`enabled`,String(t.enabled));let i=r.toString(),a=`${n.baseUrl}/api/v3.0/eventAlertConditionRules:listFieldValues${i?`?${i}`:``}`;e.v(`Fetching event alert condition rule field values:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return J(t);let r=await t.json();return e.v(`Event alert condition rule field values fetched`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch field values: ${String(t)}`)}}async function pe(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Rule ID is required`);let r=`${n.baseUrl}/api/v3.0/eventAlertConditionRules/${encodeURIComponent(t)}`;e.v(`Fetching event alert condition rule:`,r);try{let t=await fetch(r,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return J(t);let i=await t.json();return e.v(`Event alert condition rule fetched:`,i.id),e.u(i)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch event alert condition rule: ${String(t)}`)}}async function me(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken),t?.enabled!==void 0&&r.append(`enabled`,String(t.enabled)),t?.id__in&&t.id__in.length>0&&r.append(`id__in`,t.id__in.join(`,`)),t?.actorId__in&&t.actorId__in.length>0&&r.append(`actorId__in`,t.actorId__in.join(`,`)),t?.inputEventType__in&&t.inputEventType__in.length>0&&r.append(`inputEventType__in`,t.inputEventType__in.join(`,`)),t?.outputAlertType&&r.append(`outputAlertType`,t.outputAlertType),t?.type&&r.append(`type`,t.type),t?.include&&t.include.length>0&&r.append(`include`,t.include.join(`,`));let i=r.toString(),a=`${n.baseUrl}/api/v3.0/alertConditionRules${i?`?${i}`:``}`;e.v(`Fetching alert condition rules:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return J(t);let r=await t.json();return e.v(`Alert condition rules fetched:`,r.results?.length??0,`rules`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch alert condition rules: ${String(t)}`)}}async function he(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Rule ID is required`);let i=new URLSearchParams;n?.include&&n.include.length>0&&i.append(`include`,n.include.join(`,`));let a=i.toString(),o=`${r.baseUrl}/api/v3.0/alertConditionRules/${encodeURIComponent(t)}${a?`?${a}`:``}`;e.v(`Fetching alert condition rule:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${r.token}`}});if(!t.ok)return J(t);let n=await t.json();return e.v(`Alert condition rule fetched:`,n.id),e.u(n)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch alert condition rule: ${String(t)}`)}}async function ge(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken),t?.enabled!==void 0&&r.append(`enabled`,String(t.enabled)),t?.id__in&&t.id__in.length>0&&r.append(`id__in`,t.id__in.join(`,`)),t?.alertType__in&&t.alertType__in.length>0&&r.append(`alertType__in`,t.alertType__in.join(`,`)),t?.actorId__in&&t.actorId__in.length>0&&r.append(`actorId__in`,t.actorId__in.join(`,`)),t?.alertActionId__in&&t.alertActionId__in.length>0&&r.append(`alertActionId__in`,t.alertActionId__in.join(`,`)),t?.ruleId__in&&t.ruleId__in.length>0&&r.append(`ruleId__in`,t.ruleId__in.join(`,`));let i=r.toString(),a=`${n.baseUrl}/api/v3.0/alertActionRules${i?`?${i}`:``}`;e.v(`Fetching alert action rules:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return J(t);let r=await t.json();return e.v(`Alert action rules fetched:`,r.results?.length??0,`rules`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch alert action rules: ${String(t)}`)}}async function _e(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Rule ID is required`);let r=`${n.baseUrl}/api/v3.0/alertActionRules/${encodeURIComponent(t)}`;e.v(`Fetching alert action rule:`,r);try{let t=await fetch(r,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return J(t);let i=await t.json();return e.v(`Alert action rule fetched:`,i.id),e.u(i)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch alert action rule: ${String(t)}`)}}async function ve(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken),t?.enabled!==void 0&&r.append(`enabled`,String(t.enabled)),t?.id__in&&t.id__in.length>0&&r.append(`id__in`,t.id__in.join(`,`)),t?.type__in&&t.type__in.length>0&&r.append(`type__in`,t.type__in.join(`,`));let i=r.toString(),a=`${n.baseUrl}/api/v3.0/alertActions${i?`?${i}`:``}`;e.v(`Fetching alert actions:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return J(t);let r=await t.json();return e.v(`Alert actions fetched:`,r.results?.length??0,`actions`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch alert actions: ${String(t)}`)}}async function ye(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Action ID is required`);let r=`${n.baseUrl}/api/v3.0/alertActions/${encodeURIComponent(t)}`;e.v(`Fetching alert action:`,r);try{let t=await fetch(r,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return J(t);let i=await t.json();return e.v(`Alert action fetched:`,i.id),e.u(i)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch alert action: ${String(t)}`)}}async function J(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch(n){e.v(`Failed to parse error response JSON:`,n),r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}async function be(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t.cameraId)return e.l(`VALIDATION_ERROR`,`Camera ID is required`);if(!t.type)return e.l(`VALIDATION_ERROR`,`Export type is required`);if(!t.startTimestamp)return e.l(`VALIDATION_ERROR`,`Start timestamp is required`);if(!t.endTimestamp)return e.l(`VALIDATION_ERROR`,`End timestamp is required`);let r=`${n.baseUrl}/api/v3.0/exports`;if(e.v(`Creating export job:`,r),(t.type===`timeLapse`||t.type===`bundle`)&&!t.playbackMultiplier)return e.l(`VALIDATION_ERROR`,`Playback multiplier is required for timeLapse and bundle exports`);if(t.playbackMultiplier!==void 0&&(t.playbackMultiplier<1||t.playbackMultiplier>48))return e.l(`VALIDATION_ERROR`,`Playback multiplier must be between 1 and 48`);let i={name:t.name||`Export-${Date.now()}`,directory:t.directory||`/`};t.notes&&(i.notes=t.notes),t.tags&&t.tags.length>0&&(i.tags=t.tags);let a={startTimestamp:t.startTimestamp,endTimestamp:t.endTimestamp},o={deviceId:t.cameraId,type:t.type,info:i,period:a};t.playbackMultiplier!==void 0&&(o.playbackMultiplier=t.playbackMultiplier),t.autoDelete!==void 0&&(o.autoDelete=t.autoDelete);try{let t=await fetch(r,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/json`,Authorization:`Bearer ${n.token}`},body:JSON.stringify(o)});if(!t.ok)return xe(t);let i=await t.json();return e.v(`Export job created:`,i.id),e.u(i)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to create export job: ${String(t)}`)}}async function xe(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch{r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}async function Se(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken),t?.state__in&&t.state__in.length>0&&r.append(`state__in`,t.state__in.join(`,`)),t?.type&&r.append(`type`,t.type),t?.type__in&&t.type__in.length>0&&r.append(`type__in`,t.type__in.join(`,`)),t?.createTimestamp__gte&&r.append(`createTimestamp__gte`,t.createTimestamp__gte),t?.createTimestamp__lte&&r.append(`createTimestamp__lte`,t.createTimestamp__lte),t?.userId&&r.append(`userId`,t.userId),t?.sort&&t.sort.length>0&&r.append(`sort`,t.sort.join(`,`));let i=r.toString(),a=`${n.baseUrl}/api/v3.0/jobs${i?`?${i}`:``}`;e.v(`Fetching jobs:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return Y(t);let r=await t.json();return e.v(`Jobs fetched:`,r.results?.length??0,`jobs`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch jobs: ${String(t)}`)}}async function Ce(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Job ID is required`);let i=new URLSearchParams;n?.include&&n.include.length>0&&i.append(`include`,n.include.join(`,`));let a=i.toString(),o=`${r.baseUrl}/api/v3.0/jobs/${encodeURIComponent(t)}${a?`?${a}`:``}`;e.v(`Fetching job:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${r.token}`}});if(!t.ok)return Y(t);let n=await t.json();return e.v(`Job fetched:`,n.arguments?.originalRequest?.name||n.id,`state:`,n.state),e.u(n)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch job: ${String(t)}`)}}async function we(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Job ID is required`);let r=`${n.baseUrl}/api/v3.0/jobs/${encodeURIComponent(t)}`;e.v(`Deleting job:`,r);try{let i=await fetch(r,{method:`DELETE`,headers:{Authorization:`Bearer ${n.token}`}});return i.ok?(e.v(`Job deleted:`,t),e.u(void 0)):Y(i)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to delete job: ${String(t)}`)}}async function Y(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch{r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}async function Te(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken),t?.include&&t.include.length>0&&r.append(`include`,t.include.join(`,`)),t?.type__in&&t.type__in.length>0&&r.append(`type__in`,t.type__in.join(`,`)),t?.cameraId&&r.append(`cameraId`,t.cameraId),t?.cameraId__in&&t.cameraId__in.length>0&&r.append(`cameraId__in`,t.cameraId__in.join(`,`)),t?.jobId&&r.append(`jobId`,t.jobId),t?.createTimestamp__gte&&r.append(`createTimestamp__gte`,t.createTimestamp__gte),t?.createTimestamp__lte&&r.append(`createTimestamp__lte`,t.createTimestamp__lte),t?.tags__contains&&t.tags__contains.length>0&&r.append(`tags__contains`,t.tags__contains.join(`,`)),t?.q&&r.append(`q`,t.q),t?.sort&&t.sort.length>0&&r.append(`sort`,t.sort.join(`,`));let i=r.toString(),a=`${n.baseUrl}/api/v3.0/files${i?`?${i}`:``}`;e.v(`Fetching files:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return X(t);let r=await t.json();return e.v(`Files fetched:`,r.results?.length??0,`files`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch files: ${String(t)}`)}}async function Ee(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`File ID is required`);let i=new URLSearchParams;n?.include&&n.include.length>0&&i.append(`include`,n.include.join(`,`));let a=i.toString(),o=`${r.baseUrl}/api/v3.0/files/${encodeURIComponent(t)}${a?`?${a}`:``}`;e.v(`Fetching file:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${r.token}`}});if(!t.ok)return X(t);let n=await t.json();return e.v(`File fetched:`,n.name),e.u(n)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch file: ${String(t)}`)}}async function De(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t.name)return e.l(`VALIDATION_ERROR`,`File name is required`);let r=`${n.baseUrl}/api/v3.0/files`;e.v(`Creating file:`,r);let i={name:t.name};t.type&&(i.type=t.type),t.filename&&(i.filename=t.filename),t.description&&(i.description=t.description),t.tags&&t.tags.length>0&&(i.tags=t.tags),t.cameraId&&(i.cameraId=t.cameraId);try{let t=await fetch(r,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/json`,Authorization:`Bearer ${n.token}`},body:JSON.stringify(i)});if(!t.ok)return X(t);let a=await t.json();return e.v(`File created:`,a.id),e.u(a)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to create file: ${String(t)}`)}}async function Oe(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`File ID is required`);let r=`${n.baseUrl}/api/v3.0/files/${encodeURIComponent(t)}:download`;e.v(`Downloading file:`,r);try{let t=await fetch(r,{method:`GET`,headers:{Authorization:`Bearer ${n.token}`}});if(!t.ok)return X(t);let i=await t.blob(),a=t.headers.get(`Content-Disposition`),o=`download`;if(a){let e=a.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);e&&e[1]&&(o=e[1].replace(/['"]/g,``))}let s=t.headers.get(`Content-Type`)||`application/octet-stream`,c={blob:i,filename:o,contentType:s,size:i.size};return e.v(`File downloaded:`,o,i.size,`bytes`),e.u(c)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to download file: ${String(t)}`)}}async function ke(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`File ID is required`);let r=`${n.baseUrl}/api/v3.0/files/${encodeURIComponent(t)}`;e.v(`Deleting file:`,r);try{let i=await fetch(r,{method:`DELETE`,headers:{Authorization:`Bearer ${n.token}`}});return i.ok?(e.v(`File deleted (recycled):`,t),e.u(void 0)):X(i)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to delete file: ${String(t)}`)}}async function X(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch{r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}async function Z(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);let r=new URLSearchParams;t?.pageSize&&r.append(`pageSize`,String(t.pageSize)),t?.pageToken&&r.append(`pageToken`,t.pageToken),t?.status__in&&t.status__in.length>0&&r.append(`status__in`,t.status__in.join(`,`)),t?.cameraId&&r.append(`cameraId`,t.cameraId),t?.cameraId__in&&t.cameraId__in.length>0&&r.append(`cameraId__in`,t.cameraId__in.join(`,`)),t?.jobId&&r.append(`jobId`,t.jobId),t?.fileId&&r.append(`fileId`,t.fileId),t?.createTimestamp__gte&&r.append(`createTimestamp__gte`,t.createTimestamp__gte),t?.createTimestamp__lte&&r.append(`createTimestamp__lte`,t.createTimestamp__lte),t?.q&&r.append(`q`,t.q),t?.sort&&t.sort.length>0&&r.append(`sort`,t.sort.join(`,`));let i=r.toString(),a=`${n.baseUrl}/api/v3.0/downloads${i?`?${i}`:``}`;e.v(`Fetching downloads:`,a);try{let t=await fetch(a,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!t.ok)return Q(t);let r=await t.json();return e.v(`Downloads fetched:`,r.results?.length??0,`downloads`),e.u(r)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch downloads: ${String(t)}`)}}async function Ae(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Download ID is required`);let i=new URLSearchParams;n?.include&&n.include.length>0&&i.append(`include`,n.include.join(`,`));let a=i.toString(),o=`${r.baseUrl}/api/v3.0/downloads/${encodeURIComponent(t)}${a?`?${a}`:``}`;e.v(`Fetching download:`,o);try{let t=await fetch(o,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${r.token}`}});if(!t.ok)return Q(t);let n=await t.json();return e.v(`Download fetched:`,n.name,`status:`,n.status),e.u(n)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch download: ${String(t)}`)}}async function je(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Download ID is required`);let r=`${n.baseUrl}/api/v3.0/downloads/${encodeURIComponent(t)}:download`;e.v(`Downloading:`,r);try{let t=await fetch(r,{method:`GET`,headers:{Authorization:`Bearer ${n.token}`}});if(!t.ok)return Q(t);let i=await t.blob(),a=t.headers.get(`Content-Disposition`),o=`download`;if(a){let e=a.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);e&&e[1]&&(o=e[1].replace(/['"]/g,``))}let s=t.headers.get(`Content-Type`)||`application/octet-stream`,c={blob:i,filename:o,contentType:s,size:i.size};return e.v(`Downloaded:`,o,i.size,`bytes`),e.u(c)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to download: ${String(t)}`)}}async function Q(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch{r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}async function Me(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Camera ID is required`);let r=`${n.baseUrl}/api/v3.0/cameras/${encodeURIComponent(t)}/ptz/position`;e.v(`Fetching PTZ position:`,r);try{let i=await fetch(r,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!i.ok)return $(i);let a=await i.json();return e.v(`PTZ position fetched for:`,t),e.u(a)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch PTZ position: ${String(t)}`)}}async function Ne(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Camera ID is required`);let i=`${r.baseUrl}/api/v3.0/cameras/${encodeURIComponent(t)}/ptz/position`;e.v(`Moving PTZ camera:`,i,`move:`,n);try{let a=await fetch(i,{method:`PUT`,headers:{Accept:`application/json`,"Content-Type":`application/json`,Authorization:`Bearer ${r.token}`},body:JSON.stringify(n)});return a.ok?(e.v(`PTZ move sent for:`,t),e.u(void 0)):$(a)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to move PTZ camera: ${String(t)}`)}}async function Pe(t){let n=e.s();if(!n.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!n.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Camera ID is required`);let r=`${n.baseUrl}/api/v3.0/cameras/${encodeURIComponent(t)}/ptz/settings`;e.v(`Fetching PTZ settings:`,r);try{let i=await fetch(r,{method:`GET`,headers:{Accept:`application/json`,Authorization:`Bearer ${n.token}`}});if(!i.ok)return $(i);let a=await i.json();return e.v(`PTZ settings fetched for:`,t),e.u(a)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to fetch PTZ settings: ${String(t)}`)}}async function Fe(t,n){let r=e.s();if(!r.isAuthenticated)return e.l(`AUTH_REQUIRED`,`Authentication required`);if(!r.baseUrl)return e.l(`AUTH_REQUIRED`,`Base URL not configured`);if(!t)return e.l(`VALIDATION_ERROR`,`Camera ID is required`);let i=`${r.baseUrl}/api/v3.0/cameras/${encodeURIComponent(t)}/ptz/settings`;e.v(`Updating PTZ settings:`,i);try{let a=await fetch(i,{method:`PATCH`,headers:{Accept:`application/json`,"Content-Type":`application/json`,Authorization:`Bearer ${r.token}`},body:JSON.stringify(n)});return a.ok?(e.v(`PTZ settings updated for:`,t),e.u(void 0)):$(a)}catch(t){return e.l(`NETWORK_ERROR`,`Failed to update PTZ settings: ${String(t)}`)}}async function $(t){let n=t.status,r;try{let e=await t.json();r=e.message??e.error??t.statusText}catch(n){e.v(`Failed to parse error response JSON:`,n),r=t.statusText||`Unknown error`}switch(n){case 401:return e.l(`AUTH_REQUIRED`,`Authentication failed: ${r}`,n);case 403:return e.l(`FORBIDDEN`,`Access denied: ${r}`,n);case 404:return e.l(`NOT_FOUND`,`Not found: ${r}`,n);case 429:return e.l(`RATE_LIMITED`,`Rate limited: ${r}`,n);default:return e.l(`API_ERROR`,`API error: ${r}`,n)}}exports.EVENT_TYPE_DATA_SCHEMAS=k,exports.STORAGE_STRATEGY_DESCRIPTIONS=e.g,exports.addFile=De,exports.connectToEventSubscription=ue,exports.createEventSubscription=ce,exports.createExportJob=be,exports.createLayout=ne,exports.deleteEventSubscription=le,exports.deleteFile=ke,exports.deleteJob=we,exports.deleteLayout=g,exports.downloadDownload=je,exports.downloadFile=Oe,exports.eventTypeHasDataSchemas=M,exports.failure=e.l,exports.formatTimestamp=r,exports.getAccessToken=e.t,exports.getAlert=z,exports.getAlertAction=ye,exports.getAlertActionRule=_e,exports.getAlertConditionRule=he,exports.getAllDataSchemas=P,exports.getAllKnownEventTypes=F,exports.getAuthUrl=e.n,exports.getBridge=p,exports.getBridges=f,exports.getCamera=l,exports.getCameraSettings=u,exports.getCameraStatusString=t,exports.getCameras=c,exports.getClientId=e.d,exports.getConfig=e.f,exports.getCurrentUser=i,exports.getDataSchemasForEventType=A,exports.getDownload=Ae,exports.getEvent=T,exports.getEventAlertConditionRule=pe,exports.getEventAlertConditionRuleFieldValues=fe,exports.getEventMetrics=I,exports.getEventSubscription=K,exports.getEventTypesForDataSchema=N,exports.getFile=Ee,exports.getIncludeParameterForEventTypes=j,exports.getJob=Ce,exports.getLayout=te,exports.getLayouts=ee,exports.getLiveImage=ie,exports.getMediaSession=S,exports.getNotification=U,exports.getProxyUrl=e.p,exports.getPtzPosition=Me,exports.getPtzSettings=Pe,exports.getRecordedImage=ae,exports.getRedirectUri=e.m,exports.getStorageStrategy=e._,exports.getUser=o,exports.getUsers=a,exports.handleAuthCallback=e.r,exports.initEenToolkit=e.h,exports.initMediaSession=oe,exports.isStatusObject=n,exports.listAlertActionRules=ge,exports.listAlertActions=ve,exports.listAlertConditionRules=me,exports.listAlertTypes=B,exports.listAlerts=R,exports.listDownloads=Z,exports.listEventAlertConditionRules=de,exports.listEventFieldValues=D,exports.listEventSubscriptions=G,exports.listEventTypes=E,exports.listEvents=w,exports.listFeeds=se,exports.listFiles=Te,exports.listJobs=Se,exports.listMedia=re,exports.listNotifications=H,exports.movePtz=Ne,exports.refreshToken=e.i,exports.revokeToken=e.a,exports.success=e.u,exports.updateLayout=h,exports.updatePtzSettings=Fe,exports.useAuthStore=e.s;
3
+ //# sourceMappingURL=index.cjs.map