@stack0/sdk 0.5.16 → 0.5.18

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.
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Mail as Mail$1 } from './mail/index.mjs';
2
2
  export { AddContactToSequenceRequest, AddContactsToAudienceRequest, AddContactsToAudienceResponse, AddDomainRequest, AddDomainResponse, ArchiveSequenceResponse, Attachment, Audience, AudienceContact, Audiences, BatchTrackEventsRequest, BatchTrackEventsResponse, Campaign, CampaignStatsResponse, CampaignStatus, Campaigns, CancelCampaignResponse, CancelEmailResponse, ConnectionType, ContactStatus, Contacts, CreateAudienceRequest, CreateCampaignRequest, CreateConnectionRequest, CreateContactRequest, CreateEventRequest, CreateMailboxRequest, CreateNodeRequest, CreateSequenceRequest, CreateTemplateRequest, DeleteAudienceResponse, DeleteCampaignResponse, DeleteConnectionResponse, DeleteContactResponse, DeleteDomainResponse, DeleteEventResponse, DeleteNodeResponse, DeleteSequenceResponse, DeleteTemplateResponse, DnsRecord, Domain, DomainStatus, Domains, Email, EmailAddress, EmailAnalyticsResponse, EmailRecipient, EmailStatus, EventAnalyticsResponse, EventOccurrence, EventPropertiesSchema, EventProperty, Events, GetDnsRecordsResponse, GetEmailResponse, HourlyAnalyticsDataPoint, HourlyAnalyticsResponse, ImportContactsRequest, ImportContactsResponse, InboundAttachment, InboundEmailAddress, InboundMessage, InboundWebhookPayload, ListAudienceContactsRequest, ListAudienceContactsResponse, ListAudiencesRequest, ListAudiencesResponse, ListCampaignsRequest, ListCampaignsResponse, ListContactsRequest, ListContactsResponse, ListDomainsRequest, ListDomainsResponse, ListEmailsRequest, ListEmailsResponse, ListEventOccurrencesRequest, ListEventOccurrencesResponse, ListEventsRequest, ListEventsResponse, ListInboundMessagesRequest, ListInboundMessagesResponse, ListMailboxesRequest, ListMailboxesResponse, ListSendersRequest, ListSendersResponse, ListSequenceEntriesRequest, ListSequenceEntriesResponse, ListSequencesRequest, ListSequencesResponse, ListTemplatesRequest, ListTemplatesResponse, MailContact, MailEvent, Mailbox, Mailboxes, PauseCampaignResponse, PauseSequenceResponse, PreviewTemplateRequest, PreviewTemplateResponse, PublishSequenceResponse, RemoveContactFromSequenceRequest, RemoveContactFromSequenceResponse, RemoveContactsFromAudienceRequest, RemoveContactsFromAudienceResponse, ResendEmailResponse, ResumeSequenceResponse, SendBatchEmailRequest, SendBatchEmailResponse, SendBroadcastEmailRequest, SendBroadcastEmailResponse, SendCampaignRequest, SendCampaignResponse, SendEmailRequest, SendEmailResponse, Sender, Sequence, SequenceAnalyticsResponse, SequenceConnection, SequenceEntry, SequenceEntryStatus, SequenceNode, SequenceNodeType, SequenceStatus, SequenceTriggerFrequency, SequenceTriggerType, SequenceWithNodes, Sequences, SetDefaultDomainResponse, SetNodeBranchRequest, SetNodeEmailRequest, SetNodeExperimentRequest, SetNodeFilterRequest, SetNodeTimerRequest, Template, Templates, TimeSeriesAnalyticsRequest, TimeSeriesAnalyticsResponse, TimeSeriesDataPoint, TrackEventRequest, TrackEventResponse, UpdateAudienceRequest, UpdateCampaignRequest, UpdateContactRequest, UpdateEventRequest, UpdateMailboxRequest, UpdateNodePositionRequest, UpdateNodeRequest, UpdateSequenceRequest, UpdateTemplateRequest, VerifyDomainResponse } from './mail/index.mjs';
3
3
  import { CDN } from './cdn/index.mjs';
4
- export { Asset, AssetStatus, AssetType, AudioTrackInput, BundleDownloadUrlRequest, BundleDownloadUrlResponse, BundleStatus, CancelImportResponse, CancelMergeJobRequest, CdnEnvironment, CdnStorageBreakdownItem, CdnStorageBreakdownRequest, CdnStorageBreakdownResponse, CdnUsageDataPoint, CdnUsageHistoryRequest, CdnUsageHistoryResponse, CdnUsageRequest, CdnUsageResponse, ConfirmUploadRequest, ConfirmUploadResponse, CreateBundleRequest, CreateBundleResponse, CreateFolderRequest, CreateImportRequest, CreateImportResponse, CreateMergeJobRequest, DeleteAssetRequest, DeleteAssetsRequest, DeleteAssetsResponse, DownloadBundle, ExtractAudioRequest, ExtractAudioResponse, Folder, FolderListItem, FolderTreeNode, GenerateGifRequest, GetAssetRequest, GetFolderByPathRequest, GetFolderRequest, GetFolderTreeRequest, GetMergeJobRequest, GifStatus, ImageVideoWatermarkOptions, ImageWatermarkConfig, ImageWatermarkPosition, ImageWatermarkSizingMode, ImportAuthType, ImportError, ImportFile, ImportFileStatus, ImportJob, ImportJobStatus, ImportJobSummary, ImportPathMode, ListAssetsRequest, ListAssetsResponse, ListBundlesRequest, ListBundlesResponse, ListFoldersRequest, ListFoldersResponse, ListGifsRequest, ListImportFilesRequest, ListImportFilesResponse, ListImportsRequest, ListImportsResponse, ListJobsRequest, ListJobsResponse, ListMergeJobsRequest, ListMergeJobsResponse, ListPrivateFilesRequest, ListPrivateFilesResponse, ListThumbnailsRequest, ListThumbnailsResponse, MergeAspectRatio, MergeInputItem, MergeJob, MergeJobWithOutput, MergeOutputConfig, MergeOutputFormat, MergeQuality, MergeStatus, MoveAssetsRequest, MoveAssetsResponse, MoveFolderRequest, MoveFolderResponse, MovePrivateFilesRequest, MovePrivateFilesResponse, PrivateDownloadUrlRequest, PrivateDownloadUrlResponse, PrivateFile, PrivateFileStatus, PrivateUploadUrlRequest, PrivateUploadUrlResponse, RegenerateThumbnailRequest, RegenerateThumbnailResponse, RetryImportResponse, StreamingUrls, TextOverlay, TextOverlayShadow, TextOverlayStroke, TextVideoWatermarkOptions, ThumbnailRequest, ThumbnailResponse, TranscodeJob, TranscodeVideoRequest, TranscodingStatus, TransformOptions, TrimOptions, UpdateAssetRequest, UpdateFolderRequest, UpdatePrivateFileRequest, UploadFromUrlRequest, UploadUrlRequest, UploadUrlResponse, VideoCodec, VideoGif, VideoOutputFormat, VideoQuality, VideoThumbnail, VideoVariant, WatermarkOptions } from './cdn/index.mjs';
4
+ export { Asset, AssetStatus, AssetType, AudioTrackInput, BundleDownloadUrlRequest, BundleDownloadUrlResponse, BundleStatus, CancelImportResponse, CancelMergeJobRequest, CdnEnvironment, CdnStorageBreakdownItem, CdnStorageBreakdownRequest, CdnStorageBreakdownResponse, CdnStorageUsageBucket, CdnStorageUsageRequest, CdnStorageUsageResponse, CdnUsageDataPoint, CdnUsageHistoryRequest, CdnUsageHistoryResponse, CdnUsageRequest, CdnUsageResponse, CompositeChromaKey, CompositeConfig, CompositePoint, CompositeQuad, CompositeRect, ConfirmUploadRequest, ConfirmUploadResponse, CreateBundleRequest, CreateBundleResponse, CreateFolderRequest, CreateImportRequest, CreateImportResponse, CreateMergeJobRequest, DeleteAssetRequest, DeleteAssetsRequest, DeleteAssetsResponse, DownloadBundle, ExtractAudioRequest, ExtractAudioResponse, Folder, FolderListItem, FolderTreeNode, GenerateGifRequest, GetAssetRequest, GetFolderByPathRequest, GetFolderRequest, GetFolderTreeRequest, GetMergeJobRequest, GifStatus, ImageVideoWatermarkOptions, ImageWatermarkConfig, ImageWatermarkPosition, ImageWatermarkSizingMode, ImportAuthType, ImportError, ImportFile, ImportFileStatus, ImportJob, ImportJobStatus, ImportJobSummary, ImportPathMode, ListAssetsRequest, ListAssetsResponse, ListBundlesRequest, ListBundlesResponse, ListFoldersRequest, ListFoldersResponse, ListGifsRequest, ListImportFilesRequest, ListImportFilesResponse, ListImportsRequest, ListImportsResponse, ListJobsRequest, ListJobsResponse, ListMergeJobsRequest, ListMergeJobsResponse, ListPrivateFilesRequest, ListPrivateFilesResponse, ListThumbnailsRequest, ListThumbnailsResponse, MergeAspectRatio, MergeInputItem, MergeJob, MergeJobWithOutput, MergeOutputConfig, MergeOutputFormat, MergeQuality, MergeStatus, MoveAssetsRequest, MoveAssetsResponse, MoveFolderRequest, MoveFolderResponse, MovePrivateFilesRequest, MovePrivateFilesResponse, PrivateDownloadUrlRequest, PrivateDownloadUrlResponse, PrivateFile, PrivateFileStatus, PrivateUploadUrlRequest, PrivateUploadUrlResponse, RegenerateThumbnailRequest, RegenerateThumbnailResponse, RetryImportResponse, StreamingUrls, TextOverlay, TextOverlayShadow, TextOverlayStroke, TextVideoWatermarkOptions, ThumbnailRequest, ThumbnailResponse, TranscodeJob, TranscodeVideoRequest, TranscodingStatus, TransformOptions, TrimOptions, UpdateAssetRequest, UpdateFolderRequest, UpdatePrivateFileRequest, UploadFromUrlRequest, UploadUrlRequest, UploadUrlResponse, VideoCodec, VideoGif, VideoOutputFormat, VideoQuality, VideoThumbnail, VideoVariant, WatermarkOptions } from './cdn/index.mjs';
5
5
  import { Screenshots } from './screenshots/index.mjs';
6
6
  export { BatchScreenshotJob, Clip, CreateBatchScreenshotsRequest, CreateScreenshotRequest, CreateScreenshotResponse, CreateScreenshotScheduleRequest, DeviceType, GetScreenshotRequest, ListScreenshotsRequest, ListScreenshotsResponse, ResourceType, Screenshot, ScreenshotBatchJobsResponse, ScreenshotFormat, ScreenshotSchedule, ScreenshotSchedulesResponse, ScreenshotStatus, UpdateScreenshotScheduleRequest } from './screenshots/index.mjs';
7
7
  import { Extraction } from './extraction/index.mjs';
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Mail as Mail$1 } from './mail/index.js';
2
2
  export { AddContactToSequenceRequest, AddContactsToAudienceRequest, AddContactsToAudienceResponse, AddDomainRequest, AddDomainResponse, ArchiveSequenceResponse, Attachment, Audience, AudienceContact, Audiences, BatchTrackEventsRequest, BatchTrackEventsResponse, Campaign, CampaignStatsResponse, CampaignStatus, Campaigns, CancelCampaignResponse, CancelEmailResponse, ConnectionType, ContactStatus, Contacts, CreateAudienceRequest, CreateCampaignRequest, CreateConnectionRequest, CreateContactRequest, CreateEventRequest, CreateMailboxRequest, CreateNodeRequest, CreateSequenceRequest, CreateTemplateRequest, DeleteAudienceResponse, DeleteCampaignResponse, DeleteConnectionResponse, DeleteContactResponse, DeleteDomainResponse, DeleteEventResponse, DeleteNodeResponse, DeleteSequenceResponse, DeleteTemplateResponse, DnsRecord, Domain, DomainStatus, Domains, Email, EmailAddress, EmailAnalyticsResponse, EmailRecipient, EmailStatus, EventAnalyticsResponse, EventOccurrence, EventPropertiesSchema, EventProperty, Events, GetDnsRecordsResponse, GetEmailResponse, HourlyAnalyticsDataPoint, HourlyAnalyticsResponse, ImportContactsRequest, ImportContactsResponse, InboundAttachment, InboundEmailAddress, InboundMessage, InboundWebhookPayload, ListAudienceContactsRequest, ListAudienceContactsResponse, ListAudiencesRequest, ListAudiencesResponse, ListCampaignsRequest, ListCampaignsResponse, ListContactsRequest, ListContactsResponse, ListDomainsRequest, ListDomainsResponse, ListEmailsRequest, ListEmailsResponse, ListEventOccurrencesRequest, ListEventOccurrencesResponse, ListEventsRequest, ListEventsResponse, ListInboundMessagesRequest, ListInboundMessagesResponse, ListMailboxesRequest, ListMailboxesResponse, ListSendersRequest, ListSendersResponse, ListSequenceEntriesRequest, ListSequenceEntriesResponse, ListSequencesRequest, ListSequencesResponse, ListTemplatesRequest, ListTemplatesResponse, MailContact, MailEvent, Mailbox, Mailboxes, PauseCampaignResponse, PauseSequenceResponse, PreviewTemplateRequest, PreviewTemplateResponse, PublishSequenceResponse, RemoveContactFromSequenceRequest, RemoveContactFromSequenceResponse, RemoveContactsFromAudienceRequest, RemoveContactsFromAudienceResponse, ResendEmailResponse, ResumeSequenceResponse, SendBatchEmailRequest, SendBatchEmailResponse, SendBroadcastEmailRequest, SendBroadcastEmailResponse, SendCampaignRequest, SendCampaignResponse, SendEmailRequest, SendEmailResponse, Sender, Sequence, SequenceAnalyticsResponse, SequenceConnection, SequenceEntry, SequenceEntryStatus, SequenceNode, SequenceNodeType, SequenceStatus, SequenceTriggerFrequency, SequenceTriggerType, SequenceWithNodes, Sequences, SetDefaultDomainResponse, SetNodeBranchRequest, SetNodeEmailRequest, SetNodeExperimentRequest, SetNodeFilterRequest, SetNodeTimerRequest, Template, Templates, TimeSeriesAnalyticsRequest, TimeSeriesAnalyticsResponse, TimeSeriesDataPoint, TrackEventRequest, TrackEventResponse, UpdateAudienceRequest, UpdateCampaignRequest, UpdateContactRequest, UpdateEventRequest, UpdateMailboxRequest, UpdateNodePositionRequest, UpdateNodeRequest, UpdateSequenceRequest, UpdateTemplateRequest, VerifyDomainResponse } from './mail/index.js';
3
3
  import { CDN } from './cdn/index.js';
4
- export { Asset, AssetStatus, AssetType, AudioTrackInput, BundleDownloadUrlRequest, BundleDownloadUrlResponse, BundleStatus, CancelImportResponse, CancelMergeJobRequest, CdnEnvironment, CdnStorageBreakdownItem, CdnStorageBreakdownRequest, CdnStorageBreakdownResponse, CdnUsageDataPoint, CdnUsageHistoryRequest, CdnUsageHistoryResponse, CdnUsageRequest, CdnUsageResponse, ConfirmUploadRequest, ConfirmUploadResponse, CreateBundleRequest, CreateBundleResponse, CreateFolderRequest, CreateImportRequest, CreateImportResponse, CreateMergeJobRequest, DeleteAssetRequest, DeleteAssetsRequest, DeleteAssetsResponse, DownloadBundle, ExtractAudioRequest, ExtractAudioResponse, Folder, FolderListItem, FolderTreeNode, GenerateGifRequest, GetAssetRequest, GetFolderByPathRequest, GetFolderRequest, GetFolderTreeRequest, GetMergeJobRequest, GifStatus, ImageVideoWatermarkOptions, ImageWatermarkConfig, ImageWatermarkPosition, ImageWatermarkSizingMode, ImportAuthType, ImportError, ImportFile, ImportFileStatus, ImportJob, ImportJobStatus, ImportJobSummary, ImportPathMode, ListAssetsRequest, ListAssetsResponse, ListBundlesRequest, ListBundlesResponse, ListFoldersRequest, ListFoldersResponse, ListGifsRequest, ListImportFilesRequest, ListImportFilesResponse, ListImportsRequest, ListImportsResponse, ListJobsRequest, ListJobsResponse, ListMergeJobsRequest, ListMergeJobsResponse, ListPrivateFilesRequest, ListPrivateFilesResponse, ListThumbnailsRequest, ListThumbnailsResponse, MergeAspectRatio, MergeInputItem, MergeJob, MergeJobWithOutput, MergeOutputConfig, MergeOutputFormat, MergeQuality, MergeStatus, MoveAssetsRequest, MoveAssetsResponse, MoveFolderRequest, MoveFolderResponse, MovePrivateFilesRequest, MovePrivateFilesResponse, PrivateDownloadUrlRequest, PrivateDownloadUrlResponse, PrivateFile, PrivateFileStatus, PrivateUploadUrlRequest, PrivateUploadUrlResponse, RegenerateThumbnailRequest, RegenerateThumbnailResponse, RetryImportResponse, StreamingUrls, TextOverlay, TextOverlayShadow, TextOverlayStroke, TextVideoWatermarkOptions, ThumbnailRequest, ThumbnailResponse, TranscodeJob, TranscodeVideoRequest, TranscodingStatus, TransformOptions, TrimOptions, UpdateAssetRequest, UpdateFolderRequest, UpdatePrivateFileRequest, UploadFromUrlRequest, UploadUrlRequest, UploadUrlResponse, VideoCodec, VideoGif, VideoOutputFormat, VideoQuality, VideoThumbnail, VideoVariant, WatermarkOptions } from './cdn/index.js';
4
+ export { Asset, AssetStatus, AssetType, AudioTrackInput, BundleDownloadUrlRequest, BundleDownloadUrlResponse, BundleStatus, CancelImportResponse, CancelMergeJobRequest, CdnEnvironment, CdnStorageBreakdownItem, CdnStorageBreakdownRequest, CdnStorageBreakdownResponse, CdnStorageUsageBucket, CdnStorageUsageRequest, CdnStorageUsageResponse, CdnUsageDataPoint, CdnUsageHistoryRequest, CdnUsageHistoryResponse, CdnUsageRequest, CdnUsageResponse, CompositeChromaKey, CompositeConfig, CompositePoint, CompositeQuad, CompositeRect, ConfirmUploadRequest, ConfirmUploadResponse, CreateBundleRequest, CreateBundleResponse, CreateFolderRequest, CreateImportRequest, CreateImportResponse, CreateMergeJobRequest, DeleteAssetRequest, DeleteAssetsRequest, DeleteAssetsResponse, DownloadBundle, ExtractAudioRequest, ExtractAudioResponse, Folder, FolderListItem, FolderTreeNode, GenerateGifRequest, GetAssetRequest, GetFolderByPathRequest, GetFolderRequest, GetFolderTreeRequest, GetMergeJobRequest, GifStatus, ImageVideoWatermarkOptions, ImageWatermarkConfig, ImageWatermarkPosition, ImageWatermarkSizingMode, ImportAuthType, ImportError, ImportFile, ImportFileStatus, ImportJob, ImportJobStatus, ImportJobSummary, ImportPathMode, ListAssetsRequest, ListAssetsResponse, ListBundlesRequest, ListBundlesResponse, ListFoldersRequest, ListFoldersResponse, ListGifsRequest, ListImportFilesRequest, ListImportFilesResponse, ListImportsRequest, ListImportsResponse, ListJobsRequest, ListJobsResponse, ListMergeJobsRequest, ListMergeJobsResponse, ListPrivateFilesRequest, ListPrivateFilesResponse, ListThumbnailsRequest, ListThumbnailsResponse, MergeAspectRatio, MergeInputItem, MergeJob, MergeJobWithOutput, MergeOutputConfig, MergeOutputFormat, MergeQuality, MergeStatus, MoveAssetsRequest, MoveAssetsResponse, MoveFolderRequest, MoveFolderResponse, MovePrivateFilesRequest, MovePrivateFilesResponse, PrivateDownloadUrlRequest, PrivateDownloadUrlResponse, PrivateFile, PrivateFileStatus, PrivateUploadUrlRequest, PrivateUploadUrlResponse, RegenerateThumbnailRequest, RegenerateThumbnailResponse, RetryImportResponse, StreamingUrls, TextOverlay, TextOverlayShadow, TextOverlayStroke, TextVideoWatermarkOptions, ThumbnailRequest, ThumbnailResponse, TranscodeJob, TranscodeVideoRequest, TranscodingStatus, TransformOptions, TrimOptions, UpdateAssetRequest, UpdateFolderRequest, UpdatePrivateFileRequest, UploadFromUrlRequest, UploadUrlRequest, UploadUrlResponse, VideoCodec, VideoGif, VideoOutputFormat, VideoQuality, VideoThumbnail, VideoVariant, WatermarkOptions } from './cdn/index.js';
5
5
  import { Screenshots } from './screenshots/index.js';
6
6
  export { BatchScreenshotJob, Clip, CreateBatchScreenshotsRequest, CreateScreenshotRequest, CreateScreenshotResponse, CreateScreenshotScheduleRequest, DeviceType, GetScreenshotRequest, ListScreenshotsRequest, ListScreenshotsResponse, ResourceType, Screenshot, ScreenshotBatchJobsResponse, ScreenshotFormat, ScreenshotSchedule, ScreenshotSchedulesResponse, ScreenshotStatus, UpdateScreenshotScheduleRequest } from './screenshots/index.js';
7
7
  import { Extraction } from './extraction/index.js';
package/dist/index.js CHANGED
@@ -1434,7 +1434,12 @@ var CDN = class {
1434
1434
  return this.http.get(`/cdn/video/${assetId}/stream`);
1435
1435
  }
1436
1436
  /**
1437
- * Generate a thumbnail from a video at a specific timestamp
1437
+ * Get the thumbnail at a specific timestamp, generating it on miss
1438
+ *
1439
+ * If no thumbnail exists at that timestamp yet, generation is queued
1440
+ * automatically and a response with `status: "pending"` (null url) is
1441
+ * returned. Poll until `status` is "ready", or use
1442
+ * {@link getThumbnailAndWait} to do that for you.
1438
1443
  *
1439
1444
  * @example
1440
1445
  * ```typescript
@@ -1444,7 +1449,9 @@ var CDN = class {
1444
1449
  * width: 320,
1445
1450
  * format: 'webp',
1446
1451
  * });
1447
- * console.log(`Thumbnail URL: ${thumbnail.url}`);
1452
+ * if (thumbnail.status === 'ready') {
1453
+ * console.log(`Thumbnail URL: ${thumbnail.url}`);
1454
+ * }
1448
1455
  * ```
1449
1456
  */
1450
1457
  async getThumbnail(request) {
@@ -1454,20 +1461,52 @@ var CDN = class {
1454
1461
  if (request.format) params.set("format", request.format);
1455
1462
  return this.http.get(`/cdn/video/thumbnail/${request.assetId}?${params.toString()}`);
1456
1463
  }
1464
+ /**
1465
+ * Get the thumbnail at a specific timestamp, waiting for generation to complete
1466
+ *
1467
+ * Calls {@link getThumbnail} and polls until the thumbnail is ready.
1468
+ *
1469
+ * @example
1470
+ * ```typescript
1471
+ * const thumbnail = await cdn.getThumbnailAndWait({
1472
+ * assetId: 'video-asset-id',
1473
+ * timestamp: 3.5,
1474
+ * });
1475
+ * console.log(`Thumbnail URL: ${thumbnail.url}`);
1476
+ * ```
1477
+ */
1478
+ async getThumbnailAndWait(request, options = {}) {
1479
+ const { pollInterval = 1e3, timeout = 6e4 } = options;
1480
+ const startTime = Date.now();
1481
+ while (true) {
1482
+ const thumbnail = await this.getThumbnail(request);
1483
+ if (thumbnail.status === "ready") {
1484
+ return thumbnail;
1485
+ }
1486
+ if (Date.now() - startTime >= timeout) {
1487
+ throw new Error("Thumbnail generation timed out");
1488
+ }
1489
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
1490
+ }
1491
+ }
1457
1492
  /**
1458
1493
  * Regenerate a thumbnail for a video (force regeneration even if one exists)
1459
1494
  *
1460
- * Useful for retrying failed thumbnail generation or regenerating with different settings.
1495
+ * Useful for retrying failed thumbnail generation or regenerating with
1496
+ * different settings. Regeneration is async: poll {@link getThumbnail} (or
1497
+ * use {@link getThumbnailAndWait}) at the same timestamp until the new
1498
+ * frame is ready.
1461
1499
  *
1462
1500
  * @example
1463
1501
  * ```typescript
1464
- * const result = await cdn.regenerateThumbnail({
1502
+ * await cdn.regenerateThumbnail({
1465
1503
  * assetId: 'video-asset-id',
1466
1504
  * timestamp: 5, // 5 seconds into the video
1467
1505
  * width: 1280,
1468
1506
  * format: 'jpg',
1469
1507
  * });
1470
- * console.log(`Thumbnail regeneration queued: ${result.status}`);
1508
+ * const thumbnail = await cdn.getThumbnailAndWait({ assetId: 'video-asset-id', timestamp: 5 });
1509
+ * console.log(`Thumbnail URL: ${thumbnail.url}`);
1471
1510
  * ```
1472
1511
  */
1473
1512
  async regenerateThumbnail(request) {
@@ -1918,6 +1957,36 @@ var CDN = class {
1918
1957
  const query = params.toString();
1919
1958
  return this.http.get(`/cdn/usage/storage-breakdown${query ? `?${query}` : ""}`);
1920
1959
  }
1960
+ /**
1961
+ * Get total stored bytes for a project or folder, derived assets included.
1962
+ *
1963
+ * Totals uploads plus everything the pipelines derived from them — video renditions, HLS
1964
+ * segments and manifests, thumbnails, GIFs — in one call. Use this to meter a plan limit:
1965
+ * paging `list()` and summing `size` counts uploads only, and an HLS ladder typically runs
1966
+ * well past the size of the source it came from.
1967
+ *
1968
+ * Check `unmeasuredAssets`. A nonzero value means some assets have derivatives whose bytes
1969
+ * have not been measured, so `totalBytes` is a floor rather than the full number.
1970
+ *
1971
+ * @example
1972
+ * ```typescript
1973
+ * const usage = await cdn.getStorageUsage({
1974
+ * projectSlug: 'my-project',
1975
+ * folder: '/customers/acme',
1976
+ * });
1977
+ * console.log(`${usage.totalFormatted} across ${usage.objectCount} objects`);
1978
+ * console.log(` uploads: ${usage.breakdown.originals.bytesFormatted}`);
1979
+ * console.log(` derived: ${usage.breakdown.derived.bytesFormatted}`);
1980
+ * ```
1981
+ */
1982
+ async getStorageUsage(request = {}) {
1983
+ const params = new URLSearchParams();
1984
+ if (request.projectSlug) params.set("projectSlug", request.projectSlug);
1985
+ if (request.environment) params.set("environment", request.environment);
1986
+ if (request.folder) params.set("folder", request.folder);
1987
+ const query = params.toString();
1988
+ return this.http.get(`/cdn/usage/storage${query ? `?${query}` : ""}`);
1989
+ }
1921
1990
  convertUsageDates(usage) {
1922
1991
  if (typeof usage.periodStart === "string") {
1923
1992
  usage.periodStart = new Date(usage.periodStart);
@@ -2092,6 +2161,33 @@ var CDN = class {
2092
2161
  * });
2093
2162
  * console.log(`Merge job started: ${job.id}`);
2094
2163
  * ```
2164
+ *
2165
+ * @example Composite a screen recording onto a held phone ("POV holding my phone"):
2166
+ * ```typescript
2167
+ * const job = await cdn.createMergeJob({
2168
+ * projectSlug: 'my-project',
2169
+ * inputs: [
2170
+ * { assetId: 'reaction-clip-id' },
2171
+ * {
2172
+ * assetId: 'app-recording-id', // the overlay clip
2173
+ * composite: {
2174
+ * backgroundAssetId: 'holding-phone-shot-id', // image or video
2175
+ * // Corner-pin onto the angled screen (background pixel coords, TL/TR/BL/BR)
2176
+ * quad: {
2177
+ * topLeft: { x: 320, y: 480 },
2178
+ * topRight: { x: 760, y: 500 },
2179
+ * bottomLeft: { x: 300, y: 1400 },
2180
+ * bottomRight: { x: 740, y: 1440 },
2181
+ * },
2182
+ * fit: 'cover',
2183
+ * // Screen area painted #F500FA in the background is keyed out, so the
2184
+ * // recording shows through and fingers over the screen occlude it
2185
+ * chromaKey: { color: '#F500FA', similarity: 0.34, blend: 0.06 },
2186
+ * },
2187
+ * },
2188
+ * ],
2189
+ * });
2190
+ * ```
2095
2191
  */
2096
2192
  async createMergeJob(request) {
2097
2193
  const response = await this.http.post("/cdn/video/merge", request);