een-api-toolkit 0.3.91 → 0.3.97

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.
@@ -205,40 +205,82 @@ Implemented: [brief list of what IS implemented]
205
205
 
206
206
  #### Document 4: `docs/een-api-coverage.html`
207
207
 
208
- Generate a self-contained HTML file with:
209
-
210
- **Header section**:
211
- - Title: "Eagle Eye Networks API v3.0 - Toolkit Coverage"
212
- - Generation date
213
- - Summary stat cards: Total endpoints, Implemented, Missing, Coverage percentage with progress bar
214
-
215
- **Filter bar**:
216
- - Status filter dropdown (All / Implemented / Missing)
217
- - Category filter dropdown (All + each category)
218
- - Method filter dropdown (All / GET / POST / PATCH / DELETE / PUT)
219
- - Text search input for path/function/description
220
-
221
- **Data table**:
222
- - Columns: #, Category, Subcategory, Method, Path, Description, Status, Toolkit Function
223
- - Sortable by clicking column headers
224
- - Color-coded method badges (GET=blue, POST=green, PATCH=yellow, DELETE=red, PUT=indigo)
225
- - Status badges (Implemented=green, Missing=red)
226
- - Monospace font for function names
227
-
228
- **Styling**:
229
- - Clean, modern CSS with system font stack
230
- - Light background (#f5f7fa)
231
- - White card-style table with subtle shadows
232
- - Responsive layout
233
- - All styles inline (self-contained, no external dependencies)
208
+ Generate a self-contained HTML file matching this exact visual style:
209
+
210
+ **Global reset and body**:
211
+ - `*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }`
212
+ - Font: `-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, sans-serif`
213
+ - Background: `#f5f7fa`, color: `#1a202c`
214
+
215
+ **Header** (`<header>`):
216
+ - Dark navy background: `#1a365d`, white text
217
+ - Padding: `24px 32px`
218
+ - `<h1>` at `1.5rem` bold: "Eagle Eye Networks API v3.0 Toolkit Coverage"
219
+ - `<p>` at `0.875rem`, color `#bee3f8`: generation date and source info
220
+
221
+ **Container**: `max-width: 100%` (use full page width), centered, padding `24px 32px`
222
+
223
+ **Stat cards** (`.stats` grid):
224
+ - `grid-template-columns: repeat(auto-fit, minmax(180px, 1fr))`, gap `16px`
225
+ - Each card: white background, `border-radius: 8px`, padding `20px`, `box-shadow: 0 1px 3px rgba(0,0,0,.08)`
226
+ - Colored `border-top: 4px solid` — blue (`#4299e1`) for Total, green (`#48bb78`) for Implemented, red (`#fc8181`) for Missing, indigo (`#667eea`) for Coverage
227
+ - Label: `0.75rem` uppercase, `letter-spacing: .05em`, color `#718096`
228
+ - Value: `2rem` bold, color `#2d3748`
229
+ - Sub text: `0.8rem`, color `#718096`
230
+
231
+ **Progress bar** (`.progress-wrap`):
232
+ - White card with same shadow/radius as stat cards
233
+ - Label row: flex with `justify-content: space-between`, `0.875rem`, color `#4a5568`
234
+ - Bar background: `#e2e8f0`, `border-radius: 9999px`, height `12px`
235
+ - Fill: `linear-gradient(90deg, #48bb78, #38a169)`, same radius, `transition: width .4s ease`
236
+
237
+ **Filter bar** (`.filter-bar`):
238
+ - White card, flex with `flex-wrap: wrap`, gap `12px`
239
+ - Labels: `0.8rem`, color `#718096`
240
+ - Inputs/selects: border `1px solid #e2e8f0`, `border-radius: 6px`, padding `6px 10px`, `0.875rem`
241
+ - Focus: `border-color: #4299e1`, `box-shadow: 0 0 0 3px rgba(66,153,225,.15)`
242
+ - Text input width: `220px`
243
+ - Filter count: `margin-left: auto`, `0.8rem`, color `#718096`
244
+ - Dropdowns: Status (All/Implemented/Missing), Category (All + each category), Method (All/GET/POST/PATCH/DELETE/PUT)
245
+ - Text search placeholder: "path, function, description..."
246
+
247
+ **Table** (`.table-wrap`):
248
+ - White card with `overflow-x: auto` for horizontal scrollbar on narrow viewports
249
+ - The `<table>` element must have `min-width: 1200px` so content is never clipped — the scrollbar activates instead of truncating columns
250
+ - `<thead>`: dark background `#2d3748`, white text, uppercase `0.75rem`, `letter-spacing: .05em`
251
+ - Headers clickable (cursor pointer) with sort icon `⇅`, changing to `▲`/`▼` when sorted
252
+ - `<tbody>` rows: `border-bottom: 1px solid #edf2f7`, hover `#f7fafc`
253
+ - Cell padding: `10px 14px`
254
+ - Column classes:
255
+ - `.td-num`: color `#a0aec0`, `0.75rem`, width `44px`
256
+ - `.td-cat`: color `#4a5568`, `font-weight: 500`
257
+ - `.td-sub`: color `#718096`
258
+ - `.td-path`: monospace (`'SFMono-Regular', Consolas, monospace`), `0.8rem`, color `#2d3748`
259
+ - `.td-desc`: color `#4a5568`, `max-width: 280px`
260
+ - `.td-func`: monospace, `0.78rem`, color `#553c9a`
261
+
262
+ **Badges** (`.badge`):
263
+ - `display: inline-flex`, padding `2px 8px`, `border-radius: 4px`, `0.72rem` bold uppercase
264
+ - Method colors: GET (`#ebf8ff`/`#2b6cb0`), POST (`#f0fff4`/`#276749`), PATCH (`#fffff0`/`#975a16`), DELETE (`#fff5f5`/`#c53030`), PUT (`#f0e6ff`/`#553c9a`)
265
+ - Status colors: Implemented (`#f0fff4`/`#276749`), Missing (`#fff5f5`/`#c53030`)
266
+
267
+ **Empty state**: centered, padding `48px`, color `#a0aec0`, with a search SVG icon
268
+
269
+ **Footer**: centered, padding `24px`, color `#a0aec0`, `0.8rem`
270
+
271
+ **Columns**: #, Category, Subcategory, Method, Path, Description, Status, Toolkit Function (8 columns)
234
272
 
235
273
  **JavaScript**:
236
274
  - All endpoint data in a `const endpoints = [...]` array with objects: `{cat, sub, method, path, desc, status, func}`
275
+ - Endpoints grouped by category/subcategory with `// ─── Category - Subcategory ───` comment dividers
237
276
  - `status` values: `"impl"` for implemented, `"miss"` for missing
238
277
  - `func` is empty string for missing endpoints
239
- - `renderTable(data)` function to populate tbody
240
- - `filterTable()` function combining all filter inputs
241
- - `sortTable(colIndex)` function with toggle direction
278
+ - `methodBadge(m)` and `statusBadge(s)` helper functions
279
+ - `renderTable(data)` function to populate tbody and update filter count
280
+ - `filterTable()` function combining all four filter inputs (status, category, method, text search across path+func+desc+sub)
281
+ - `sortTable(colIndex)` function with toggle direction, updating header sort icons
282
+ - `sortCol`/`sortAsc` state variables
283
+ - Initial call to `renderTable(endpoints)` at the end
242
284
  - All code inline (no external dependencies)
243
285
 
244
286
  ## Important Guidelines
@@ -221,14 +221,24 @@ nested `capabilities.ptz.capable` field. The structure is:
221
221
  ```
222
222
 
223
223
  **IMPORTANT:** The PTZ capability is at `capabilities.ptz.capable` (nested under a `ptz` object),
224
- NOT at `capabilities.ptzCapable` (flat). Always use `capabilities?.ptz?.capable` to check.
224
+ NOT at `capabilities.ptzCapable` (flat). Fisheye cameras report `capabilities.ptz.capable: true`
225
+ but are NOT true PTZ cameras — always exclude them. Use this pattern:
226
+
227
+ ```typescript
228
+ import { computed } from 'vue'
229
+
230
+ const isPtzCapable = computed(() => {
231
+ const ptz = camera.value?.capabilities?.ptz
232
+ return ptz?.capable === true && ptz?.fisheye !== true
233
+ })
234
+ ```
225
235
 
226
236
  Also check `effectivePermissions.controlPTZ` to verify the user has permission to move the camera,
227
237
  and `effectivePermissions.editPTZStations` for managing presets.
228
238
 
229
239
  ## Constraints
230
240
  - Always check authentication before API calls
231
- - Verify camera has PTZ capability (`capabilities.ptz.capable`) before showing controls
241
+ - Verify camera has PTZ capability (`capabilities.ptz.capable`) and is not fisheye (`capabilities.ptz.fisheye !== true`) before showing controls
232
242
  - Check user permissions (`effectivePermissions.controlPTZ`) before enabling movement
233
243
  - Poll position periodically (every 5s) for position display
234
244
  - Handle 204 responses for PUT/PATCH (no response body)
package/CHANGELOG.md CHANGED
@@ -2,41 +2,10 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- ## [0.3.91] - 2026-02-21
5
+ ## [0.3.97] - 2026-02-22
6
6
 
7
7
  ### Release Summary
8
8
 
9
- #### PR #118: Release v0.3.85 - API coverage docs and workflow security fix
10
- ## Summary
11
-
12
- - Add EEN API v3.0 coverage documentation (4 documents comparing 211 API endpoints against 51 implemented, 24.2% coverage)
13
- - Add `api-coverage-agent` for on-demand regeneration of coverage docs
14
- - Update README with agent list and coverage section
15
- - Fix workflow_dispatch restriction to production branch (security)
16
-
17
- ## Commits
18
-
19
- - `baa7e1b` feat: add EEN API coverage documentation and agent
20
- - `eea17e8` docs: add missing agents to README agent list
21
- - `bb47cc2` docs: rename een-api-coverage-agent to api-coverage-agent
22
- - `c794fba` fix: restrict workflow_dispatch to production branch to prevent supply chain attack
23
- - `6e782e2` fix: restrict npm-publish workflow_dispatch to production branch
24
-
25
- ## Test Results (from PR #117)
26
-
27
- - **Lint**: Passed
28
- - **Unit tests**: 644 passed
29
- - **Build**: Succeeded
30
- - **E2E tests**: 236 passed across all 11 example apps
31
- - **Security review**: No vulnerabilities
32
- - **Code review**: Approved by Claude Sonnet 4.5
33
-
34
- ## Version
35
-
36
- v0.3.85
37
-
38
- 🤖 Generated with [Claude Code](https://claude.com/claude-code)
39
-
40
9
  #### PR #128: Release v0.3.89: PTZ camera control API and vue-ptz example
41
10
  ## Summary
42
11
 
@@ -77,26 +46,48 @@ This release adds PTZ (Pan/Tilt/Zoom) camera control support to the toolkit:
77
46
 
78
47
  🤖 Generated with [Claude Code](https://claude.com/claude-code)
79
48
 
49
+ #### PR #130: Release v0.3.96: PTZ fisheye exclusion and API coverage docs
50
+ ## Summary
51
+ - Add fisheye camera exclusion to PTZ type definitions, agent docs, AI reference docs, and vue-ptz example
52
+ - Add PTZ sub-capability fields (`fisheye`, `panTilt`, `zoom`, `positionMove`, `directionMove`, `centerOnMove`) to `Camera.capabilities.ptz` type
53
+ - Regenerate API coverage docs with full-width layout and scrollbar fix
80
54
 
81
- ### Detailed Changes
55
+ ## Version
56
+ v0.3.96
57
+
58
+ ## Commits
59
+ - `1d9da62` docs: regenerate API coverage docs with full-width layout and scrollbar fix
60
+ - `044c9ae` docs: add fisheye camera exclusion guidance to PTZ agent
61
+ - `f65ff2e` fix: add PTZ sub-capability fields to Camera type and update docs
62
+ - `6ecf253` fix: address review findings for PTZ fisheye guidance
63
+ - `97cf632` fix: exclude fisheye cameras from PTZ selector in vue-ptz example
82
64
 
83
- #### Features
84
- - feat: add PTZ camera control API and vue-ptz example app
65
+ ## Test Results
66
+ - Lint: passed (1 pre-existing warning)
67
+ - Unit tests: 683/683 passed
68
+ - Build: passed
69
+ - E2E: 12/12 example apps passed
70
+ - Security: no vulnerabilities (type/docs changes only)
71
+ - Confidential data scan: clean across 280 changed .md files
72
+
73
+ 🤖 Generated with [Claude Code](https://claude.com/claude-code)
74
+
75
+
76
+ ### Detailed Changes
85
77
 
86
78
  #### Bug Fixes
87
- - fix: address remaining PR #128 review findings
88
- - fix: address PR #128 review findings
89
- - fix: address remaining review findings
90
- - fix: address review findings in vue-ptz example app
91
- - fix: use single getCameras call with include and pagination for PTZ discovery
92
- - fix: use floating v1 tag for claude-code-action instead of SHA pin
79
+ - fix: fix sorting bug in coverage table and add undefined fisheye test
80
+ - fix: exclude fisheye cameras from PTZ selector in vue-ptz example
81
+ - fix: address review findings for PTZ fisheye guidance
82
+ - fix: add PTZ sub-capability fields to Camera type and update docs
93
83
 
94
84
  #### Other Changes
95
- - chore(deps): bump github/codeql-action from 4.32.2 to 4.32.3
85
+ - docs: add fisheye camera exclusion guidance to PTZ agent
86
+ - docs: regenerate API coverage docs with full-width layout and scrollbar fix
96
87
 
97
88
  ### Links
98
89
  - [npm package](https://www.npmjs.com/package/een-api-toolkit)
99
- - [Full Changelog](https://github.com/klaushofrichter/een-api-toolkit/compare/v0.3.85...v0.3.91)
90
+ - [Full Changelog](https://github.com/klaushofrichter/een-api-toolkit/compare/v0.3.91...v0.3.97)
100
91
 
101
92
  ---
102
- *Released: 2026-02-21 17:41:30 CST*
93
+ *Released: 2026-02-22 19:53:20 CST*
package/dist/index.d.ts CHANGED
@@ -610,6 +610,18 @@ export declare interface Camera {
610
610
  ptz?: {
611
611
  /** Whether this camera supports PTZ controls */
612
612
  capable?: boolean;
613
+ /** Whether this is a fisheye camera (not a true PTZ camera) */
614
+ fisheye?: boolean;
615
+ /** Whether the camera supports pan/tilt movements */
616
+ panTilt?: boolean;
617
+ /** Whether the camera supports zoom */
618
+ zoom?: boolean;
619
+ /** Whether the camera supports absolute position moves */
620
+ positionMove?: boolean;
621
+ /** Whether the camera supports directional moves */
622
+ directionMove?: boolean;
623
+ /** Whether the camera supports center-on moves */
624
+ centerOnMove?: boolean;
613
625
  };
614
626
  };
615
627
  /** List of enabled analytics on this camera */
@@ -1,6 +1,6 @@
1
1
  # EEN API Toolkit - AI Reference
2
2
 
3
- > **Version:** 0.3.91
3
+ > **Version:** 0.3.97
4
4
  >
5
5
  > This documentation is optimized for AI assistants. It provides focused, domain-specific
6
6
  > references to help you understand and use the een-api-toolkit efficiently.
@@ -1,6 +1,6 @@
1
1
  # Authentication - EEN API Toolkit
2
2
 
3
- > **Version:** 0.3.91
3
+ > **Version:** 0.3.97
4
4
  >
5
5
  > OAuth flow implementation, token management, and session handling.
6
6
  > Load this document when implementing login, logout, or auth guards.
@@ -1,6 +1,6 @@
1
1
  # Automations API - EEN API Toolkit
2
2
 
3
- > **Version:** 0.3.91
3
+ > **Version:** 0.3.97
4
4
  >
5
5
  > Complete reference for automation rules and alert actions.
6
6
  > Load this document when working with automated alert workflows.
@@ -1,6 +1,6 @@
1
1
  # Cameras & Bridges API - EEN API Toolkit
2
2
 
3
- > **Version:** 0.3.91
3
+ > **Version:** 0.3.97
4
4
  >
5
5
  > Complete reference for camera and bridge management.
6
6
  > Load this document when working with devices.
@@ -33,6 +33,17 @@ interface Camera {
33
33
  deviceInfo?: CameraDeviceInfo
34
34
  shareDetails?: CameraShareDetails
35
35
  devicePosition?: CameraDevicePosition
36
+ capabilities?: {
37
+ ptz?: {
38
+ capable?: boolean
39
+ fisheye?: boolean
40
+ panTilt?: boolean
41
+ zoom?: boolean
42
+ positionMove?: boolean
43
+ directionMove?: boolean
44
+ centerOnMove?: boolean
45
+ }
46
+ }
36
47
  createdAt?: string
37
48
  updatedAt?: string
38
49
  }
@@ -1,6 +1,6 @@
1
1
  # Event Type to Data Schemas Mapping - EEN API Toolkit
2
2
 
3
- > **Version:** 0.3.91
3
+ > **Version:** 0.3.97
4
4
  >
5
5
  > Complete reference for event type to data schema mappings.
6
6
  > Load this document when building dynamic event queries with the `include` parameter.
@@ -1,6 +1,6 @@
1
1
  # Events, Alerts & Real-Time Streaming - EEN API Toolkit
2
2
 
3
- > **Version:** 0.3.91
3
+ > **Version:** 0.3.97
4
4
  >
5
5
  > Complete reference for events, alerts, metrics, and SSE subscriptions.
6
6
  > Load this document when implementing event-driven features.
@@ -1,6 +1,6 @@
1
1
  # Layouts API - EEN API Toolkit
2
2
 
3
- > **Version:** 0.3.91
3
+ > **Version:** 0.3.97
4
4
  >
5
5
  > Complete reference for layout management (camera grouping).
6
6
  > Load this document when working with layouts.
@@ -1,6 +1,6 @@
1
1
  # Jobs, Exports, Files & Downloads - EEN API Toolkit
2
2
 
3
- > **Version:** 0.3.91
3
+ > **Version:** 0.3.97
4
4
  >
5
5
  > Complete reference for async jobs, video exports, and file management.
6
6
  > Load this document when implementing export workflows or file downloads.
@@ -1,6 +1,6 @@
1
1
  # Media & Live Video - EEN API Toolkit
2
2
 
3
- > **Version:** 0.3.91
3
+ > **Version:** 0.3.97
4
4
  >
5
5
  > Complete reference for media retrieval, live streaming, and video playback.
6
6
  > Load this document when implementing video features.
@@ -1,6 +1,6 @@
1
1
  # PTZ Camera Controls
2
2
 
3
- > **Version:** 0.3.91
3
+ > **Version:** 0.3.97
4
4
  >
5
5
  > Pan/Tilt/Zoom camera control: position, movement, presets, and automation.
6
6
 
@@ -142,6 +142,22 @@ function handleVideoClick(event: MouseEvent) {
142
142
  | FORBIDDEN | No permission | Show access denied |
143
143
  | VALIDATION_ERROR | Empty camera ID | Fix input |
144
144
 
145
+ ## Fisheye Camera Exclusion
146
+
147
+ **IMPORTANT:** Fisheye cameras report `capabilities.ptz.capable: true` but are NOT true PTZ cameras.
148
+ Always exclude fisheye cameras when checking PTZ capability:
149
+
150
+ ```typescript
151
+ import { computed } from 'vue'
152
+
153
+ const isPtzCapable = computed(() => {
154
+ const ptz = camera.value?.capabilities?.ptz
155
+ return ptz?.capable === true && ptz?.fisheye !== true
156
+ })
157
+ ```
158
+
159
+ Also check `effectivePermissions.controlPTZ` to verify the user has permission to move the camera.
160
+
145
161
  ---
146
162
 
147
163
  ## Reference Examples
@@ -1,6 +1,6 @@
1
1
  # Vue 3 Application Setup - EEN API Toolkit
2
2
 
3
- > **Version:** 0.3.91
3
+ > **Version:** 0.3.97
4
4
  >
5
5
  > Complete guide for setting up a Vue 3 application with the een-api-toolkit.
6
6
  > Load this document when creating a new project or troubleshooting setup issues.
@@ -1,6 +1,6 @@
1
1
  # Users API - EEN API Toolkit
2
2
 
3
- > **Version:** 0.3.91
3
+ > **Version:** 0.3.97
4
4
  >
5
5
  > Complete reference for user management.
6
6
  > Load this document when working with user data.
@@ -214,7 +214,7 @@ let pageToken: string | undefined
214
214
  do {
215
215
  const result = await getCameras({ pageSize: 100, include: ['capabilities'], pageToken })
216
216
  for (const cam of result.data?.results || []) {
217
- if (cam.capabilities?.ptz?.capable) ptzCameras.push(cam)
217
+ if (cam.capabilities?.ptz?.capable && !cam.capabilities?.ptz?.fisheye) ptzCameras.push(cam)
218
218
  }
219
219
  pageToken = result.data?.nextPageToken ?? undefined
220
220
  } while (pageToken)
@@ -35,7 +35,7 @@ async function loadPtzCameras() {
35
35
 
36
36
  const allCameras = result.data?.results || []
37
37
  for (const cam of allCameras) {
38
- if (cam.capabilities?.ptz?.capable) {
38
+ if (cam.capabilities?.ptz?.capable && !cam.capabilities?.ptz?.fisheye) {
39
39
  ptzCameras.push(cam)
40
40
  }
41
41
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "een-api-toolkit",
3
- "version": "0.3.91",
3
+ "version": "0.3.97",
4
4
  "description": "EEN Video platform API v3.0 library for Vue 3",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",