@nurama/sdk 0.0.0-stage → 1.4.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 (220) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +1080 -2
  4. package/dist/BotClient.d.ts +66 -0
  5. package/dist/BotClient.d.ts.map +1 -0
  6. package/dist/BotClient.js +68 -0
  7. package/dist/BotClient.js.map +1 -0
  8. package/dist/NuramaClient.d.ts +448 -0
  9. package/dist/NuramaClient.d.ts.map +1 -0
  10. package/dist/NuramaClient.js +864 -0
  11. package/dist/NuramaClient.js.map +1 -0
  12. package/dist/browser/nurama-bot-sdk.js +11780 -0
  13. package/dist/browser/nurama-bot-sdk.min.js +1 -0
  14. package/dist/browser/nurama-sdk.js +11732 -0
  15. package/dist/browser/nurama-sdk.min.js +1 -0
  16. package/dist/routes/ai.d.ts +280 -0
  17. package/dist/routes/ai.d.ts.map +1 -0
  18. package/dist/routes/ai.js +173 -0
  19. package/dist/routes/ai.js.map +1 -0
  20. package/dist/routes/asset.d.ts +493 -0
  21. package/dist/routes/asset.d.ts.map +1 -0
  22. package/dist/routes/asset.js +848 -0
  23. package/dist/routes/asset.js.map +1 -0
  24. package/dist/routes/auth.d.ts +218 -0
  25. package/dist/routes/auth.d.ts.map +1 -0
  26. package/dist/routes/auth.js +454 -0
  27. package/dist/routes/auth.js.map +1 -0
  28. package/dist/routes/blogPosts.d.ts +17 -0
  29. package/dist/routes/blogPosts.d.ts.map +1 -0
  30. package/dist/routes/blogPosts.js +29 -0
  31. package/dist/routes/blogPosts.js.map +1 -0
  32. package/dist/routes/board.d.ts +187 -0
  33. package/dist/routes/board.d.ts.map +1 -0
  34. package/dist/routes/board.js +270 -0
  35. package/dist/routes/board.js.map +1 -0
  36. package/dist/routes/bot.d.ts +147 -0
  37. package/dist/routes/bot.d.ts.map +1 -0
  38. package/dist/routes/bot.js +157 -0
  39. package/dist/routes/bot.js.map +1 -0
  40. package/dist/routes/chat.d.ts +842 -0
  41. package/dist/routes/chat.d.ts.map +1 -0
  42. package/dist/routes/chat.js +863 -0
  43. package/dist/routes/chat.js.map +1 -0
  44. package/dist/routes/chatAi.d.ts +51 -0
  45. package/dist/routes/chatAi.d.ts.map +1 -0
  46. package/dist/routes/chatAi.js +109 -0
  47. package/dist/routes/chatAi.js.map +1 -0
  48. package/dist/routes/config.d.ts +11 -0
  49. package/dist/routes/config.d.ts.map +1 -0
  50. package/dist/routes/config.js +24 -0
  51. package/dist/routes/config.js.map +1 -0
  52. package/dist/routes/convo.d.ts +169 -0
  53. package/dist/routes/convo.d.ts.map +1 -0
  54. package/dist/routes/convo.js +284 -0
  55. package/dist/routes/convo.js.map +1 -0
  56. package/dist/routes/credits.d.ts +82 -0
  57. package/dist/routes/credits.d.ts.map +1 -0
  58. package/dist/routes/credits.js +49 -0
  59. package/dist/routes/credits.js.map +1 -0
  60. package/dist/routes/device.d.ts +74 -0
  61. package/dist/routes/device.d.ts.map +1 -0
  62. package/dist/routes/device.js +122 -0
  63. package/dist/routes/device.js.map +1 -0
  64. package/dist/routes/folder.d.ts +75 -0
  65. package/dist/routes/folder.d.ts.map +1 -0
  66. package/dist/routes/folder.js +99 -0
  67. package/dist/routes/folder.js.map +1 -0
  68. package/dist/routes/invite.d.ts +61 -0
  69. package/dist/routes/invite.d.ts.map +1 -0
  70. package/dist/routes/invite.js +86 -0
  71. package/dist/routes/invite.js.map +1 -0
  72. package/dist/routes/joinLink.d.ts +38 -0
  73. package/dist/routes/joinLink.d.ts.map +1 -0
  74. package/dist/routes/joinLink.js +81 -0
  75. package/dist/routes/joinLink.js.map +1 -0
  76. package/dist/routes/membership.d.ts +116 -0
  77. package/dist/routes/membership.d.ts.map +1 -0
  78. package/dist/routes/membership.js +183 -0
  79. package/dist/routes/membership.js.map +1 -0
  80. package/dist/routes/notification.d.ts +103 -0
  81. package/dist/routes/notification.d.ts.map +1 -0
  82. package/dist/routes/notification.js +89 -0
  83. package/dist/routes/notification.js.map +1 -0
  84. package/dist/routes/payment.d.ts +56 -0
  85. package/dist/routes/payment.d.ts.map +1 -0
  86. package/dist/routes/payment.js +78 -0
  87. package/dist/routes/payment.js.map +1 -0
  88. package/dist/routes/product.d.ts +43 -0
  89. package/dist/routes/product.d.ts.map +1 -0
  90. package/dist/routes/product.js +53 -0
  91. package/dist/routes/product.js.map +1 -0
  92. package/dist/routes/project.d.ts +821 -0
  93. package/dist/routes/project.d.ts.map +1 -0
  94. package/dist/routes/project.js +1153 -0
  95. package/dist/routes/project.js.map +1 -0
  96. package/dist/routes/public.d.ts +269 -0
  97. package/dist/routes/public.d.ts.map +1 -0
  98. package/dist/routes/public.js +412 -0
  99. package/dist/routes/public.js.map +1 -0
  100. package/dist/routes/scratch.d.ts +70 -0
  101. package/dist/routes/scratch.d.ts.map +1 -0
  102. package/dist/routes/scratch.js +67 -0
  103. package/dist/routes/scratch.js.map +1 -0
  104. package/dist/routes/settings.d.ts +102 -0
  105. package/dist/routes/settings.d.ts.map +1 -0
  106. package/dist/routes/settings.js +94 -0
  107. package/dist/routes/settings.js.map +1 -0
  108. package/dist/routes/shortlink.d.ts +79 -0
  109. package/dist/routes/shortlink.d.ts.map +1 -0
  110. package/dist/routes/shortlink.js +25 -0
  111. package/dist/routes/shortlink.js.map +1 -0
  112. package/dist/routes/socket.d.ts +108 -0
  113. package/dist/routes/socket.d.ts.map +1 -0
  114. package/dist/routes/socket.js +555 -0
  115. package/dist/routes/socket.js.map +1 -0
  116. package/dist/routes/storage.d.ts +44 -0
  117. package/dist/routes/storage.d.ts.map +1 -0
  118. package/dist/routes/storage.js +49 -0
  119. package/dist/routes/storage.js.map +1 -0
  120. package/dist/routes/subscription.d.ts +184 -0
  121. package/dist/routes/subscription.d.ts.map +1 -0
  122. package/dist/routes/subscription.js +219 -0
  123. package/dist/routes/subscription.js.map +1 -0
  124. package/dist/routes/supportChat.d.ts +40 -0
  125. package/dist/routes/supportChat.d.ts.map +1 -0
  126. package/dist/routes/supportChat.js +53 -0
  127. package/dist/routes/supportChat.js.map +1 -0
  128. package/dist/routes/supportTicket.d.ts +89 -0
  129. package/dist/routes/supportTicket.d.ts.map +1 -0
  130. package/dist/routes/supportTicket.js +54 -0
  131. package/dist/routes/supportTicket.js.map +1 -0
  132. package/dist/routes/tag.d.ts +72 -0
  133. package/dist/routes/tag.d.ts.map +1 -0
  134. package/dist/routes/tag.js +81 -0
  135. package/dist/routes/tag.js.map +1 -0
  136. package/dist/routes/task.d.ts +252 -0
  137. package/dist/routes/task.d.ts.map +1 -0
  138. package/dist/routes/task.js +284 -0
  139. package/dist/routes/task.js.map +1 -0
  140. package/dist/routes/taskRelation.d.ts +80 -0
  141. package/dist/routes/taskRelation.d.ts.map +1 -0
  142. package/dist/routes/taskRelation.js +71 -0
  143. package/dist/routes/taskRelation.js.map +1 -0
  144. package/dist/routes/token.d.ts +75 -0
  145. package/dist/routes/token.d.ts.map +1 -0
  146. package/dist/routes/token.js +51 -0
  147. package/dist/routes/token.js.map +1 -0
  148. package/dist/routes/user.d.ts +112 -0
  149. package/dist/routes/user.d.ts.map +1 -0
  150. package/dist/routes/user.js +151 -0
  151. package/dist/routes/user.js.map +1 -0
  152. package/dist/routes/version.d.ts +42 -0
  153. package/dist/routes/version.d.ts.map +1 -0
  154. package/dist/routes/version.js +38 -0
  155. package/dist/routes/version.js.map +1 -0
  156. package/dist/routes/webhook.d.ts +170 -0
  157. package/dist/routes/webhook.d.ts.map +1 -0
  158. package/dist/routes/webhook.js +173 -0
  159. package/dist/routes/webhook.js.map +1 -0
  160. package/dist/routes/workspace.d.ts +120 -0
  161. package/dist/routes/workspace.d.ts.map +1 -0
  162. package/dist/routes/workspace.js +199 -0
  163. package/dist/routes/workspace.js.map +1 -0
  164. package/dist/utils/uploadSessionManager.d.ts +133 -0
  165. package/dist/utils/uploadSessionManager.d.ts.map +1 -0
  166. package/dist/utils/uploadSessionManager.js +321 -0
  167. package/dist/utils/uploadSessionManager.js.map +1 -0
  168. package/dist/utils/urlParams.d.ts +35 -0
  169. package/dist/utils/urlParams.d.ts.map +1 -0
  170. package/dist/utils/urlParams.js +146 -0
  171. package/dist/utils/urlParams.js.map +1 -0
  172. package/dist/version.d.ts +15 -0
  173. package/dist/version.d.ts.map +1 -0
  174. package/dist/version.js +12 -0
  175. package/dist/version.js.map +1 -0
  176. package/package.json +87 -3
  177. package/src/BotClient.ts +113 -0
  178. package/src/NuramaClient.ts +1193 -0
  179. package/src/bot-browser-entry.js +15 -0
  180. package/src/browser-entry.js +20 -0
  181. package/src/routes/ai.ts +378 -0
  182. package/src/routes/asset.ts +1104 -0
  183. package/src/routes/auth.ts +587 -0
  184. package/src/routes/blogPosts.ts +29 -0
  185. package/src/routes/board.ts +403 -0
  186. package/src/routes/bot.ts +257 -0
  187. package/src/routes/chat.ts +1292 -0
  188. package/src/routes/chatAi.ts +125 -0
  189. package/src/routes/config.ts +31 -0
  190. package/src/routes/convo.ts +321 -0
  191. package/src/routes/credits.ts +112 -0
  192. package/src/routes/device.ts +133 -0
  193. package/src/routes/folder.ts +154 -0
  194. package/src/routes/invite.ts +133 -0
  195. package/src/routes/joinLink.ts +100 -0
  196. package/src/routes/membership.ts +237 -0
  197. package/src/routes/notification.ts +166 -0
  198. package/src/routes/payment.ts +104 -0
  199. package/src/routes/product.ts +67 -0
  200. package/src/routes/project.ts +1528 -0
  201. package/src/routes/public.ts +496 -0
  202. package/src/routes/scratch.ts +94 -0
  203. package/src/routes/settings.ts +152 -0
  204. package/src/routes/shortlink.ts +90 -0
  205. package/src/routes/socket.ts +739 -0
  206. package/src/routes/storage.ts +83 -0
  207. package/src/routes/subscription.ts +307 -0
  208. package/src/routes/supportChat.ts +62 -0
  209. package/src/routes/supportTicket.ts +114 -0
  210. package/src/routes/tag.ts +131 -0
  211. package/src/routes/task.ts +431 -0
  212. package/src/routes/taskRelation.ts +125 -0
  213. package/src/routes/token.ts +113 -0
  214. package/src/routes/user.ts +214 -0
  215. package/src/routes/version.ts +62 -0
  216. package/src/routes/webhook.ts +295 -0
  217. package/src/routes/workspace.ts +223 -0
  218. package/src/utils/uploadSessionManager.ts +407 -0
  219. package/src/utils/urlParams.ts +181 -0
  220. package/src/version.ts +22 -0
@@ -0,0 +1,493 @@
1
+ export interface DocumentViewUrlResponse {
2
+ /** Signed URL for the document's `media` PDF, served inline. */
3
+ url: string;
4
+ /** Unix seconds. Refetch rather than reusing a URL past this. */
5
+ expires: number;
6
+ /** From `meta.document.pageCount`; 0 when processing has not reported it. */
7
+ pageCount: number;
8
+ /**
9
+ * True when the `media` PDF holds only the first `pageCount` pages of a
10
+ * longer document, because post-processing hit its `maxPages` cap. The PDF
11
+ * itself is internally consistent, so this flag is the only way to know.
12
+ */
13
+ pagesTruncated: boolean;
14
+ /**
15
+ * Which end of the document the `media` PDF kept. `'start'` for everything
16
+ * read front-to-back; `'end'` for logs, whose newest lines are at the bottom.
17
+ * Only meaningful when `pagesTruncated` is true.
18
+ */
19
+ truncatedFrom: 'start' | 'end';
20
+ /** Pages in the source document. Equals `pageCount` unless truncated. */
21
+ originalPageCount: number;
22
+ }
23
+ import NuramaClient from '../NuramaClient.js';
24
+ import { type Asset, type File, type AssetReferences } from '@nurama/types';
25
+ export interface UpdateAssetData {
26
+ name?: string;
27
+ meta?: Record<string, any>;
28
+ tags?: string[];
29
+ folderId?: string | null;
30
+ }
31
+ export interface TagAssetData {
32
+ tagId: string;
33
+ }
34
+ export interface UntagAssetData {
35
+ tagId: string;
36
+ }
37
+ export interface CreateAssetShortLinkData {
38
+ visibility?: 'creator' | 'reviewer';
39
+ }
40
+ export interface ShortLink {
41
+ id: string;
42
+ code: string;
43
+ resourceId: string;
44
+ resourceType: 'asset' | 'project' | 'workspace' | 'chatMessage' | 'chatSubmission';
45
+ visibility: 'creator' | 'reviewer' | null;
46
+ creatorId: string;
47
+ createdAt: string;
48
+ updatedAt?: string;
49
+ }
50
+ export interface CreateAssetShortLinkResponse {
51
+ shortLink: ShortLink;
52
+ shortUrl: string;
53
+ }
54
+ export type PublicAssetLinkMode = 'download' | 'embed' | 'embed-download';
55
+ export interface PublicAssetLink {
56
+ id: string;
57
+ token: string;
58
+ assetId: string;
59
+ projectId: string;
60
+ creatorId: string;
61
+ expires: string | null;
62
+ status: 'active' | 'disabled' | 'expired';
63
+ /**
64
+ * Capability mode for this link.
65
+ * - 'download' — direct-download link only; embed iframe blocked.
66
+ * - 'embed' — embeddable iframe only; direct download blocked.
67
+ * - 'embed-download' — both endpoints allowed (default; backward-compatible).
68
+ * Enforced server-side at /v1/public-download/{token}/download and /embed-files.
69
+ */
70
+ mode?: PublicAssetLinkMode;
71
+ publicUrl: string;
72
+ isExpired?: boolean;
73
+ createdAt: string;
74
+ updatedAt: string;
75
+ }
76
+ export interface CompleteMultipartUploadData {
77
+ key: string;
78
+ uploadId: string;
79
+ parts: {
80
+ ETag: string;
81
+ PartNumber: number;
82
+ }[];
83
+ assetId: string;
84
+ }
85
+ export interface MultipartUploadOptions {
86
+ onProgress?: (progress: {
87
+ partNumber: number;
88
+ totalParts: number;
89
+ percentComplete: number;
90
+ totalPercentComplete: number;
91
+ }) => void;
92
+ maxRetries?: number;
93
+ abortSignal?: AbortSignal;
94
+ enableProgressPersistence?: boolean;
95
+ projectId?: string;
96
+ sessionId?: string;
97
+ fileName?: string;
98
+ fileSize?: number;
99
+ assetId?: string;
100
+ }
101
+ export interface PartUploadOptions {
102
+ onPartProgress?: (progress: {
103
+ partNumber: number;
104
+ totalParts: number;
105
+ partPercent: number;
106
+ }) => void;
107
+ maxRetries?: number;
108
+ abortSignal?: AbortSignal;
109
+ }
110
+ export interface MultipartUploadResult {
111
+ key: string;
112
+ uploadId: string;
113
+ parts: {
114
+ ETag: string;
115
+ PartNumber: number;
116
+ }[];
117
+ }
118
+ export interface GetAssetParams {
119
+ chatVisibility?: 'creator' | 'reviewer';
120
+ chatMessageSort?: {
121
+ id?: 1 | -1;
122
+ };
123
+ chatReplySort?: {
124
+ id?: 1 | -1;
125
+ };
126
+ chatMessageLimit?: number;
127
+ chatReplyLimit?: number;
128
+ }
129
+ export interface GetAssetPageParams {
130
+ sort?: Record<string, 1 | -1>;
131
+ limit?: number;
132
+ visibility?: 'creator' | 'reviewer' | string;
133
+ inFolder?: boolean;
134
+ }
135
+ export interface Chat {
136
+ _id?: string;
137
+ id?: string;
138
+ totalMessages?: number;
139
+ recentMessages?: any[];
140
+ }
141
+ export interface AssetWithChats extends Omit<Asset, 'chats'> {
142
+ chats?: {
143
+ creator?: Chat;
144
+ reviewer?: Chat;
145
+ };
146
+ }
147
+ export type AssetResponse = AssetWithChats;
148
+ export type FileResponse = File;
149
+ export type AssetPageResponse = {
150
+ page: number;
151
+ };
152
+ export type RepairAssetsResponse = any[];
153
+ export type DownloadAssetsResponse = any[];
154
+ /**
155
+ * Defines asset-related methods for the NuramaClient.
156
+ * @param {NuramaClient} client - The NuramaClient instance.
157
+ * @returns {object} An object containing the asset-related methods.
158
+ */
159
+ export default function createAssetMethods(client: NuramaClient): {
160
+ /**
161
+ * Retrieves a specific asset by its ID with optional chat data.
162
+ * @param {string} assetId - The ID of the asset.
163
+ * @param {GetAssetParams} [params] - Optional parameters for chat data inclusion.
164
+ * @returns {Promise<AssetResponse>} The asset object with optional chat data.
165
+ */
166
+ getAsset(assetId: string, params?: GetAssetParams): Promise<AssetResponse>;
167
+ /**
168
+ * Lists every location an asset is referenced — its primary file system and
169
+ * each secondary reference (reviewer, submission, public), grouped and counted.
170
+ *
171
+ * Renaming an asset retitles it at every one of these locations, and deleting
172
+ * its last primary reference removes them all — so this is what the rename and
173
+ * delete confirmations show the user before either happens.
174
+ *
175
+ * @param {string} assetId - The ID of the asset.
176
+ * @returns {Promise<AssetReferences>} The asset's references.
177
+ */
178
+ getAssetReferences(assetId: string): Promise<AssetReferences>;
179
+ /**
180
+ * Updates an asset.
181
+ * @param {string} assetId - The ID of the asset to update.
182
+ * @param {UpdateAssetData} updateData - Data to update (e.g., name, meta, tags, folderId).
183
+ * @returns {Promise<AssetResponse>} The updated asset object.
184
+ */
185
+ updateAsset(assetId: string, updateData: UpdateAssetData): Promise<AssetResponse>;
186
+ /**
187
+ * Deletes an asset (marks for deletion).
188
+ * @param {string} assetId - The ID of the asset to delete.
189
+ * @returns {Promise<void>}
190
+ */
191
+ deleteAsset(assetId: string): Promise<AssetResponse>;
192
+ /**
193
+ * Retrieves a specific file from an asset.
194
+ * @param {string} assetId - The ID of the asset.
195
+ * @param {string} fileId - The ID of the file.
196
+ * @returns {Promise<FileResponse>} The file object.
197
+ */
198
+ getFile(assetId: string, fileId: string): Promise<FileResponse>;
199
+ /**
200
+ * Retrieves files of a specific function type from an asset.
201
+ * @param {string} assetId - The ID of the asset.
202
+ * @param {string} functionType - The function type of the files (e.g., 'thumbnail', 'original').
203
+ * @returns {Promise<FileResponse[]>} An array of file objects.
204
+ */
205
+ getFilesByFunctionType(assetId: string, functionType: string): Promise<FileResponse[]>;
206
+ /**
207
+ * Complete a multipart upload initiated by `createAssets`.
208
+ *
209
+ * Matches the route (`POST /v1/assets/complete-upload`) and mirrors
210
+ * `nuramaClient.scratch.completeUpload`, so moving between the asset
211
+ * and scratch namespaces uses the same verb.
212
+ *
213
+ * @param {CompleteMultipartUploadData} uploadData - Data including key, uploadId, parts, and assetId.
214
+ * @returns {Promise<any>} S3 completion response.
215
+ */
216
+ completeUpload(uploadData: CompleteMultipartUploadData): Promise<any>;
217
+ /**
218
+ * Uploads a file using multipart upload with the provided signed URLs
219
+ * @param {File|Blob|Buffer|string} file - The file to upload (File/Blob in browser, Buffer/string path in Node.js)
220
+ * @param {string[]} signedUrls - Array of signed URLs for each part
221
+ * @param {string} key - The S3 key for the upload
222
+ * @param {string} uploadId - The S3 uploadId for the multipart upload
223
+ * @param {MultipartUploadOptions} options - Upload options
224
+ * @returns {Promise<MultipartUploadResult>} The completed upload data
225
+ */
226
+ multipartUpload(file: File | Blob | Buffer | string, signedUrls: string[], key: string, uploadId: string, options?: MultipartUploadOptions): Promise<MultipartUploadResult>;
227
+ /**
228
+ * Gets the page number an asset appears on based on specified filters and sorting.
229
+ * @param {string} assetId - The ID of the asset to find the page for.
230
+ * @param {GetAssetPageParams} [params] - Query parameters for sorting, filtering, and pagination limit.
231
+ * @returns {Promise<AssetPageResponse>} Object containing the page number.
232
+ */
233
+ getAssetPage(assetId: string, params?: GetAssetPageParams): Promise<AssetPageResponse>;
234
+ /**
235
+ * Attempts to repair assets (e.g., regenerate signed URLs for pending uploads).
236
+ * @param {string[]} assetIds - An array of asset IDs to repair.
237
+ * @returns {Promise<RepairAssetsResponse>} Array of repair results.
238
+ */
239
+ repairAssets(assetIds: string[]): Promise<RepairAssetsResponse>;
240
+ /**
241
+ * Generates signed download URLs for the original files of specified assets.
242
+ * @param {string[]} assetIds - An array of asset IDs.
243
+ * @returns {Promise<DownloadAssetsResponse>} Array of download URL results.
244
+ */
245
+ downloadAssets(assetIds: string[]): Promise<DownloadAssetsResponse>;
246
+ /**
247
+ * Mints a short-lived signed URL for rendering a document inline.
248
+ *
249
+ * Documents keep their `media` PDF in the private bucket, so unlike images
250
+ * and video it cannot be addressed by keyPath through the file CDN. Fetch
251
+ * this per document open; do not cache it past `expires`.
252
+ *
253
+ * @param {string} assetId - The document asset's ID.
254
+ * @returns {Promise<DocumentViewUrlResponse>} Signed URL, expiry and page count.
255
+ */
256
+ getDocumentViewUrl(assetId: string): Promise<DocumentViewUrlResponse>;
257
+ /**
258
+ * Tags an asset with a specific tag.
259
+ * @param {string} assetId - The ID of the asset to tag.
260
+ * @param {TagAssetData} tagData - Data containing the tag ID.
261
+ * @returns {Promise<AssetResponse>} The updated asset object.
262
+ */
263
+ tagAsset(assetId: string, tagData: TagAssetData): Promise<AssetResponse>;
264
+ /**
265
+ * Untags an asset by removing a specific tag.
266
+ * @param {string} assetId - The ID of the asset to untag.
267
+ * @param {UntagAssetData} untagData - Data containing the tag ID to remove.
268
+ * @returns {Promise<AssetResponse>} The updated asset object.
269
+ */
270
+ untagAsset(assetId: string, untagData: UntagAssetData): Promise<AssetResponse>;
271
+ /**
272
+ * Creates a short link for an asset.
273
+ * If a short link already exists for the asset with the same visibility, returns the existing one.
274
+ * @param {string} assetId - The ID of the asset to create a short link for.
275
+ * @param {CreateAssetShortLinkData} [data] - Optional data including visibility context.
276
+ * @returns {Promise<CreateAssetShortLinkResponse>} The short link object and short URL.
277
+ */
278
+ createShortLink(assetId: string, data?: CreateAssetShortLinkData): Promise<CreateAssetShortLinkResponse>;
279
+ /**
280
+ * Create a public download link for an asset.
281
+ * @param {string} assetId - The asset ID.
282
+ * @param {Object} data - Link creation data.
283
+ * @param {string} data.projectId - The project ID.
284
+ * @param {number} [data.validity] - Link validity in milliseconds.
285
+ * @returns {Promise<PublicAssetLink>} The created public link.
286
+ */
287
+ createPublicLink(assetId: string, data: {
288
+ projectId: string;
289
+ validity?: number;
290
+ mode?: PublicAssetLinkMode;
291
+ }): Promise<PublicAssetLink>;
292
+ /**
293
+ * Get all public download links for an asset.
294
+ * @param {string} assetId - The asset ID.
295
+ * @returns {Promise<{ results: PublicAssetLink[] }>} The public links.
296
+ */
297
+ getPublicLinks(assetId: string, options?: {
298
+ bypassCache?: boolean;
299
+ }): Promise<{
300
+ results: PublicAssetLink[];
301
+ }>;
302
+ /**
303
+ * Update a public download link (extend expiration or change status).
304
+ * @param {string} assetId - The asset ID.
305
+ * @param {string} linkId - The link ID.
306
+ * @param {Object} data - Update data.
307
+ * @returns {Promise<PublicAssetLink>} The updated public link.
308
+ */
309
+ updatePublicLink(assetId: string, linkId: string, data: {
310
+ validity?: number;
311
+ status?: string;
312
+ mode?: PublicAssetLinkMode;
313
+ }): Promise<PublicAssetLink>;
314
+ /**
315
+ * Disable a public download link.
316
+ * @param {string} assetId - The asset ID.
317
+ * @param {string} linkId - The link ID.
318
+ * @returns {Promise<PublicAssetLink>} The disabled public link.
319
+ */
320
+ disablePublicLink(assetId: string, linkId: string): Promise<PublicAssetLink>;
321
+ /**
322
+ * Reactivate a disabled/expired public download link.
323
+ * @param {string} assetId - The asset ID.
324
+ * @param {string} linkId - The link ID.
325
+ * @param {Object} [data] - Reactivation data.
326
+ * @param {number} [data.validity] - New validity in milliseconds.
327
+ * @returns {Promise<PublicAssetLink>} The reactivated public link.
328
+ */
329
+ reactivatePublicLink(assetId: string, linkId: string, data?: {
330
+ validity?: number;
331
+ }): Promise<PublicAssetLink>;
332
+ /**
333
+ * Mint a signed multipart upload URL for a user-supplied custom thumbnail
334
+ * image. The upload lands in the originals bucket tagged so the
335
+ * post-processing Lambda generates the customThumbnail outputs and
336
+ * registers them on the asset via the file-update callback.
337
+ *
338
+ * Caller flow:
339
+ * 1. multipartUpload(file, response.urls, response.key, response.uploadId)
340
+ * 2. completeCustomThumbnailUpload({ assetId, key, uploadId, parts })
341
+ * 3. wait for the assetFileUpdate websocket event
342
+ */
343
+ getCustomThumbnailUploadUrl(assetId: string, data: {
344
+ fileName: string;
345
+ mimeType: string;
346
+ sizeInMB: number;
347
+ }): Promise<{
348
+ fileName: string;
349
+ assetId: string;
350
+ uploadId: string;
351
+ key: string;
352
+ urls: string[];
353
+ mimeType: string;
354
+ expires: number;
355
+ status: string;
356
+ }>;
357
+ /**
358
+ * Finalize the multipart S3 upload for a custom thumbnail. Triggers the
359
+ * post-processing Lambda by committing the S3 object.
360
+ */
361
+ completeCustomThumbnailUpload(assetId: string, data: {
362
+ key: string;
363
+ uploadId: string;
364
+ parts: {
365
+ ETag: string;
366
+ PartNumber: number;
367
+ }[];
368
+ }): Promise<{
369
+ status: string;
370
+ key: string;
371
+ }>;
372
+ /**
373
+ * Remove the custom thumbnail from an asset. Soft-deletes all custom
374
+ * thumb files; the asset falls back to the auto-generated thumbnail.
375
+ */
376
+ removeCustomThumbnail(assetId: string): Promise<Asset>;
377
+ /**
378
+ * Promote a chat-message attachment into a project as a fresh,
379
+ * independent project asset. The source attachment is left untouched;
380
+ * the new project asset has its own lifecycle, post-processing
381
+ * pipeline, and storage footprint.
382
+ *
383
+ * Idempotent: a second promote of the same source into the same
384
+ * project returns the existing promoted asset with `deduped: true`.
385
+ *
386
+ * Requires `canCreateAsset` on the destination project — reviewers
387
+ * are blocked. The server additionally rejects when the source
388
+ * attachment's workspace doesn't match the destination project's.
389
+ */
390
+ promoteAttachmentToProject(assetId: string, payload: {
391
+ projectId: string;
392
+ fileName?: string;
393
+ }): Promise<{
394
+ asset: Asset;
395
+ deduped: boolean;
396
+ }>;
397
+ /**
398
+ * Upload Session Management Methods
399
+ */
400
+ /**
401
+ * Get all active upload sessions for a project
402
+ * @param {string} projectId - The project ID to get sessions for
403
+ * @returns {UploadSessionData[]} Array of upload session data
404
+ */
405
+ getUploadSessions(projectId: string): import("../utils/uploadSessionManager.js").UploadSessionData[];
406
+ /**
407
+ * True when any upload is genuinely in flight anywhere in the app (across
408
+ * all projects and tabs). Intended for app-level guards — e.g. suppressing
409
+ * an automatic version-update page refresh while bytes are still uploading.
410
+ * Stale (crashed-tab) sessions are ignored via the freshness window.
411
+ * @param {number} [staleMs] - Max age of the last progress update that still
412
+ * counts as active (default: 2 minutes)
413
+ * @returns {boolean}
414
+ */
415
+ hasActiveUploads(staleMs?: number): boolean;
416
+ /**
417
+ * Get a specific upload session
418
+ * @param {string} projectId - The project ID
419
+ * @param {string} sessionId - The session ID
420
+ * @returns {UploadSessionData | null} Upload session data or null if not found
421
+ */
422
+ getUploadSession(projectId: string, sessionId: string): import("../utils/uploadSessionManager.js").UploadSessionData | null;
423
+ /**
424
+ * Remove an upload session
425
+ * @param {string} projectId - The project ID
426
+ * @param {string} sessionId - The session ID
427
+ */
428
+ removeUploadSession(projectId: string, sessionId: string): void;
429
+ /**
430
+ * Clean up old upload sessions for a project
431
+ * @param {string} projectId - The project ID
432
+ * @param {number} [olderThanMs] - Remove sessions older than this (default: 24 hours)
433
+ */
434
+ cleanupUploadSessions(projectId: string, olderThanMs?: number): void;
435
+ /**
436
+ * Register a listener for cross-tab upload session messages
437
+ * @param {string} listenerId - Unique listener ID
438
+ * @param {function} callback - Callback function to handle messages
439
+ */
440
+ onUploadSessionMessage(listenerId: string, callback: (message: any) => void): void;
441
+ /**
442
+ * Unregister a cross-tab upload session message listener
443
+ * @param {string} listenerId - Unique listener ID
444
+ */
445
+ offUploadSessionMessage(listenerId: string): void;
446
+ /**
447
+ * Mark an upload session as completed
448
+ * @param {string} projectId - The project ID
449
+ * @param {string} sessionId - The session ID
450
+ */
451
+ completeUploadSession(projectId: string, sessionId: string): void;
452
+ /**
453
+ * Record an authenticated play event from the in-app player. Fire-and-forget;
454
+ * server returns 204. Throw-on-failure is fine because the caller already
455
+ * de-dupes per session.
456
+ */
457
+ recordAccessActivity(assetId: string, body: {
458
+ eventType: "play_started" | "play_completed";
459
+ visibility: "creator" | "reviewer";
460
+ }): Promise<void>;
461
+ /**
462
+ * Get aggregated access-activity for a single asset. Returns totals per
463
+ * eventType, a breakdown for the requested dimension, and a zero-filled
464
+ * daily series.
465
+ */
466
+ getAssetAccessActivity(assetId: string, params?: {
467
+ range?: "7d" | "30d" | "90d";
468
+ groupBy?: "visibility" | "referrerHost" | "country" | "userAgentClass" | "day";
469
+ eventType?: "play_started" | "play_completed" | "download" | "embed_resolved";
470
+ limit?: number;
471
+ }): Promise<{
472
+ range: string;
473
+ from: string;
474
+ to: string;
475
+ totals: Array<{
476
+ eventType: string;
477
+ count: number;
478
+ }>;
479
+ breakdown: Array<{
480
+ value: string;
481
+ label: string;
482
+ count: number;
483
+ }>;
484
+ series: Array<{
485
+ date: string;
486
+ eventType: string;
487
+ count: number;
488
+ }>;
489
+ groupBy: string;
490
+ eventType: string | null;
491
+ }>;
492
+ };
493
+ //# sourceMappingURL=asset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/routes/asset.ts"],"names":[],"mappings":"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"}