@byteplus/amk-editor 0.0.0-beta.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 (88) hide show
  1. package/LICENSE +11 -0
  2. package/README.md +217 -0
  3. package/dist/amk-editor.d.ts +411 -0
  4. package/dist/amk-modal.d.ts +16 -0
  5. package/dist/api/client.d.ts +63 -0
  6. package/dist/api/preset-library.d.ts +18 -0
  7. package/dist/api/project.d.ts +47 -0
  8. package/dist/asr-progress-modal-view.d.ts +9 -0
  9. package/dist/asr-progress-modal.d.ts +11 -0
  10. package/dist/asr-provider.d.ts +17 -0
  11. package/dist/asr-text-layout.d.ts +4 -0
  12. package/dist/assets/asr-subtitle-dark.svg +3 -0
  13. package/dist/assets/asr-subtitle.svg +3 -0
  14. package/dist/assets/export-empty-dark.svg +66 -0
  15. package/dist/assets/export-empty-ellipse749.svg +3 -0
  16. package/dist/assets/export-empty-ellipse750.svg +3 -0
  17. package/dist/assets/export-empty-ellipse751.svg +3 -0
  18. package/dist/assets/export-empty-ellipse753.svg +3 -0
  19. package/dist/assets/export-empty-img2.svg +10 -0
  20. package/dist/assets/export-empty-img3.svg +10 -0
  21. package/dist/assets/export-empty-subtract.svg +14 -0
  22. package/dist/assets/export-modal-ai.png +0 -0
  23. package/dist/assets/export-modal-close.png +0 -0
  24. package/dist/assets/export-modal-info.png +0 -0
  25. package/dist/assets/export-modal-question.png +0 -0
  26. package/dist/assets/export-modal-select.png +0 -0
  27. package/dist/assets/export-task-error.svg +5 -0
  28. package/dist/assets/export-task-loading.svg +6 -0
  29. package/dist/assets/header-back.png +0 -0
  30. package/dist/assets/header-close.png +0 -0
  31. package/dist/assets/header-close.svg +5 -0
  32. package/dist/assets/header-edit.png +0 -0
  33. package/dist/assets/header-export-download.svg +5 -0
  34. package/dist/assets/header-export-history.svg +5 -0
  35. package/dist/assets/header-export.png +0 -0
  36. package/dist/assets/import-local.svg +3 -0
  37. package/dist/assets/import-menu-chevron-down.svg +3 -0
  38. package/dist/assets/import-menu-local.svg +3 -0
  39. package/dist/assets/import-menu-system-arrow.svg +3 -0
  40. package/dist/assets/import-menu-system-cloud.svg +3 -0
  41. package/dist/assets/import-menu-url.svg +3 -0
  42. package/dist/assets/import-url.svg +10 -0
  43. package/dist/assets/project-loading.svg +6 -0
  44. package/dist/byteplus-export-source-adapter.d.ts +9 -0
  45. package/dist/config-validation.d.ts +3 -0
  46. package/dist/confirm-modal-view.d.ts +16 -0
  47. package/dist/confirm-modal.d.ts +14 -0
  48. package/dist/distribution.d.ts +16 -0
  49. package/dist/export-modal-view.d.ts +13 -0
  50. package/dist/export-modal.d.ts +63 -0
  51. package/dist/export-project-adapter.d.ts +14 -0
  52. package/dist/export-task-polling.d.ts +15 -0
  53. package/dist/header.d.ts +57 -0
  54. package/dist/i18n/index.d.ts +17 -0
  55. package/dist/i18n/keys.d.ts +107 -0
  56. package/dist/i18n/locales/en-US.d.ts +2 -0
  57. package/dist/i18n/locales/zh-CN.d.ts +2 -0
  58. package/dist/import-actions-dropdown-view.d.ts +15 -0
  59. package/dist/import-actions.d.ts +29 -0
  60. package/dist/index.d.ts +9 -0
  61. package/dist/index.js +2907 -0
  62. package/dist/legacy-export-adapter.d.ts +7 -0
  63. package/dist/local-upload-modal-view.d.ts +13 -0
  64. package/dist/local-upload-modal.d.ts +13 -0
  65. package/dist/material-source.d.ts +5 -0
  66. package/dist/modal-page-overscroll.d.ts +4 -0
  67. package/dist/project-bootstrap.d.ts +11 -0
  68. package/dist/public-types.d.ts +147 -0
  69. package/dist/react-mount.d.ts +10 -0
  70. package/dist/refresh-play-info.d.ts +34 -0
  71. package/dist/remote-edit-param-schema.d.ts +29 -0
  72. package/dist/runtime/veveditor.d.ts +6 -0
  73. package/dist/task-polling.d.ts +9 -0
  74. package/dist/task-query-status.d.ts +10 -0
  75. package/dist/toast.d.ts +36 -0
  76. package/dist/tos-upload.d.ts +74 -0
  77. package/dist/types.d.ts +344 -0
  78. package/dist/upload-queue.d.ts +6 -0
  79. package/dist/url-upload-modal-view.d.ts +13 -0
  80. package/dist/url-upload-modal.d.ts +12 -0
  81. package/dist/utils/material-extract.d.ts +62 -0
  82. package/dist/utils/signed-media-url-expiration.d.ts +2 -0
  83. package/dist/veveditor.css +1 -0
  84. package/dist/vod-openapi.d.ts +17 -0
  85. package/dist/vod-upload.d.ts +65 -0
  86. package/dist/xg-player-style-isolation.d.ts +6 -0
  87. package/package.json +43 -0
  88. package/third_party_notice.txt +1207 -0
@@ -0,0 +1,344 @@
1
+ import type { VeVeditorI18nOptions, VeVeditorMaterialItem, VeVeditorMaterialOptions, VeVeditorOptions, VeVeditorTheme, VeVeditorDecodeOptions } from './public-types';
2
+ export type Theme = VeVeditorTheme;
3
+ export interface MaterialItem extends VeVeditorMaterialItem {
4
+ /** 业务侧素材主键;上传 / 更新 / 删除必填。 */
5
+ source_material_id: string;
6
+ /** Editing API 生成的服务端 id;业务方不必传,传了也不会入库。 */
7
+ material_id?: string;
8
+ /** poster 抽帧任务 ID;任务完成或不再使用时显式写回 null。 */
9
+ poster_task_id?: string | null;
10
+ /** sprite 抽帧任务 ID;任务完成或不再使用时显式写回 null。 */
11
+ sprite_task_id?: string | null;
12
+ }
13
+ export type SystemMaterialItem = Omit<Partial<MaterialItem>, 'source_material_id' | 'source'> & {
14
+ source_material_id: string;
15
+ source?: string;
16
+ type: NonNullable<MaterialItem['type']>;
17
+ name?: string;
18
+ };
19
+ /** 可由外部工具栏复用的素材导入入口。 */
20
+ export type AmkMaterialImportType = 'local' | 'url' | 'system';
21
+ /** Optional callbacks scoped to one externally triggered material import. */
22
+ export interface AmkMaterialImportRequestOptions {
23
+ /** Called with persisted materials only for this request. */
24
+ onMaterialsImported?: (materials: MaterialItem[]) => void | Promise<void>;
25
+ }
26
+ /**
27
+ * 抽帧产物的稳定存储身份。TOS 产物会保存完整 `tos://bucket/key`,
28
+ * SDK 用它在签名 URL 过期后重新签发;非 TOS 业务仍可使用自定义字段。
29
+ */
30
+ export interface RecommendedExtractStorageFields {
31
+ /** 封面图稳定身份;内置 TOS 链路保存 `tos://bucket/key`。 */
32
+ poster_storage_key?: string;
33
+ /** 与 sprite.storeurls 等长的稳定身份数组;内置链路保存 tos:// 或 vod:// 地址。 */
34
+ sprite_storage_keys?: string[];
35
+ }
36
+ export interface PersistExtractUrlsResult {
37
+ /** 转存后的长期可访问 URL,须与回调入参 urls 等长。 */
38
+ urls: string[];
39
+ /**
40
+ * 随转存结果写回素材的业务字段,SDK 原样合并并持久化。
41
+ * 字段名和结构完全由业务决定;SDK 不读取推荐字段,也不限制自定义嵌套结构。
42
+ */
43
+ materialPatch?: Partial<MaterialItem>;
44
+ }
45
+ export interface MaterialConfig extends VeVeditorMaterialOptions<MaterialItem> {
46
+ /**
47
+ * 本地单文件上传流程的并发上限(正整数);未配置时保持不限并发。
48
+ * 同一编辑器跨批次共享;覆盖上传、元信息补齐及入库,不含后台抽帧。
49
+ * 适用于 onUploadFile 和内置上传,不控制旧 onUploadMaterial 的内部并发。
50
+ * 此值不是每秒请求数,也不控制单文件分片并发。
51
+ */
52
+ uploadConcurrency?: number;
53
+ uploadAccept?: string;
54
+ /** Fires when any material import flow enters or leaves its uploading phase. */
55
+ onUploadStatusChange?: (uploading: boolean) => void;
56
+ /**
57
+ * 上传单个本地文件并返回一条待入库素材。
58
+ * 多文件选择时由 SDK 并发调用;每个文件完成后会立即入库并替换对应占位卡。
59
+ * 单项失败不会回滚已成功的其他文件。
60
+ * 视频缺 duration / width / height、音频缺 duration、图片缺 width / height 时,
61
+ * SDK 会在入库前使用返回素材中的 HTTP(S) 地址自动探测并补齐。
62
+ */
63
+ onUploadFile?: (file: File) => Promise<MaterialItem> | MaterialItem;
64
+ /**
65
+ * @deprecated 请使用 onUploadFile。旧回调仍可用,但只能在整批返回后统一入库。
66
+ * 返回素材缺少必需元信息时,SDK 同样会在入库前自动探测并补齐。
67
+ */
68
+ onUploadMaterial?: (files: File[]) => Promise<MaterialItem[]> | MaterialItem[];
69
+ /** 返回素材缺少必需元信息时,SDK 会在入库前按媒体类型自动探测并补齐。 */
70
+ onUploadUrlMaterial?: (urls: string[]) => Promise<MaterialItem[]> | MaterialItem[];
71
+ /**
72
+ * 从业务资产库选择素材。业务方自行实现弹窗、列表查询与勾选,只返回选中数组。
73
+ * 同时配置 TOS `storage.media_output_destination` 与 `storage.getUploadSTS` 时,
74
+ * `tos://bucket/key` 条目会由 SDK 自动签名和补齐元信息;否则使用业务提供的
75
+ * HTTP(S) 长期地址,缺少地址时交给 `onRefreshPlayInfo` 补齐。
76
+ * 非 TOS 条目缺少必需元信息时,也会使用其 HTTP(S) 地址自动探测并补齐。
77
+ * 返回 `undefined` / `null` / `[]` 视为取消或未选择,不提示失败。
78
+ */
79
+ onUploadFromSystem?: () => Promise<SystemMaterialItem[] | undefined | null> | SystemMaterialItem[] | undefined | null;
80
+ /**
81
+ * 素材成功入库后回调(已合并 Editing API 返回的 `material_id`)。
82
+ * 本地 / URL / 资产库三条导入链路都会走到这里;失败或用户取消不会触发。
83
+ */
84
+ onMaterialsImported?: (materials: MaterialItem[]) => void | Promise<void>;
85
+ /**
86
+ * 刷新播放信息。未配置时用素材库已有字段;
87
+ * 配置后:入参为待刷新素材列表,支持批量;返回补丁优先按 material_id 匹配,
88
+ * source_material_id 次之,两者都未返回时才按数组顺序兜底,
89
+ * 返回单条或数组补丁覆盖原素材的播放字段(url / poster / sprite / source_material_id 等)。
90
+ * 补丁不得改写 material_id(服务端字段,业务传了也不入库)。
91
+ */
92
+ onRefreshPlayInfo?: (materials: MaterialItem[]) => Partial<MaterialItem> | Partial<MaterialItem>[] | Promise<Partial<MaterialItem> | Partial<MaterialItem>[]>;
93
+ /**
94
+ * 抽帧得到的临时 http(约 24h)转存成长效地址。
95
+ * SDK 会先用临时链上屏/落盘,再后台调用本回调换链;失败则保留临时链。
96
+ * 未配置则只落盘临时链;签名明确过期且图片加载失败时,SDK 最多刷新一次播放地址,不重抽。
97
+ * 推荐返回 urls + materialPatch,把刷新 URL 所需的 storage key 或其他业务字段写入素材。
98
+ * SDK 不限制其他 materialPatch 字段;poster_storage_key / sprite_storage_keys
99
+ * 中的 `tos://` 地址会作为后续自动重签依据。
100
+ * 兼容只返回 string[],但该形式无法附带业务字段。
101
+ */
102
+ onPersistExtractUrls?: (params: {
103
+ kind: 'poster' | 'sprite';
104
+ urls: string[];
105
+ material: MaterialItem;
106
+ }) => Promise<PersistExtractUrlsResult | string[]> | PersistExtractUrlsResult | string[];
107
+ }
108
+ export interface AmkEditorHeaderTitleUpdateSuccess {
109
+ readonly projectId: string;
110
+ /** Project title persisted successfully by the Editing API. */
111
+ readonly title: string;
112
+ }
113
+ export interface AmkEditorHeaderConfig {
114
+ show?: boolean;
115
+ /** 是否展示导出任务列表入口,默认开启。 */
116
+ exportTaskList?: boolean;
117
+ /**
118
+ * When set, the header is rendered into this element instead of inside the
119
+ * editor root. Use this to place a full-width header above a host split layout.
120
+ */
121
+ mount?: HTMLElement;
122
+ onBack?: () => void;
123
+ onClose?: () => void;
124
+ /** Fired only after the project title is persisted successfully. */
125
+ onTitleUpdateSuccess?: (change: AmkEditorHeaderTitleUpdateSuccess) => void;
126
+ }
127
+ export interface AmkEditorExportConfig {
128
+ /** 临时兼容旧 vibe-editing-common 导出;默认 false,后续可移除。 */
129
+ legacy?: boolean;
130
+ /**
131
+ * 导出弹窗是否展示「视频画质增强」。
132
+ * 默认 false(不展示);设为 true 后用户可在弹窗内开关增强。
133
+ */
134
+ qualityEnhancement?: boolean;
135
+ /** 每次导出任务成功创建后触发。 */
136
+ onTaskCreated?: (event: AmkExportTaskCreatedEvent) => void | Promise<void>;
137
+ }
138
+ /** 浏览器直传 TOS 使用的临时凭证;字段可直接用于初始化 TOS Browser SDK。 */
139
+ export interface AmkEditorUploadSTSCredentials {
140
+ accessKeyId: string;
141
+ accessKeySecret: string;
142
+ /** 临时凭证必填;使用长期 AK/SK 做本地联调时可省略。 */
143
+ stsToken?: string;
144
+ /** 凭证过期时间,支持 ISO 8601、秒时间戳或毫秒时间戳;用于限制签名 URL 有效期。 */
145
+ expiration?: string | number;
146
+ }
147
+ /** 点播 Web 上传及 OpenAPI 发布/播放查询共用的短期 STS 凭证。 */
148
+ export interface AmkEditorVodUploadToken {
149
+ AccessKeyId: string;
150
+ SecretAccessKey: string;
151
+ SessionToken: string;
152
+ ExpiredTime: string;
153
+ CurrentTime: string;
154
+ }
155
+ /** 按 Vid 解析的可播放信息。 */
156
+ export interface AmkEditorVodPlayInfo {
157
+ url: string;
158
+ poster?: string;
159
+ duration?: number;
160
+ width?: number;
161
+ height?: number;
162
+ }
163
+ /** SDK 内部点播上传与播放地址解析配置,由 storage 目标和临时凭证回调生成。 */
164
+ export interface AmkEditorVodUploadConfig {
165
+ /** 应用云平台分配的 appId,仅用于上传质量监控。 */
166
+ appId: number;
167
+ /** 火山引擎点播空间名。 */
168
+ spaceName: string;
169
+ /** 当前用户稳定标识,用于上传任务隔离与断点续传。 */
170
+ userId: string;
171
+ /** 由宿主服务端签发短期点播 STS。 */
172
+ getUploadToken: () => AmkEditorVodUploadToken | Promise<AmkEditorVodUploadToken>;
173
+ /**
174
+ * 由宿主服务端发布媒资(如需要)并按 Vid 返回 HTTP(S) 播放地址。
175
+ * SDK 会用该回调处理新上传素材、已入库 VOD 素材和 VOD 导出结果的播放地址。
176
+ */
177
+ getPlayInfo: (vid: string, kind?: 'vid') => AmkEditorVodPlayInfo | Promise<AmkEditorVodPlayInfo>;
178
+ }
179
+ /**
180
+ * 产物 / 主动上传的存储目标。
181
+ * `media_output_destination` 用于 SDK 内置上传的目标定位。火山版会默认将其写入会产生媒体产物的
182
+ * AMK tools 请求体以启用产物转存;BytePlus AMK 暂不支持产物转存,因此 BytePlus 构建不会把
183
+ * 该字段发送给 AMK 接口;该配置仍用于内置 BytePlus VOD 上传与播放地址解析,
184
+ * 并作为后续 BytePlus TOS 接入入口。
185
+ * @see https://docs.volcengine.com/docs/6448/2386113
186
+ */
187
+ export interface AmkEditorStorageConfig {
188
+ /**
189
+ * 处理产物存储目标。支持 `vod://<空间名>` 或 `tos://<桶名>/<可选子目录>`。
190
+ * TOS 本地上传及自动封面/雪碧图产物使用配置的目录,不自动追加项目 ID。
191
+ * 必须与 `getUploadSTS` 同时配置;只配置其中任意一个都会在初始化时报错。
192
+ * 配置后任务结果中的 url 为对应资源地址,而不是临时下载链;当返回
193
+ * `tos://bucket/key` 或 `vod://space/Vid` 时,SDK 会分别通过 TOS 签名或
194
+ * VOD 播放信息接口换取 HTTP(S) 预览地址。
195
+ */
196
+ media_output_destination?: string;
197
+ /**
198
+ * TOS 目标返回 TOS STS,VOD 目标返回含上传、发布和播放查询权限的短期 STS;
199
+ * 必须与 media_output_destination 同时配置;只配置其中任意一个都会在初始化时报错。
200
+ * SDK 按目标协议选择内置上传与播放地址刷新链路。
201
+ * 本地上传优先使用业务配置的 `material.onUploadFile` / `material.onUploadMaterial`;
202
+ * 两者均未配置时,SDK 才按目标协议使用内置 VOD / TOS 上传。
203
+ * 业务服务端应返回最小权限、短有效期凭证,
204
+ * 浏览器端不得保存客户长期 AK/SK。
205
+ * 未同时配置 TOS `media_output_destination` 时,SDK 不会仅凭素材
206
+ * `source_material_id` 或兜底 `source` 的 `tos://` 前缀接管播放地址;业务长期 URL 会原样使用,
207
+ * 缺少 URL 时可由 `material.onRefreshPlayInfo` 补齐。
208
+ */
209
+ getUploadSTS?: () => AmkEditorUploadSTSCredentials | AmkEditorVodUploadToken | Promise<AmkEditorUploadSTSCredentials | AmkEditorVodUploadToken>;
210
+ }
211
+ export interface ExportVideoParams {
212
+ videoName: string;
213
+ qualityEnhancement: boolean;
214
+ /** 画质增强完成后是否同时保留未增强的原始导出成片。 */
215
+ keepOriginal?: boolean;
216
+ enhancementVersion: 'standard' | 'professional' | 'large-model';
217
+ resolution: 'original' | '720p' | '1080p' | '2k' | '4k';
218
+ frameRate: number;
219
+ format: 'mp4' | 'mp3';
220
+ codec: 'h264' | 'h265' | 'vp9' | 'mp3';
221
+ }
222
+ /** Result of {@link AmkEditor.requestExport} for Agent/frontend-tool callers. */
223
+ export type AmkExportRequestResult = {
224
+ status: 'success';
225
+ taskId: string;
226
+ } | {
227
+ status: 'cancel';
228
+ } | {
229
+ status: 'failed';
230
+ error: string;
231
+ };
232
+ export interface AmkExportTaskCreatedEvent {
233
+ taskId: string;
234
+ params: ExportVideoParams;
235
+ requestId?: string;
236
+ }
237
+ export interface VeVeditorInstance {
238
+ destroy: () => void;
239
+ on?: (eventName: string, handler: (...args: any[]) => void) => void;
240
+ off?: (eventName: string, handler: (...args: any[]) => void) => void;
241
+ getTrack?: () => any[];
242
+ /** 获取当前合成画布的 data URL;未初始化时返回 null,native 渲染模式下抛错。 */
243
+ getFrame?: (options?: {
244
+ type?: string;
245
+ quality?: number;
246
+ }) => string | null;
247
+ setCanvas?: (canvas: {
248
+ Width: number;
249
+ Height: number;
250
+ BackgroundColor?: string;
251
+ }) => Promise<void>;
252
+ setTrack?: (track: any[], options?: {
253
+ recordHistory?: boolean;
254
+ }) => Promise<void>;
255
+ setTrackElementMarker?: (elementId: string, marker: {
256
+ key?: string;
257
+ content: string;
258
+ position?: number;
259
+ loading?: boolean;
260
+ } | null, options?: {
261
+ clearKey?: string;
262
+ }) => void;
263
+ getTrackElementMarkers?: (elementId: string) => Array<{
264
+ key?: string;
265
+ content: string;
266
+ position?: number;
267
+ loading?: boolean;
268
+ }>;
269
+ setTrackElementBadge?: (elementId: string, badge: {
270
+ type: 'spinner';
271
+ content?: string;
272
+ position?: number;
273
+ } | null) => void;
274
+ getTrackElementBadge?: (elementId: string) => unknown;
275
+ getSketchItems?: () => MaterialItem[];
276
+ getEditParam?: () => Record<string, unknown>;
277
+ decodeVideoPoster?: (url: string, options?: {
278
+ signal?: AbortSignal;
279
+ imageWidth?: number;
280
+ }) => Promise<Blob | null>;
281
+ addSketchItems?: (items: MaterialItem[]) => void;
282
+ setSketchItems?: (items: MaterialItem[]) => void;
283
+ [key: string]: unknown;
284
+ }
285
+ /** 内置 get/update 工程快照(不导出给宿主配置) */
286
+ /** 工程接口返回的元信息;保留服务端扩展字段,供宿主及后续 UI 使用。 */
287
+ export type AmkProjectInfo = {
288
+ project_id: string;
289
+ name: string;
290
+ description?: string;
291
+ [key: string]: unknown;
292
+ };
293
+ export type AmkProjectSnapshot = {
294
+ projectInfo?: AmkProjectInfo;
295
+ projectName?: string;
296
+ materials?: MaterialItem[];
297
+ editParam?: Record<string, unknown>;
298
+ };
299
+ /** AMK 资源面板开关:false=关闭(不透传);true/不传=展示(透传 AMK 内置资源)。 */
300
+ type AmkResourceOptionTypes = {
301
+ font: boolean;
302
+ wordArt: boolean;
303
+ textAnimation: boolean;
304
+ transition: boolean;
305
+ filter: boolean;
306
+ effect: boolean;
307
+ };
308
+ type AmkInheritedVeVeditorOptions = Omit<VeVeditorOptions<MaterialConfig, VeVeditorI18nOptions, AmkResourceOptionTypes>, 'initialData' | 'recording' | 'onSketchItemsChange' | 'onNodePreviewError' | 'onPreviewNodeRefresh' | 'onBeforeUndo' | 'onBeforeRedo' | 'onBeforeTimestampMount' | 'onBeforeKeyframeMount' | 'onTrackChanged' | 'onRecordingUpload' | 'decode'>;
309
+ export type AmkEditorDecodeOptions = VeVeditorDecodeOptions;
310
+ /** 每次 AMK 请求前动态获取、原样透传给 endpoint 的业务请求头。 */
311
+ export type AmkEditorGetHeaders = () => Readonly<Record<string, string>> | undefined | Promise<Readonly<Record<string, string>> | undefined>;
312
+ export interface AmkEditorOptions extends AmkInheritedVeVeditorOptions {
313
+ toolbar?: AmkInheritedVeVeditorOptions['toolbar'] & {
314
+ /** 字幕识别后端:火山默认 asr-subtitles,BytePlus 默认 maas。 */
315
+ asr?: {
316
+ provider?: import('./asr-provider').AmkAsrProvider;
317
+ };
318
+ };
319
+ projectId: string;
320
+ /** AMK Editing API 的业务代理地址。 */
321
+ endpoint: string;
322
+ /** 接入方标识,用于埋点来源和问题归因;缺省时使用 sdk。 */
323
+ source?: string;
324
+ /** 每次请求前调用;返回值不解析、不改写,仅透传给 endpoint。 */
325
+ getHeaders?: AmkEditorGetHeaders;
326
+ header?: AmkEditorHeaderConfig;
327
+ export?: AmkEditorExportConfig;
328
+ /** @deprecated 请改用 export.onTaskCreated。 */
329
+ onExportTaskCreated?: (event: AmkExportTaskCreatedEvent) => void | Promise<void>;
330
+ getLicenseUrl?: string | (() => string | Promise<string>);
331
+ decode?: AmkEditorDecodeOptions;
332
+ /** 产物 / 主动上传的存储目标,包括 TOS / VOD。 */
333
+ storage?: AmkEditorStorageConfig;
334
+ }
335
+ export interface AmkEditorInternalConfig {
336
+ projectId: string;
337
+ endpoint: string;
338
+ }
339
+ /** 挂载 veveditor 用的内部配置(含组装后的 initialData 等,不作为宿主 API) */
340
+ export interface AmkEditorConfig extends AmkEditorOptions {
341
+ initialData?: AmkProjectSnapshot;
342
+ __amkEditor: AmkEditorInternalConfig;
343
+ }
344
+ export {};
@@ -0,0 +1,6 @@
1
+ /** 文件级 FIFO 队列;一个名额覆盖上传、元信息补齐和入库。 */
2
+ export declare function createUploadQueue(concurrency?: number): {
3
+ run<T>(task: () => Promise<T> | T): Promise<T>;
4
+ destroy(): void;
5
+ };
6
+ export type UploadQueue = ReturnType<typeof createUploadQueue>;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import type { AmkI18nInstance } from './i18n';
3
+ export interface UrlUploadModalViewProps {
4
+ visible: boolean;
5
+ popupContainer: HTMLElement;
6
+ t: AmkI18nInstance['t'];
7
+ /** 确认后弹窗立即关闭;上传过程由外部 Message 提示 */
8
+ onConfirm: (urls: string[]) => void;
9
+ onClose: () => void;
10
+ }
11
+ /** 支持逗号 / 换行分隔,得到回调给业务方的 url 数组 */
12
+ export declare function splitUrls(input: string): string[];
13
+ export declare function UrlUploadModalView({ visible, popupContainer, t, onConfirm, onClose, }: UrlUploadModalViewProps): React.ReactElement;
@@ -0,0 +1,12 @@
1
+ import type { AmkI18nInstance } from './i18n';
2
+ export interface CreateUrlUploadModalOptions {
3
+ container: HTMLElement;
4
+ t: AmkI18nInstance['t'];
5
+ onConfirm: (urls: string[]) => void;
6
+ }
7
+ export interface UrlUploadModalController {
8
+ open: () => void;
9
+ close: () => void;
10
+ destroy: () => void;
11
+ }
12
+ export declare function createUrlUploadModal(options: CreateUrlUploadModalOptions): UrlUploadModalController;
@@ -0,0 +1,62 @@
1
+ import type { MaterialItem } from '../types';
2
+ export declare const VIDEO_POSTER_EXTRACT_PARAMS: {
3
+ readonly snapshot_type: "SpecifiedFrames";
4
+ readonly specified_frames: readonly [0];
5
+ readonly scale_long: 1280;
6
+ readonly scale_short: 720;
7
+ };
8
+ export declare function resolveSpriteTimeInterval(duration: unknown): number;
9
+ export declare function buildSpriteExtractParams(duration: unknown): {
10
+ snapshot_type: string;
11
+ time_interval: number;
12
+ snapshot_limit: number;
13
+ scale_long: number;
14
+ enable_sprite: boolean;
15
+ sprite_rows: number;
16
+ sprite_cols: number;
17
+ };
18
+ export type SpriteState = {
19
+ ready: boolean;
20
+ pendingTaskId?: string;
21
+ };
22
+ /**
23
+ * 素材 `sprite`:
24
+ * - object `{ storeurls, capturenum }`:已完成;链接是否失效由实际网络请求判断
25
+ * - 进行中任务放在 `sprite_task_id`;旧 `sprite` 字符串仅用于一次性迁移
26
+ * - 缺省:需要新建任务
27
+ */
28
+ export declare function resolveSpriteState(material: MaterialItem): SpriteState;
29
+ /** 可落盘的封面:接口返回的 http(s) URL */
30
+ export declare function isPersistablePosterUrl(value: unknown): boolean;
31
+ /** 仅会话内使用的封面:前端解码 dataURL,不落盘 */
32
+ export declare function isRuntimeOnlyPosterUrl(value: unknown): boolean;
33
+ /** http poster;有效性由实际网络请求判断 */
34
+ export declare function isPosterAssetReady(material: MaterialItem): boolean;
35
+ /** poster 任务只能存在独立字段;旧 poster 非 http/dataURL 字符串仅用于一次性迁移。 */
36
+ export declare function resolvePosterTaskId(material: MaterialItem): string | undefined;
37
+ export declare function isExtractableVideoMaterial(material: MaterialItem): boolean;
38
+ export declare function resolveMaterialMediaUrl(material: MaterialItem): string;
39
+ export type MaterialExtractActions = {
40
+ url: string;
41
+ /** 需要新建 sprite 抽帧任务,任务 ID 写入 sprite_task_id */
42
+ createSpriteTask: boolean;
43
+ /** 已有 taskId,从 sprite_task_id 继续轮询 */
44
+ resumeSpriteTaskId?: string;
45
+ /** 已有 poster 任务,从 poster_task_id 继续轮询。 */
46
+ resumePosterTaskId?: string;
47
+ /**
48
+ * 需要抓封面:缺有效 http poster,或需恢复进行中的 poster_task_id。
49
+ * 前端 DataURL 仅作会话预览,不单独驱动 capturePoster。
50
+ */
51
+ capturePoster: boolean;
52
+ };
53
+ /**
54
+ * 纯判断:单个素材要不要建 sprite 任务 / 恢复轮询 / 抓封面。
55
+ * - enableThumbnailDecode(前端缩略图)开启时不发起 sprite 接口任务
56
+ * - poster / sprite 缺省时触发重抽;已有 URL 的有效性由实际网络请求判断
57
+ */
58
+ export declare function planMaterialExtractActions(params: {
59
+ material: MaterialItem;
60
+ useFrontendThumbnails: boolean;
61
+ hasPosterCache: boolean;
62
+ }): MaterialExtractActions | null;
@@ -0,0 +1,2 @@
1
+ /** 只根据签名参数判断明确过期;图片 onerror 本身无法可靠区分 403/404/CORS。 */
2
+ export declare function isSignedMediaUrlExpired(urlValue: unknown, now?: number): boolean;