@xmaxai/sdk 0.1.0

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 (38) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/LICENSE +21 -0
  3. package/README.md +201 -0
  4. package/dist/chunk-67XSD3QJ.js +2673 -0
  5. package/dist/chunk-67XSD3QJ.js.map +1 -0
  6. package/dist/chunk-74ZZWUPI.js +992 -0
  7. package/dist/chunk-74ZZWUPI.js.map +1 -0
  8. package/dist/chunk-EGNRAZ5U.js +432 -0
  9. package/dist/chunk-EGNRAZ5U.js.map +1 -0
  10. package/dist/chunk-PLU2YVAS.js +414 -0
  11. package/dist/chunk-PLU2YVAS.js.map +1 -0
  12. package/dist/experimental/index.cjs +3897 -0
  13. package/dist/experimental/index.cjs.map +1 -0
  14. package/dist/experimental/index.d.cts +2 -0
  15. package/dist/experimental/index.d.ts +2 -0
  16. package/dist/experimental/index.js +5 -0
  17. package/dist/experimental/index.js.map +1 -0
  18. package/dist/index-BIUk_kvb.d.ts +350 -0
  19. package/dist/index-Dai62Sos.d.cts +350 -0
  20. package/dist/index.cjs +5109 -0
  21. package/dist/index.cjs.map +1 -0
  22. package/dist/index.d.cts +235 -0
  23. package/dist/index.d.ts +235 -0
  24. package/dist/index.js +359 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/local-publish-diagnostics-ABLL56IT.js +79 -0
  27. package/dist/local-publish-diagnostics-ABLL56IT.js.map +1 -0
  28. package/dist/react/index.cjs +4304 -0
  29. package/dist/react/index.cjs.map +1 -0
  30. package/dist/react/index.d.cts +112 -0
  31. package/dist/react/index.d.ts +112 -0
  32. package/dist/react/index.js +817 -0
  33. package/dist/react/index.js.map +1 -0
  34. package/dist/rtc-manager-gYDkADGw.d.cts +412 -0
  35. package/dist/rtc-manager-gYDkADGw.d.ts +412 -0
  36. package/dist/video-file-stream-UXJ6TNIB.js +4 -0
  37. package/dist/video-file-stream-UXJ6TNIB.js.map +1 -0
  38. package/package.json +82 -0
@@ -0,0 +1,235 @@
1
+ import { S as SDKLocale, a as SDKI18n, b as XmaxOpenClient } from './rtc-manager-gYDkADGw.cjs';
2
+ export { A as ACTIVE_STATUS, C as ClientOptions, c as CosSts, L as LocalPublishReadyResult, M as MEDIA_TIME_EPSILON_S, d as MEDIA_TIME_LOOP_JUMP_S, e as MOBILE_PUBLISH_MAX_WIDTH_PX, f as ModelExtra, P as PUBLISH_COLD_FRAME_TIMEOUT_MS, g as PUBLISH_COLD_MIN_FRAMES, h as PUBLISH_COLD_WARMUP_MS, i as PUBLISH_START_FRAME_TIMEOUT_MS, j as PUBLISH_START_MIN_FRAMES, k as PUBLISH_WARM_SKIP_MS, l as RTC_PUBLISH_FPS, m as RTC_PUBLISH_FPS_MOBILE, n as RTC_PUBLISH_FPS_WEB, o as RTC_PUBLISH_FRAME_INTERVAL_MS, p as RTC_PUBLISH_FRAME_INTERVAL_S, q as RemoteSeiReceivedPayload, r as ResolveRtcPublishFpsOptions, s as RtcJoinInfo, t as RtcLogEntry, u as RtcManager, R as RtcStateSnapshot, v as SDKMessages, w as Session, x as StsCredentials, U as UploadImageResult, y as UploadVideoResult, z as XMAX_OPEN_API_BASE_URLS, B as XMAX_OPEN_API_PRODUCTION_BASE_URL, D as XmaxLogEntry, E as XmaxSdkRegion, F as createSDKI18n, G as getDefaultMessages, H as isMobilePublishEnvironment, I as resolveRtcPublishFps, J as resolveRtcPublishFrameIntervalS } from './rtc-manager-gYDkADGw.cjs';
3
+ export { D as DragTrackController, a as DragTrackControllerOptions, N as NativeCameraStream, O as OpenNativeCameraStreamOptions, R as RealtimeConnectOptions, b as RealtimeInitialState, c as RealtimeModel, d as RealtimePrewarmHandle, e as RealtimePromptState, f as RealtimeRestartOptions, g as RealtimeSession, h as RealtimeSetImageOptions, i as RealtimeSetInput, j as RealtimeSetModeOptions, k as RemoteViewHost, X as XmaxClient, l as XmaxClientFiles, m as XmaxClientOptions, n as XmaxRealtimeSession, o as createDragTrackController, p as createNativeCameraStream, q as createRemoteViewHost, r as createXmaxClient, s as getContentRect, t as mapTargetPointToCanvas, u as mapViewportPointToCoordinateSpace, v as models, w as observeDragSurfaceVideoSync, x as openNativeCameraStream, y as syncDragSurfaceToVideo } from './index-Dai62Sos.cjs';
4
+
5
+ /**
6
+ * Open API business error codes (46xxx) mapped to user-facing messages.
7
+ * Source: Open API v1 error code tables. Codes not listed here fall back to a
8
+ * generic retry message (see `errors.requestRetry`).
9
+ */
10
+ type LocalizedMessage = Record<SDKLocale, string>;
11
+ declare const API_ERROR_MESSAGES: Record<string, LocalizedMessage>;
12
+ /** Resolve a business error code to a localized message, or `undefined` if unmapped. */
13
+ declare function resolveApiErrorMessage(code: string | number | null | undefined, locale: SDKLocale): string | undefined;
14
+
15
+ type StartRtcRoomEvent = {
16
+ event: "start";
17
+ user_id?: string;
18
+ uid?: string;
19
+ session_uid?: string;
20
+ params: {
21
+ model: string;
22
+ size: [number, number];
23
+ prompt: string;
24
+ ref_image_path?: string;
25
+ ref_image?: string;
26
+ static_generate?: boolean;
27
+ } & Record<string, unknown>;
28
+ };
29
+ type StopRtcRoomEvent = {
30
+ event: "stop";
31
+ user_id?: string;
32
+ session_uid?: string;
33
+ };
34
+ type TracksRtcRoomEvent = {
35
+ event: "tracks";
36
+ user_id?: string;
37
+ uid?: string;
38
+ session_uid?: string;
39
+ tracks: Array<[number, number]>;
40
+ };
41
+ type RtcRoomEvent = StartRtcRoomEvent | StopRtcRoomEvent | TracksRtcRoomEvent;
42
+ /** Generation task id sent as `uid` / `session_uid` in RTC room events. */
43
+ declare function createTaskUid(): string;
44
+ declare function createStartRtcRoomEvent(input: {
45
+ userId?: string;
46
+ uid?: string;
47
+ sessionUid?: string;
48
+ model: string;
49
+ size: [number, number];
50
+ prompt?: string;
51
+ refImagePath?: string;
52
+ refImage?: string;
53
+ /** MoX instant — static image generation that follows drag tracks. */
54
+ staticGenerate?: boolean;
55
+ extraParams?: Record<string, unknown>;
56
+ }): StartRtcRoomEvent;
57
+ declare function createStopRtcRoomEvent(input: {
58
+ userId?: string;
59
+ sessionUid?: string;
60
+ }): StopRtcRoomEvent;
61
+ declare function createTracksRtcRoomEvent(input: {
62
+ userId?: string;
63
+ uid?: string;
64
+ sessionUid?: string;
65
+ tracks: Array<[number, number]>;
66
+ }): TracksRtcRoomEvent;
67
+
68
+ type VideoInputHealth = {
69
+ currentTime: number;
70
+ duration: number;
71
+ paused: boolean;
72
+ ended: boolean;
73
+ readyState: number;
74
+ trackReadyState: string;
75
+ trackMuted: boolean;
76
+ stalled: boolean;
77
+ timeSinceAdvanceMs: number;
78
+ };
79
+
80
+ type VideoFileStreamOptions = {
81
+ loop?: boolean;
82
+ muted?: boolean;
83
+ playbackRate?: number;
84
+ /** @deprecated Upload video is playback-driven; fps is measured from the source file. */
85
+ fps?: number;
86
+ /** @deprecated Mobile/web publish fps is derived from the uploaded file. */
87
+ mobile?: boolean;
88
+ targetSize?: [number, number];
89
+ i18n?: SDKI18n;
90
+ onHealthReport?: (health: VideoInputHealth) => void;
91
+ healthIntervalMs?: number;
92
+ /** Log each canvas draw (proxy for frames fed to RTC captureStream). */
93
+ logPublishFrames?: boolean;
94
+ };
95
+ type VideoFileStream = {
96
+ url: string;
97
+ /** Same MediaStream pushed to RTC; bind to preview via srcObject for WYSIWYG. */
98
+ previewStream: MediaStream;
99
+ /** Capture-only element; pinned off-screen. */
100
+ videoEl: HTMLVideoElement;
101
+ videoTrack: MediaStreamTrack;
102
+ /** Measured source fps — encoder ceiling hint only. */
103
+ fps: number;
104
+ /** Session publish dimensions (native source size by default). */
105
+ width: number;
106
+ height: number;
107
+ /** Original media dimensions before scale. */
108
+ sourceWidth: number;
109
+ sourceHeight: number;
110
+ destroy: () => void;
111
+ };
112
+ declare function createVideoFileStream(fileOrUrl: File | string, options?: VideoFileStreamOptions): Promise<VideoFileStream>;
113
+
114
+ type ImageFileStreamOptions = VideoFileStreamOptions;
115
+ declare function createImageFileStream(fileOrUrl: File | string, options?: ImageFileStreamOptions): Promise<VideoFileStream>;
116
+ declare function isImageMediaFile(file: File | string): boolean;
117
+ declare function isVideoMediaFile(file: File | string): boolean;
118
+ declare function createMediaFileStream(fileOrUrl: File | string, options?: ImageFileStreamOptions): Promise<VideoFileStream>;
119
+
120
+ type MirroredCameraStream = {
121
+ /** Original camera stream from getUserMedia. */
122
+ sourceStream: MediaStream;
123
+ /** Horizontally flipped stream for RTC publish and local preview. */
124
+ previewStream: MediaStream;
125
+ videoTrack: MediaStreamTrack;
126
+ videoEl: HTMLVideoElement;
127
+ width: number;
128
+ height: number;
129
+ destroy: () => void;
130
+ };
131
+ type MirroredCameraStreamOptions = {
132
+ fps?: number;
133
+ /** Mobile H5 uses 24fps publish; web uses 30fps. Auto-detected from viewport when omitted. */
134
+ mobile?: boolean;
135
+ i18n?: SDKI18n;
136
+ /** Session target size — center-crop + scale before publish (WYSIWYG with preview). */
137
+ targetSize?: [number, number];
138
+ /** Horizontal flip before crop/scale. Defaults to true for legacy mirror helper. */
139
+ mirror?: boolean;
140
+ };
141
+ type OpenMirroredCameraStreamOptions = MirroredCameraStreamOptions & {
142
+ width?: number;
143
+ height?: number;
144
+ frameRate?: number;
145
+ facingMode?: ConstrainDOMString;
146
+ };
147
+ declare function openMirroredCameraStream(options?: OpenMirroredCameraStreamOptions): Promise<MirroredCameraStream>;
148
+ /** Canvas pipeline: optional mirror + center-crop/scale to session size for WYSIWYG publish. */
149
+ declare function createPublishCameraStream(sourceStream: MediaStream, options?: MirroredCameraStreamOptions): Promise<MirroredCameraStream>;
150
+ declare function createMirroredCameraStreamFromMediaStream(sourceStream: MediaStream, options?: MirroredCameraStreamOptions): Promise<MirroredCameraStream>;
151
+
152
+ /** UI preview frames are fixed 16:9 per design; session `size` is separate (see resolveUploadVideoSize). */
153
+ declare const PREVIEW_CONTAINER_ASPECT_RATIO: number;
154
+ /** CSS `aspect-ratio` string for a session target size — keeps UI layout aligned with passed `size`. */
155
+ declare function resolvePreviewAspectRatio(size: [number, number]): string;
156
+ /** Default landscape session size under the 832 rule (16:9). */
157
+ declare const DEFAULT_SESSION_TARGET_SIZE: [number, number];
158
+ /**
159
+ * Upload publish size — keep source resolution (even dimensions for H.264).
160
+ * Avoids canvas downscale blur; camera path still uses {@link resolveUploadVideoSize}.
161
+ */
162
+ declare function resolveUploadPublishSize(sourceWidth: number, sourceHeight: number): [number, number];
163
+ /**
164
+ * Adaptive RTC encode/session size — mirrors iOS `rtcVideoSize(for:)`.
165
+ * Keeps the base width and scales height for wide sources; tall sources use the full base size.
166
+ */
167
+ declare function resolveAdaptiveRtcVideoSize(sourceWidth: number, sourceHeight: number, baseSize?: [number, number]): [number, number];
168
+ /**
169
+ * Session video size (camera + upload): scale from base edge 832, cap at 9:16 or 16:9.
170
+ * Portrait keeps width at 832; landscape keeps height at 832; the other edge is 32-aligned.
171
+ */
172
+ declare function resolveUploadVideoSize(sourceWidth: number, sourceHeight: number): [number, number];
173
+ declare function resolveSessionTargetSize(input: {
174
+ localVideoSize?: {
175
+ width: number;
176
+ height: number;
177
+ } | null;
178
+ overrideSize?: [number, number];
179
+ }): [number, number];
180
+
181
+ type CameraCaptureOptions = {
182
+ width: number;
183
+ height: number;
184
+ frameRate?: number;
185
+ facingMode?: ConstrainDOMString;
186
+ };
187
+ /** Camera control fields from Media Capture extensions; not in default lib.dom typings. */
188
+ type CameraTrackCapabilities = MediaTrackCapabilities & {
189
+ focusMode?: string[];
190
+ focusDistance?: {
191
+ min: number;
192
+ max: number;
193
+ step?: number;
194
+ };
195
+ zoom?: {
196
+ min: number;
197
+ max: number;
198
+ step?: number;
199
+ };
200
+ };
201
+ type CameraTrackSettings = MediaTrackSettings & {
202
+ focusDistance?: number;
203
+ };
204
+ type CameraEnvironmentIssue = 'insecure-context' | 'api-unavailable';
205
+ /** Detect blockers before calling getUserMedia (HTTP hides mediaDevices in Chrome). */
206
+ declare function getCameraEnvironmentIssue(): CameraEnvironmentIssue | null;
207
+ type CameraAccessErrorKind = 'not-found' | 'not-allowed' | 'permission-denied' | 'in-use' | 'overconstrained' | 'unsupported' | 'capture-unsupported' | 'generic';
208
+ /** True for getUserMedia failures that should prompt the user to open/allow the device camera. */
209
+ declare function isCameraAccessError(error: unknown): boolean;
210
+ /** Map getUserMedia / camera pipeline failures to a stable category for user-facing copy. */
211
+ declare function classifyCameraAccessError(error: unknown): CameraAccessErrorKind | null;
212
+ /**
213
+ * Best-effort stabilization for rear camera AF hunting when objects move in frame.
214
+ * - Android: lock focus after initial settle (single-shot, else manual distance).
215
+ * - iOS / others: lock zoom to 1x when supported (Safari 17+); focus APIs are unavailable.
216
+ */
217
+ declare function stabilizeCameraVideoTrack(track: MediaStreamTrack, options?: {
218
+ facingMode?: ConstrainDOMString;
219
+ }): Promise<void>;
220
+ /** Prefer target resolution via min constraints; fall back to ideal-only when unsupported. */
221
+ declare function requestCameraMediaStream(options: CameraCaptureOptions): Promise<MediaStream>;
222
+
223
+ declare function resolveRefImageUrl(client: XmaxOpenClient, input: File | string): Promise<string>;
224
+
225
+ declare const PREVIEW_UPLOAD_LAYOUT_ATTR = "data-preview-upload-layout";
226
+ /** Mobile upload output fit — `portrait` (h-full w-auto) or `landscape` (w-full h-auto). */
227
+ declare const PREVIEW_UPLOAD_FIT_ATTR = "data-preview-upload-fit";
228
+ declare const PREVIEW_OUTPUT_LAYOUT_ATTR = "data-preview-output-layout";
229
+ declare const PREVIEW_CONTAIN_ATTR = "data-preview-contain";
230
+ declare const PREVIEW_COVER_ATTR = "data-preview-cover";
231
+ /** Match Playground upload overlay — portrait: h-full w-auto; landscape: w-full h-auto; centered clip. */
232
+ declare function applyUploadPreviewMediaLayout(container: HTMLElement): void;
233
+ declare function observeUploadPreviewMediaLayout(container: HTMLElement): () => void;
234
+
235
+ export { API_ERROR_MESSAGES, type CameraAccessErrorKind, type CameraCaptureOptions, type CameraEnvironmentIssue, type CameraTrackCapabilities, type CameraTrackSettings, DEFAULT_SESSION_TARGET_SIZE, type ImageFileStreamOptions, type MirroredCameraStream, type MirroredCameraStreamOptions, type OpenMirroredCameraStreamOptions, PREVIEW_CONTAINER_ASPECT_RATIO, PREVIEW_CONTAIN_ATTR, PREVIEW_COVER_ATTR, PREVIEW_OUTPUT_LAYOUT_ATTR, PREVIEW_UPLOAD_FIT_ATTR, PREVIEW_UPLOAD_LAYOUT_ATTR, type RtcRoomEvent, SDKI18n, SDKLocale, type StartRtcRoomEvent, type StopRtcRoomEvent, type TracksRtcRoomEvent, type VideoFileStream, type VideoFileStreamOptions, XmaxOpenClient, applyUploadPreviewMediaLayout, classifyCameraAccessError, createImageFileStream, createMediaFileStream, createMirroredCameraStreamFromMediaStream, createPublishCameraStream, createStartRtcRoomEvent, createStopRtcRoomEvent, createTaskUid, createTracksRtcRoomEvent, createVideoFileStream, getCameraEnvironmentIssue, isCameraAccessError, isImageMediaFile, isVideoMediaFile, observeUploadPreviewMediaLayout, openMirroredCameraStream, requestCameraMediaStream, resolveAdaptiveRtcVideoSize, resolveApiErrorMessage, resolvePreviewAspectRatio, resolveRefImageUrl, resolveSessionTargetSize, resolveUploadPublishSize, resolveUploadVideoSize, stabilizeCameraVideoTrack };
@@ -0,0 +1,235 @@
1
+ import { S as SDKLocale, a as SDKI18n, b as XmaxOpenClient } from './rtc-manager-gYDkADGw.js';
2
+ export { A as ACTIVE_STATUS, C as ClientOptions, c as CosSts, L as LocalPublishReadyResult, M as MEDIA_TIME_EPSILON_S, d as MEDIA_TIME_LOOP_JUMP_S, e as MOBILE_PUBLISH_MAX_WIDTH_PX, f as ModelExtra, P as PUBLISH_COLD_FRAME_TIMEOUT_MS, g as PUBLISH_COLD_MIN_FRAMES, h as PUBLISH_COLD_WARMUP_MS, i as PUBLISH_START_FRAME_TIMEOUT_MS, j as PUBLISH_START_MIN_FRAMES, k as PUBLISH_WARM_SKIP_MS, l as RTC_PUBLISH_FPS, m as RTC_PUBLISH_FPS_MOBILE, n as RTC_PUBLISH_FPS_WEB, o as RTC_PUBLISH_FRAME_INTERVAL_MS, p as RTC_PUBLISH_FRAME_INTERVAL_S, q as RemoteSeiReceivedPayload, r as ResolveRtcPublishFpsOptions, s as RtcJoinInfo, t as RtcLogEntry, u as RtcManager, R as RtcStateSnapshot, v as SDKMessages, w as Session, x as StsCredentials, U as UploadImageResult, y as UploadVideoResult, z as XMAX_OPEN_API_BASE_URLS, B as XMAX_OPEN_API_PRODUCTION_BASE_URL, D as XmaxLogEntry, E as XmaxSdkRegion, F as createSDKI18n, G as getDefaultMessages, H as isMobilePublishEnvironment, I as resolveRtcPublishFps, J as resolveRtcPublishFrameIntervalS } from './rtc-manager-gYDkADGw.js';
3
+ export { D as DragTrackController, a as DragTrackControllerOptions, N as NativeCameraStream, O as OpenNativeCameraStreamOptions, R as RealtimeConnectOptions, b as RealtimeInitialState, c as RealtimeModel, d as RealtimePrewarmHandle, e as RealtimePromptState, f as RealtimeRestartOptions, g as RealtimeSession, h as RealtimeSetImageOptions, i as RealtimeSetInput, j as RealtimeSetModeOptions, k as RemoteViewHost, X as XmaxClient, l as XmaxClientFiles, m as XmaxClientOptions, n as XmaxRealtimeSession, o as createDragTrackController, p as createNativeCameraStream, q as createRemoteViewHost, r as createXmaxClient, s as getContentRect, t as mapTargetPointToCanvas, u as mapViewportPointToCoordinateSpace, v as models, w as observeDragSurfaceVideoSync, x as openNativeCameraStream, y as syncDragSurfaceToVideo } from './index-BIUk_kvb.js';
4
+
5
+ /**
6
+ * Open API business error codes (46xxx) mapped to user-facing messages.
7
+ * Source: Open API v1 error code tables. Codes not listed here fall back to a
8
+ * generic retry message (see `errors.requestRetry`).
9
+ */
10
+ type LocalizedMessage = Record<SDKLocale, string>;
11
+ declare const API_ERROR_MESSAGES: Record<string, LocalizedMessage>;
12
+ /** Resolve a business error code to a localized message, or `undefined` if unmapped. */
13
+ declare function resolveApiErrorMessage(code: string | number | null | undefined, locale: SDKLocale): string | undefined;
14
+
15
+ type StartRtcRoomEvent = {
16
+ event: "start";
17
+ user_id?: string;
18
+ uid?: string;
19
+ session_uid?: string;
20
+ params: {
21
+ model: string;
22
+ size: [number, number];
23
+ prompt: string;
24
+ ref_image_path?: string;
25
+ ref_image?: string;
26
+ static_generate?: boolean;
27
+ } & Record<string, unknown>;
28
+ };
29
+ type StopRtcRoomEvent = {
30
+ event: "stop";
31
+ user_id?: string;
32
+ session_uid?: string;
33
+ };
34
+ type TracksRtcRoomEvent = {
35
+ event: "tracks";
36
+ user_id?: string;
37
+ uid?: string;
38
+ session_uid?: string;
39
+ tracks: Array<[number, number]>;
40
+ };
41
+ type RtcRoomEvent = StartRtcRoomEvent | StopRtcRoomEvent | TracksRtcRoomEvent;
42
+ /** Generation task id sent as `uid` / `session_uid` in RTC room events. */
43
+ declare function createTaskUid(): string;
44
+ declare function createStartRtcRoomEvent(input: {
45
+ userId?: string;
46
+ uid?: string;
47
+ sessionUid?: string;
48
+ model: string;
49
+ size: [number, number];
50
+ prompt?: string;
51
+ refImagePath?: string;
52
+ refImage?: string;
53
+ /** MoX instant — static image generation that follows drag tracks. */
54
+ staticGenerate?: boolean;
55
+ extraParams?: Record<string, unknown>;
56
+ }): StartRtcRoomEvent;
57
+ declare function createStopRtcRoomEvent(input: {
58
+ userId?: string;
59
+ sessionUid?: string;
60
+ }): StopRtcRoomEvent;
61
+ declare function createTracksRtcRoomEvent(input: {
62
+ userId?: string;
63
+ uid?: string;
64
+ sessionUid?: string;
65
+ tracks: Array<[number, number]>;
66
+ }): TracksRtcRoomEvent;
67
+
68
+ type VideoInputHealth = {
69
+ currentTime: number;
70
+ duration: number;
71
+ paused: boolean;
72
+ ended: boolean;
73
+ readyState: number;
74
+ trackReadyState: string;
75
+ trackMuted: boolean;
76
+ stalled: boolean;
77
+ timeSinceAdvanceMs: number;
78
+ };
79
+
80
+ type VideoFileStreamOptions = {
81
+ loop?: boolean;
82
+ muted?: boolean;
83
+ playbackRate?: number;
84
+ /** @deprecated Upload video is playback-driven; fps is measured from the source file. */
85
+ fps?: number;
86
+ /** @deprecated Mobile/web publish fps is derived from the uploaded file. */
87
+ mobile?: boolean;
88
+ targetSize?: [number, number];
89
+ i18n?: SDKI18n;
90
+ onHealthReport?: (health: VideoInputHealth) => void;
91
+ healthIntervalMs?: number;
92
+ /** Log each canvas draw (proxy for frames fed to RTC captureStream). */
93
+ logPublishFrames?: boolean;
94
+ };
95
+ type VideoFileStream = {
96
+ url: string;
97
+ /** Same MediaStream pushed to RTC; bind to preview via srcObject for WYSIWYG. */
98
+ previewStream: MediaStream;
99
+ /** Capture-only element; pinned off-screen. */
100
+ videoEl: HTMLVideoElement;
101
+ videoTrack: MediaStreamTrack;
102
+ /** Measured source fps — encoder ceiling hint only. */
103
+ fps: number;
104
+ /** Session publish dimensions (native source size by default). */
105
+ width: number;
106
+ height: number;
107
+ /** Original media dimensions before scale. */
108
+ sourceWidth: number;
109
+ sourceHeight: number;
110
+ destroy: () => void;
111
+ };
112
+ declare function createVideoFileStream(fileOrUrl: File | string, options?: VideoFileStreamOptions): Promise<VideoFileStream>;
113
+
114
+ type ImageFileStreamOptions = VideoFileStreamOptions;
115
+ declare function createImageFileStream(fileOrUrl: File | string, options?: ImageFileStreamOptions): Promise<VideoFileStream>;
116
+ declare function isImageMediaFile(file: File | string): boolean;
117
+ declare function isVideoMediaFile(file: File | string): boolean;
118
+ declare function createMediaFileStream(fileOrUrl: File | string, options?: ImageFileStreamOptions): Promise<VideoFileStream>;
119
+
120
+ type MirroredCameraStream = {
121
+ /** Original camera stream from getUserMedia. */
122
+ sourceStream: MediaStream;
123
+ /** Horizontally flipped stream for RTC publish and local preview. */
124
+ previewStream: MediaStream;
125
+ videoTrack: MediaStreamTrack;
126
+ videoEl: HTMLVideoElement;
127
+ width: number;
128
+ height: number;
129
+ destroy: () => void;
130
+ };
131
+ type MirroredCameraStreamOptions = {
132
+ fps?: number;
133
+ /** Mobile H5 uses 24fps publish; web uses 30fps. Auto-detected from viewport when omitted. */
134
+ mobile?: boolean;
135
+ i18n?: SDKI18n;
136
+ /** Session target size — center-crop + scale before publish (WYSIWYG with preview). */
137
+ targetSize?: [number, number];
138
+ /** Horizontal flip before crop/scale. Defaults to true for legacy mirror helper. */
139
+ mirror?: boolean;
140
+ };
141
+ type OpenMirroredCameraStreamOptions = MirroredCameraStreamOptions & {
142
+ width?: number;
143
+ height?: number;
144
+ frameRate?: number;
145
+ facingMode?: ConstrainDOMString;
146
+ };
147
+ declare function openMirroredCameraStream(options?: OpenMirroredCameraStreamOptions): Promise<MirroredCameraStream>;
148
+ /** Canvas pipeline: optional mirror + center-crop/scale to session size for WYSIWYG publish. */
149
+ declare function createPublishCameraStream(sourceStream: MediaStream, options?: MirroredCameraStreamOptions): Promise<MirroredCameraStream>;
150
+ declare function createMirroredCameraStreamFromMediaStream(sourceStream: MediaStream, options?: MirroredCameraStreamOptions): Promise<MirroredCameraStream>;
151
+
152
+ /** UI preview frames are fixed 16:9 per design; session `size` is separate (see resolveUploadVideoSize). */
153
+ declare const PREVIEW_CONTAINER_ASPECT_RATIO: number;
154
+ /** CSS `aspect-ratio` string for a session target size — keeps UI layout aligned with passed `size`. */
155
+ declare function resolvePreviewAspectRatio(size: [number, number]): string;
156
+ /** Default landscape session size under the 832 rule (16:9). */
157
+ declare const DEFAULT_SESSION_TARGET_SIZE: [number, number];
158
+ /**
159
+ * Upload publish size — keep source resolution (even dimensions for H.264).
160
+ * Avoids canvas downscale blur; camera path still uses {@link resolveUploadVideoSize}.
161
+ */
162
+ declare function resolveUploadPublishSize(sourceWidth: number, sourceHeight: number): [number, number];
163
+ /**
164
+ * Adaptive RTC encode/session size — mirrors iOS `rtcVideoSize(for:)`.
165
+ * Keeps the base width and scales height for wide sources; tall sources use the full base size.
166
+ */
167
+ declare function resolveAdaptiveRtcVideoSize(sourceWidth: number, sourceHeight: number, baseSize?: [number, number]): [number, number];
168
+ /**
169
+ * Session video size (camera + upload): scale from base edge 832, cap at 9:16 or 16:9.
170
+ * Portrait keeps width at 832; landscape keeps height at 832; the other edge is 32-aligned.
171
+ */
172
+ declare function resolveUploadVideoSize(sourceWidth: number, sourceHeight: number): [number, number];
173
+ declare function resolveSessionTargetSize(input: {
174
+ localVideoSize?: {
175
+ width: number;
176
+ height: number;
177
+ } | null;
178
+ overrideSize?: [number, number];
179
+ }): [number, number];
180
+
181
+ type CameraCaptureOptions = {
182
+ width: number;
183
+ height: number;
184
+ frameRate?: number;
185
+ facingMode?: ConstrainDOMString;
186
+ };
187
+ /** Camera control fields from Media Capture extensions; not in default lib.dom typings. */
188
+ type CameraTrackCapabilities = MediaTrackCapabilities & {
189
+ focusMode?: string[];
190
+ focusDistance?: {
191
+ min: number;
192
+ max: number;
193
+ step?: number;
194
+ };
195
+ zoom?: {
196
+ min: number;
197
+ max: number;
198
+ step?: number;
199
+ };
200
+ };
201
+ type CameraTrackSettings = MediaTrackSettings & {
202
+ focusDistance?: number;
203
+ };
204
+ type CameraEnvironmentIssue = 'insecure-context' | 'api-unavailable';
205
+ /** Detect blockers before calling getUserMedia (HTTP hides mediaDevices in Chrome). */
206
+ declare function getCameraEnvironmentIssue(): CameraEnvironmentIssue | null;
207
+ type CameraAccessErrorKind = 'not-found' | 'not-allowed' | 'permission-denied' | 'in-use' | 'overconstrained' | 'unsupported' | 'capture-unsupported' | 'generic';
208
+ /** True for getUserMedia failures that should prompt the user to open/allow the device camera. */
209
+ declare function isCameraAccessError(error: unknown): boolean;
210
+ /** Map getUserMedia / camera pipeline failures to a stable category for user-facing copy. */
211
+ declare function classifyCameraAccessError(error: unknown): CameraAccessErrorKind | null;
212
+ /**
213
+ * Best-effort stabilization for rear camera AF hunting when objects move in frame.
214
+ * - Android: lock focus after initial settle (single-shot, else manual distance).
215
+ * - iOS / others: lock zoom to 1x when supported (Safari 17+); focus APIs are unavailable.
216
+ */
217
+ declare function stabilizeCameraVideoTrack(track: MediaStreamTrack, options?: {
218
+ facingMode?: ConstrainDOMString;
219
+ }): Promise<void>;
220
+ /** Prefer target resolution via min constraints; fall back to ideal-only when unsupported. */
221
+ declare function requestCameraMediaStream(options: CameraCaptureOptions): Promise<MediaStream>;
222
+
223
+ declare function resolveRefImageUrl(client: XmaxOpenClient, input: File | string): Promise<string>;
224
+
225
+ declare const PREVIEW_UPLOAD_LAYOUT_ATTR = "data-preview-upload-layout";
226
+ /** Mobile upload output fit — `portrait` (h-full w-auto) or `landscape` (w-full h-auto). */
227
+ declare const PREVIEW_UPLOAD_FIT_ATTR = "data-preview-upload-fit";
228
+ declare const PREVIEW_OUTPUT_LAYOUT_ATTR = "data-preview-output-layout";
229
+ declare const PREVIEW_CONTAIN_ATTR = "data-preview-contain";
230
+ declare const PREVIEW_COVER_ATTR = "data-preview-cover";
231
+ /** Match Playground upload overlay — portrait: h-full w-auto; landscape: w-full h-auto; centered clip. */
232
+ declare function applyUploadPreviewMediaLayout(container: HTMLElement): void;
233
+ declare function observeUploadPreviewMediaLayout(container: HTMLElement): () => void;
234
+
235
+ export { API_ERROR_MESSAGES, type CameraAccessErrorKind, type CameraCaptureOptions, type CameraEnvironmentIssue, type CameraTrackCapabilities, type CameraTrackSettings, DEFAULT_SESSION_TARGET_SIZE, type ImageFileStreamOptions, type MirroredCameraStream, type MirroredCameraStreamOptions, type OpenMirroredCameraStreamOptions, PREVIEW_CONTAINER_ASPECT_RATIO, PREVIEW_CONTAIN_ATTR, PREVIEW_COVER_ATTR, PREVIEW_OUTPUT_LAYOUT_ATTR, PREVIEW_UPLOAD_FIT_ATTR, PREVIEW_UPLOAD_LAYOUT_ATTR, type RtcRoomEvent, SDKI18n, SDKLocale, type StartRtcRoomEvent, type StopRtcRoomEvent, type TracksRtcRoomEvent, type VideoFileStream, type VideoFileStreamOptions, XmaxOpenClient, applyUploadPreviewMediaLayout, classifyCameraAccessError, createImageFileStream, createMediaFileStream, createMirroredCameraStreamFromMediaStream, createPublishCameraStream, createStartRtcRoomEvent, createStopRtcRoomEvent, createTaskUid, createTracksRtcRoomEvent, createVideoFileStream, getCameraEnvironmentIssue, isCameraAccessError, isImageMediaFile, isVideoMediaFile, observeUploadPreviewMediaLayout, openMirroredCameraStream, requestCameraMediaStream, resolveAdaptiveRtcVideoSize, resolveApiErrorMessage, resolvePreviewAspectRatio, resolveRefImageUrl, resolveSessionTargetSize, resolveUploadPublishSize, resolveUploadVideoSize, stabilizeCameraVideoTrack };