@wave-av/sdk 2.0.0 → 2.0.1

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 (99) hide show
  1. package/dist/audience.d.ts +104 -0
  2. package/dist/audience.d.ts.map +1 -0
  3. package/dist/camera-control.d.ts +54 -0
  4. package/dist/camera-control.d.ts.map +1 -0
  5. package/dist/captions.d.ts +362 -0
  6. package/dist/captions.d.ts.map +1 -0
  7. package/dist/chapters.d.ts +315 -0
  8. package/dist/chapters.d.ts.map +1 -0
  9. package/dist/client.d.ts +191 -0
  10. package/dist/client.d.ts.map +1 -0
  11. package/dist/clips.d.ts +258 -0
  12. package/dist/clips.d.ts.map +1 -0
  13. package/dist/cloud-switcher.d.ts +65 -0
  14. package/dist/cloud-switcher.d.ts.map +1 -0
  15. package/dist/collab-types.d.ts +204 -0
  16. package/dist/collab-types.d.ts.map +1 -0
  17. package/dist/collab.d.ts +226 -0
  18. package/dist/collab.d.ts.map +1 -0
  19. package/dist/connect.d.ts +88 -0
  20. package/dist/connect.d.ts.map +1 -0
  21. package/dist/creator.d.ts +109 -0
  22. package/dist/creator.d.ts.map +1 -0
  23. package/dist/desktop.d.ts +95 -0
  24. package/dist/desktop.d.ts.map +1 -0
  25. package/dist/distribution.d.ts +92 -0
  26. package/dist/distribution.d.ts.map +1 -0
  27. package/dist/drm.d.ts +87 -0
  28. package/dist/drm.d.ts.map +1 -0
  29. package/dist/edge.d.ts +112 -0
  30. package/dist/edge.d.ts.map +1 -0
  31. package/dist/editor-types.d.ts +236 -0
  32. package/dist/editor-types.d.ts.map +1 -0
  33. package/dist/editor.d.ts +206 -0
  34. package/dist/editor.d.ts.map +1 -0
  35. package/dist/fleet.d.ts +207 -0
  36. package/dist/fleet.d.ts.map +1 -0
  37. package/dist/ghost.d.ts +213 -0
  38. package/dist/ghost.d.ts.map +1 -0
  39. package/dist/index.d.ts +144 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/marketplace.d.ts +90 -0
  42. package/dist/marketplace.d.ts.map +1 -0
  43. package/dist/mesh.d.ts +237 -0
  44. package/dist/mesh.d.ts.map +1 -0
  45. package/dist/notifications.d.ts +82 -0
  46. package/dist/notifications.d.ts.map +1 -0
  47. package/dist/phone.d.ts +369 -0
  48. package/dist/phone.d.ts.map +1 -0
  49. package/dist/pipeline.d.ts +409 -0
  50. package/dist/pipeline.d.ts.map +1 -0
  51. package/dist/podcast.d.ts +113 -0
  52. package/dist/podcast.d.ts.map +1 -0
  53. package/dist/prism.d.ts +132 -0
  54. package/dist/prism.d.ts.map +1 -0
  55. package/dist/prompter.d.ts +184 -0
  56. package/dist/prompter.d.ts.map +1 -0
  57. package/dist/pulse.d.ts +156 -0
  58. package/dist/pulse.d.ts.map +1 -0
  59. package/dist/qr.d.ts +82 -0
  60. package/dist/qr.d.ts.map +1 -0
  61. package/dist/replay.d.ts +52 -0
  62. package/dist/replay.d.ts.map +1 -0
  63. package/dist/scene-types.d.ts +190 -0
  64. package/dist/scene-types.d.ts.map +1 -0
  65. package/dist/scene.d.ts +213 -0
  66. package/dist/scene.d.ts.map +1 -0
  67. package/dist/search-types.d.ts +210 -0
  68. package/dist/search-types.d.ts.map +1 -0
  69. package/dist/search.d.ts +250 -0
  70. package/dist/search.d.ts.map +1 -0
  71. package/dist/sentiment.d.ts +378 -0
  72. package/dist/sentiment.d.ts.map +1 -0
  73. package/dist/signage.d.ts +101 -0
  74. package/dist/signage.d.ts.map +1 -0
  75. package/dist/slides.d.ts +68 -0
  76. package/dist/slides.d.ts.map +1 -0
  77. package/dist/studio-ai-types.d.ts +198 -0
  78. package/dist/studio-ai-types.d.ts.map +1 -0
  79. package/dist/studio-ai.d.ts +218 -0
  80. package/dist/studio-ai.d.ts.map +1 -0
  81. package/dist/studio-types.d.ts +267 -0
  82. package/dist/studio-types.d.ts.map +1 -0
  83. package/dist/studio.d.ts +234 -0
  84. package/dist/studio.d.ts.map +1 -0
  85. package/dist/telemetry.d.ts +76 -0
  86. package/dist/telemetry.d.ts.map +1 -0
  87. package/dist/transcribe-types.d.ts +153 -0
  88. package/dist/transcribe-types.d.ts.map +1 -0
  89. package/dist/transcribe.d.ts +218 -0
  90. package/dist/transcribe.d.ts.map +1 -0
  91. package/dist/usb.d.ts +64 -0
  92. package/dist/usb.d.ts.map +1 -0
  93. package/dist/vault.d.ts +121 -0
  94. package/dist/vault.d.ts.map +1 -0
  95. package/dist/voice.d.ts +307 -0
  96. package/dist/voice.d.ts.map +1 -0
  97. package/dist/zoom.d.ts +91 -0
  98. package/dist/zoom.d.ts.map +1 -0
  99. package/package.json +1 -1
@@ -0,0 +1,258 @@
1
+ /**
2
+ * WAVE SDK - Clips API
3
+ *
4
+ * Create, manage, and export video clips from streams and recordings.
5
+ *
6
+ * NOTE: This is a client SDK. All authorization checks are performed server-side.
7
+ * The API will return 403 Forbidden if the user lacks required permissions.
8
+ */
9
+ import type { WaveClient, PaginationParams, PaginatedResponse, Timestamps, Metadata } from './client';
10
+ /**
11
+ * Clip status
12
+ */
13
+ export type ClipStatus = 'pending' | 'processing' | 'ready' | 'failed' | 'deleted';
14
+ /**
15
+ * Clip export format
16
+ */
17
+ export type ClipExportFormat = 'mp4' | 'webm' | 'mov' | 'gif' | 'mp3' | 'wav';
18
+ /**
19
+ * Clip quality preset
20
+ */
21
+ export type ClipQualityPreset = 'low' | 'medium' | 'high' | 'source' | 'custom';
22
+ /**
23
+ * Clip source reference
24
+ */
25
+ export interface ClipSource {
26
+ type: 'stream' | 'recording' | 'upload';
27
+ id: string;
28
+ start_time: number;
29
+ end_time: number;
30
+ }
31
+ /**
32
+ * Clip object
33
+ */
34
+ export interface Clip extends Timestamps {
35
+ id: string;
36
+ organization_id: string;
37
+ title: string;
38
+ description?: string;
39
+ source: ClipSource;
40
+ status: ClipStatus;
41
+ duration: number;
42
+ thumbnail_url?: string;
43
+ playback_url?: string;
44
+ download_url?: string;
45
+ file_size?: number;
46
+ width?: number;
47
+ height?: number;
48
+ frame_rate?: number;
49
+ bitrate?: number;
50
+ codec?: string;
51
+ tags?: string[];
52
+ metadata?: Metadata;
53
+ error?: string;
54
+ }
55
+ /**
56
+ * Create clip request
57
+ */
58
+ export interface CreateClipRequest {
59
+ title: string;
60
+ description?: string;
61
+ source: ClipSource;
62
+ quality?: ClipQualityPreset;
63
+ format?: ClipExportFormat;
64
+ tags?: string[];
65
+ metadata?: Metadata;
66
+ /** Enable AI-powered highlight detection */
67
+ auto_highlights?: boolean;
68
+ /** Webhook URL for status updates */
69
+ webhook_url?: string;
70
+ }
71
+ /**
72
+ * Update clip request
73
+ */
74
+ export interface UpdateClipRequest {
75
+ title?: string;
76
+ description?: string;
77
+ tags?: string[];
78
+ metadata?: Metadata;
79
+ }
80
+ /**
81
+ * List clips filters
82
+ */
83
+ export interface ListClipsParams extends PaginationParams {
84
+ status?: ClipStatus;
85
+ source_type?: 'stream' | 'recording' | 'upload';
86
+ source_id?: string;
87
+ tags?: string[];
88
+ created_after?: string;
89
+ created_before?: string;
90
+ order_by?: 'created_at' | 'duration' | 'title';
91
+ order?: 'asc' | 'desc';
92
+ }
93
+ /**
94
+ * Export clip request
95
+ */
96
+ export interface ExportClipRequest {
97
+ format: ClipExportFormat;
98
+ quality?: ClipQualityPreset;
99
+ /** Custom resolution (e.g., "1920x1080") */
100
+ resolution?: string;
101
+ /** Custom bitrate in kbps */
102
+ bitrate?: number;
103
+ /** Include audio */
104
+ include_audio?: boolean;
105
+ /** Add watermark */
106
+ watermark?: {
107
+ image_url: string;
108
+ position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'center';
109
+ opacity?: number;
110
+ scale?: number;
111
+ };
112
+ }
113
+ /**
114
+ * Export job status
115
+ */
116
+ export interface ClipExport extends Timestamps {
117
+ id: string;
118
+ clip_id: string;
119
+ status: 'pending' | 'processing' | 'ready' | 'failed';
120
+ format: ClipExportFormat;
121
+ download_url?: string;
122
+ file_size?: number;
123
+ expires_at?: string;
124
+ error?: string;
125
+ }
126
+ /**
127
+ * Auto-highlight result
128
+ */
129
+ export interface ClipHighlight {
130
+ start_time: number;
131
+ end_time: number;
132
+ score: number;
133
+ type: 'action' | 'speech' | 'emotion' | 'custom';
134
+ label?: string;
135
+ }
136
+ /**
137
+ * Clips API client
138
+ *
139
+ * All operations require appropriate permissions. Authorization is enforced
140
+ * server-side - the API returns 403 if the authenticated user lacks access.
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * import { WaveClient } from '@wave/sdk';
145
+ * import { ClipsAPI } from '@wave/sdk/clips';
146
+ *
147
+ * const client = new WaveClient({ apiKey: 'your-api-key' });
148
+ * const clips = new ClipsAPI(client);
149
+ *
150
+ * // Create a clip from a stream
151
+ * const clip = await clips.create({
152
+ * title: 'Best Moment',
153
+ * source: {
154
+ * type: 'stream',
155
+ * id: 'stream_123',
156
+ * start_time: 120,
157
+ * end_time: 150,
158
+ * },
159
+ * });
160
+ *
161
+ * // Wait for processing
162
+ * const ready = await clips.waitForReady(clip.id);
163
+ * console.log('Clip ready:', ready.playback_url);
164
+ * ```
165
+ */
166
+ export declare class ClipsAPI {
167
+ private readonly client;
168
+ private readonly basePath;
169
+ constructor(client: WaveClient);
170
+ /**
171
+ * Create a new clip
172
+ *
173
+ * Requires: clips:create permission
174
+ */
175
+ create(request: CreateClipRequest): Promise<Clip>;
176
+ /**
177
+ * Get a clip by ID
178
+ *
179
+ * Requires: clips:read permission
180
+ */
181
+ get(clipId: string): Promise<Clip>;
182
+ /**
183
+ * Update a clip
184
+ *
185
+ * Requires: clips:update permission
186
+ */
187
+ update(clipId: string, request: UpdateClipRequest): Promise<Clip>;
188
+ /**
189
+ * Remove a clip
190
+ *
191
+ * Requires: clips:remove permission (server-side RBAC enforced)
192
+ */
193
+ remove(clipId: string): Promise<void>;
194
+ /**
195
+ * List clips with optional filters
196
+ *
197
+ * Requires: clips:read permission
198
+ */
199
+ list(params?: ListClipsParams): Promise<PaginatedResponse<Clip>>;
200
+ /**
201
+ * Export a clip to a different format
202
+ *
203
+ * Requires: clips:export permission
204
+ */
205
+ exportClip(clipId: string, request: ExportClipRequest): Promise<ClipExport>;
206
+ /**
207
+ * Get export job status
208
+ *
209
+ * Requires: clips:read permission
210
+ */
211
+ getExport(clipId: string, exportId: string): Promise<ClipExport>;
212
+ /**
213
+ * List all exports for a clip
214
+ *
215
+ * Requires: clips:read permission
216
+ */
217
+ listExports(clipId: string, params?: PaginationParams): Promise<PaginatedResponse<ClipExport>>;
218
+ /**
219
+ * Detect highlights in source content
220
+ *
221
+ * Requires: clips:analyze permission
222
+ */
223
+ detectHighlights(sourceType: 'stream' | 'recording', sourceId: string, options?: {
224
+ types?: ('action' | 'speech' | 'emotion')[];
225
+ min_score?: number;
226
+ max_results?: number;
227
+ }): Promise<ClipHighlight[]>;
228
+ /**
229
+ * Generate clips from detected highlights
230
+ *
231
+ * Requires: clips:create permission
232
+ */
233
+ createFromHighlights(sourceType: 'stream' | 'recording', sourceId: string, options?: {
234
+ min_score?: number;
235
+ max_clips?: number;
236
+ title_prefix?: string;
237
+ tags?: string[];
238
+ }): Promise<Clip[]>;
239
+ /**
240
+ * Wait for a clip to be ready
241
+ */
242
+ waitForReady(clipId: string, options?: {
243
+ pollInterval?: number;
244
+ timeout?: number;
245
+ onProgress?: (clip: Clip) => void;
246
+ }): Promise<Clip>;
247
+ /**
248
+ * Wait for an export to be ready
249
+ */
250
+ waitForExport(clipId: string, exportId: string, options?: {
251
+ pollInterval?: number;
252
+ timeout?: number;
253
+ }): Promise<ClipExport>;
254
+ }
255
+ /**
256
+ * Create a Clips API instance
257
+ */
258
+ export declare function createClipsAPI(client: WaveClient): ClipsAPI;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clips.d.ts","sourceRoot":"","sources":["../src/clips.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * WAVE Cloud Switcher SDK
3
+ *
4
+ * Control cloud video switchers programmatically.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ import type { WaveClient } from './client';
9
+ export interface SwitcherInstance {
10
+ readonly id: string;
11
+ readonly name: string;
12
+ readonly status: 'idle' | 'live' | 'error';
13
+ readonly inputCount: number;
14
+ readonly outputCount: number;
15
+ readonly resolution: '720p' | '1080p' | '4k';
16
+ readonly frameRate: 30 | 60;
17
+ readonly tier: 'starter' | 'pro' | 'enterprise';
18
+ readonly createdAt: string;
19
+ }
20
+ export interface SwitcherSource {
21
+ readonly id: string;
22
+ readonly type: 'webrtc' | 'srt' | 'ndi' | 'rtmp' | 'hls';
23
+ readonly label: string;
24
+ readonly status: 'connecting' | 'active' | 'error' | 'disconnected';
25
+ }
26
+ export interface TransitionOptions {
27
+ readonly type: 'cut' | 'mix' | 'wipe' | 'dip' | 'dve';
28
+ readonly durationMs?: number;
29
+ readonly wipePattern?: string;
30
+ }
31
+ export interface CreateSwitcherOptions {
32
+ readonly name: string;
33
+ readonly resolution?: '720p' | '1080p' | '4k';
34
+ readonly frameRate?: 30 | 60;
35
+ }
36
+ export interface AddSourceOptions {
37
+ readonly type: 'webrtc' | 'srt' | 'ndi' | 'rtmp';
38
+ readonly label: string;
39
+ readonly config: Record<string, unknown>;
40
+ }
41
+ export interface AddOutputOptions {
42
+ readonly type: 'rtmp' | 'srt' | 'hls' | 'recording';
43
+ readonly config: Record<string, unknown>;
44
+ }
45
+ export declare class CloudSwitcherAPI {
46
+ private readonly client;
47
+ private readonly basePath;
48
+ constructor(client: WaveClient);
49
+ create(options: CreateSwitcherOptions): Promise<SwitcherInstance>;
50
+ get(switcherId: string): Promise<SwitcherInstance>;
51
+ list(): Promise<SwitcherInstance[]>;
52
+ remove(switcherId: string): Promise<void>;
53
+ addSource(switcherId: string, options: AddSourceOptions): Promise<SwitcherSource>;
54
+ removeSource(switcherId: string, sourceId: string): Promise<void>;
55
+ switchTo(switcherId: string, sourceId: string): Promise<void>;
56
+ transition(switcherId: string, options: TransitionOptions): Promise<void>;
57
+ addOutput(switcherId: string, options: AddOutputOptions): Promise<{
58
+ id: string;
59
+ }>;
60
+ startStreaming(switcherId: string, outputId: string): Promise<void>;
61
+ stopStreaming(switcherId: string, outputId: string): Promise<void>;
62
+ startRecording(switcherId: string): Promise<void>;
63
+ stopRecording(switcherId: string): Promise<void>;
64
+ }
65
+ export declare function createCloudSwitcherAPI(client: WaveClient): CloudSwitcherAPI;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-switcher.d.ts","sourceRoot":"","sources":["../src/cloud-switcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * WAVE SDK - Collab API
3
+ *
4
+ * Real-time collaboration features for projects and media.
5
+ *
6
+ * NOTE: This is a client SDK. All authorization checks are performed server-side.
7
+ * The API will return 403 Forbidden if the user lacks required permissions.
8
+ */
9
+ import type { PaginationParams, Timestamps, Metadata } from './client';
10
+ /**
11
+ * Collaboration room status
12
+ */
13
+ export type RoomStatus = 'active' | 'closed' | 'archived';
14
+ /**
15
+ * Participant role in collaboration
16
+ */
17
+ export type ParticipantRole = 'owner' | 'editor' | 'commenter' | 'viewer';
18
+ /**
19
+ * Presence status
20
+ */
21
+ export type PresenceStatus = 'online' | 'away' | 'busy' | 'offline';
22
+ /**
23
+ * Collaboration room
24
+ */
25
+ export interface CollabRoom extends Timestamps {
26
+ id: string;
27
+ organization_id: string;
28
+ name: string;
29
+ description?: string;
30
+ resource_type: 'project' | 'clip' | 'document' | 'stream';
31
+ resource_id: string;
32
+ status: RoomStatus;
33
+ owner_id: string;
34
+ max_participants?: number;
35
+ participant_count: number;
36
+ allow_anonymous: boolean;
37
+ settings: RoomSettings;
38
+ metadata?: Metadata;
39
+ }
40
+ /**
41
+ * Room settings
42
+ */
43
+ export interface RoomSettings {
44
+ voice_enabled: boolean;
45
+ video_enabled: boolean;
46
+ screen_share_enabled: boolean;
47
+ chat_enabled: boolean;
48
+ annotations_enabled: boolean;
49
+ playback_sync_enabled: boolean;
50
+ recording_enabled: boolean;
51
+ }
52
+ /**
53
+ * Room participant
54
+ */
55
+ export interface Participant extends Timestamps {
56
+ id: string;
57
+ room_id: string;
58
+ user_id: string;
59
+ display_name: string;
60
+ avatar_url?: string;
61
+ role: ParticipantRole;
62
+ presence: PresenceStatus;
63
+ cursor_position?: CursorPosition;
64
+ selection?: Selection;
65
+ permissions: ParticipantPermissions;
66
+ }
67
+ /**
68
+ * Participant permissions
69
+ */
70
+ export interface ParticipantPermissions {
71
+ can_edit: boolean;
72
+ can_comment: boolean;
73
+ can_invite: boolean;
74
+ can_export: boolean;
75
+ can_control_playback: boolean;
76
+ }
77
+ /**
78
+ * Cursor position for presence
79
+ */
80
+ export interface CursorPosition {
81
+ x: number;
82
+ y: number;
83
+ element_id?: string;
84
+ timestamp: number;
85
+ }
86
+ /**
87
+ * Selection range
88
+ */
89
+ export interface Selection {
90
+ start: number;
91
+ end: number;
92
+ element_id?: string;
93
+ type: 'text' | 'timeline' | 'range';
94
+ }
95
+ /**
96
+ * Comment
97
+ */
98
+ export interface Comment extends Timestamps {
99
+ id: string;
100
+ room_id: string;
101
+ user_id: string;
102
+ display_name: string;
103
+ avatar_url?: string;
104
+ content: string;
105
+ timestamp?: number;
106
+ element_id?: string;
107
+ position?: {
108
+ x: number;
109
+ y: number;
110
+ };
111
+ parent_id?: string;
112
+ resolved: boolean;
113
+ reactions: Reaction[];
114
+ }
115
+ /**
116
+ * Reaction
117
+ */
118
+ export interface Reaction {
119
+ emoji: string;
120
+ user_id: string;
121
+ created_at: string;
122
+ }
123
+ /**
124
+ * Annotation
125
+ */
126
+ export interface Annotation extends Timestamps {
127
+ id: string;
128
+ room_id: string;
129
+ user_id: string;
130
+ type: 'drawing' | 'text' | 'shape' | 'arrow' | 'highlight';
131
+ timestamp?: number;
132
+ duration?: number;
133
+ data: Record<string, unknown>;
134
+ color: string;
135
+ visible: boolean;
136
+ }
137
+ /**
138
+ * Create room request
139
+ */
140
+ export interface CreateRoomRequest {
141
+ name: string;
142
+ description?: string;
143
+ resource_type: 'project' | 'clip' | 'document' | 'stream';
144
+ resource_id: string;
145
+ max_participants?: number;
146
+ allow_anonymous?: boolean;
147
+ settings?: Partial<RoomSettings>;
148
+ metadata?: Metadata;
149
+ }
150
+ /**
151
+ * Update room request
152
+ */
153
+ export interface UpdateRoomRequest {
154
+ name?: string;
155
+ description?: string;
156
+ settings?: Partial<RoomSettings>;
157
+ metadata?: Metadata;
158
+ }
159
+ /**
160
+ * Invite request
161
+ */
162
+ export interface InviteRequest {
163
+ email?: string;
164
+ user_id?: string;
165
+ role: ParticipantRole;
166
+ message?: string;
167
+ }
168
+ /**
169
+ * List rooms params
170
+ */
171
+ export interface ListRoomsParams extends PaginationParams {
172
+ status?: RoomStatus;
173
+ resource_type?: 'project' | 'clip' | 'document' | 'stream';
174
+ resource_id?: string;
175
+ }
176
+ /**
177
+ * Collab API client
178
+ *
179
+ * All operations require appropriate permissions. Authorization is enforced
180
+ * server-side - the API returns 403 if the authenticated user lacks access.
181
+ *
182
+ * @example
183
+ * ```typescript
184
+ * import { WaveClient } from '@wave/sdk';
185
+ * import { CollabAPI } from '@wave/sdk/collab';
186
+ *
187
+ * const client = new WaveClient({ apiKey: 'your-api-key' });
188
+ * const collab = new CollabAPI(client);
189
+ *
190
+ * // Create a collaboration room for a project
191
+ * const room = await collab.createRoom({
192
+ * name: 'Project Review',
193
+ * resource_type: 'project',
194
+ * resource_id: 'project_123',
195
+ * settings: {
196
+ * voice_enabled: true,
197
+ * annotations_enabled: true,
198
+ * },
199
+ * });
200
+ *
201
+ * // Get join token for real-time connection
202
+ * const token = await collab.getJoinToken(room.id);
203
+ * ```
204
+ */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collab-types.d.ts","sourceRoot":"","sources":["../src/collab-types.ts"],"names":[],"mappings":"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"}