ugcinc 4.1.45 → 4.1.48

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.
@@ -25,7 +25,7 @@ declare const definition: import("./types").NodeDefinition<"generator", {
25
25
  maxWidth: number | undefined;
26
26
  wordsPerSubtitle: number | undefined;
27
27
  enableAnimation: boolean | undefined;
28
- language: string | undefined;
28
+ language: string;
29
29
  outputMode: OutputMode;
30
30
  selectionMode: null;
31
31
  }, AutoCaptionNodeInputs, AutoCaptionNodeOutputs, false>;
@@ -29,7 +29,7 @@ const definition = (0, types_1.defineNode)({
29
29
  maxWidth: undefined,
30
30
  wordsPerSubtitle: undefined,
31
31
  enableAnimation: undefined,
32
- language: undefined,
32
+ language: 'en',
33
33
  outputMode: 'per-input',
34
34
  selectionMode: null,
35
35
  },
@@ -28,7 +28,7 @@ export declare const nodeDefinitions: {
28
28
  maxWidth: number | undefined;
29
29
  wordsPerSubtitle: number | undefined;
30
30
  enableAnimation: boolean | undefined;
31
- language: string | undefined;
31
+ language: string;
32
32
  outputMode: import("./types").OutputMode;
33
33
  selectionMode: null;
34
34
  }, import("./auto-caption").AutoCaptionNodeInputs, import("./auto-caption").AutoCaptionNodeOutputs, false> & {
package/dist/render.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { ApiResponse } from './types';
2
2
  import type { VideoEditorNodeConfig, DeduplicationInput } from './render/types';
3
3
  import type { ImageEditorNodeConfig } from './automations/nodes/image-composer';
4
+ import type { CreateDmMessage } from './automations/nodes/create-dm';
4
5
  export interface RenderJobResponse {
5
6
  job_id: string;
6
7
  status: string;
@@ -60,12 +61,13 @@ export interface SubmitScreenshotAnimationRenderJobParams {
60
61
  /** Duration to hold at end after animation completes (ms) - default 500 */
61
62
  holdDurationMs?: number;
62
63
  }
63
- export interface IgDmMessage {
64
+ interface IgDmMessageInternal {
64
65
  text: string;
65
66
  sender: 'user' | 'recipient';
66
67
  isStoryReply?: boolean;
67
68
  groupWithPrevious?: boolean;
68
69
  }
70
+ export type IgDmMessage = IgDmMessageInternal;
69
71
  export interface SubmitInstagramDmRenderJobParams {
70
72
  /** Receiver's username (shown in header) */
71
73
  receiverUsername: string;
@@ -74,17 +76,18 @@ export interface SubmitInstagramDmRenderJobParams {
74
76
  /** Theme - light or dark mode */
75
77
  theme: 'light' | 'dark';
76
78
  /** Messages in the conversation */
77
- messages: IgDmMessage[];
78
- /** Story image URL for story reply messages */
79
- storyImageUrl?: string;
79
+ messages: CreateDmMessage[];
80
+ /** Image attachment URL (used for story reply) */
81
+ imageAttachmentUrl?: string;
80
82
  }
81
- export interface ImDmMessage {
83
+ interface ImDmMessageInternal {
82
84
  id: string;
83
85
  sender: 'user' | 'recipient';
84
86
  text: string;
85
87
  imageUrl?: string;
86
88
  groupWithPrevious?: boolean;
87
89
  }
90
+ export type ImDmMessage = ImDmMessageInternal;
88
91
  export interface SubmitIMessageDmRenderJobParams {
89
92
  /** Username displayed in header */
90
93
  username: string;
@@ -95,7 +98,9 @@ export interface SubmitIMessageDmRenderJobParams {
95
98
  /** Status bar time */
96
99
  time: string;
97
100
  /** Messages in the conversation */
98
- messages: ImDmMessage[];
101
+ messages: CreateDmMessage[];
102
+ /** Image attachment URL (used for sender images with hasImage flag) */
103
+ imageAttachmentUrl?: string;
99
104
  /** Sender bubble color (default blue) */
100
105
  senderBubbleColor?: string;
101
106
  /** Whether to show read receipt */
@@ -146,3 +151,4 @@ export declare class RenderClient {
146
151
  */
147
152
  submitIMessageDmRenderJob(params: SubmitIMessageDmRenderJobParams): Promise<ApiResponse<RenderJobResponse>>;
148
153
  }
154
+ export {};
package/dist/render.js CHANGED
@@ -4,6 +4,56 @@ exports.RenderClient = void 0;
4
4
  // Modal renderer endpoints
5
5
  const RENDER_SUBMIT_URL = "https://aidangollan--ugcinc-render-renderer-submit-job.modal.run";
6
6
  const RENDER_STATUS_URL = "https://aidangollan--ugcinc-render-renderer-get-status.modal.run";
7
+ // =============================================================================
8
+ // DM Message Transformation Helpers
9
+ // =============================================================================
10
+ /**
11
+ * Auto-detect groupWithPrevious for messages based on consecutive same-sender
12
+ */
13
+ function addGroupWithPrevious(messages) {
14
+ return messages.map((msg, index) => {
15
+ if (index === 0) {
16
+ return { ...msg, groupWithPrevious: false };
17
+ }
18
+ const prevMsg = messages[index - 1];
19
+ const shouldGroup = prevMsg !== undefined && msg.sender === prevMsg.sender;
20
+ return { ...msg, groupWithPrevious: shouldGroup };
21
+ });
22
+ }
23
+ /**
24
+ * Generate unique message IDs for iMessage messages
25
+ */
26
+ function generateMessageId(index) {
27
+ return `msg-${index}-${Date.now()}`;
28
+ }
29
+ /**
30
+ * Transform CreateDmMessage[] to IgDmMessageInternal[] for Instagram DM
31
+ */
32
+ function transformToInstagramMessages(messages, imageAttachmentUrl) {
33
+ const processedMessages = addGroupWithPrevious(messages);
34
+ return processedMessages.map((msg) => ({
35
+ text: msg.text,
36
+ sender: msg.sender,
37
+ isStoryReply: msg.hasImage && imageAttachmentUrl ? true : false,
38
+ groupWithPrevious: msg.groupWithPrevious,
39
+ }));
40
+ }
41
+ /**
42
+ * Transform CreateDmMessage[] to ImDmMessageInternal[] for iMessage DM
43
+ */
44
+ function transformToIMessageMessages(messages, imageAttachmentUrl) {
45
+ const processedMessages = addGroupWithPrevious(messages);
46
+ return processedMessages.map((msg, index) => ({
47
+ id: generateMessageId(index),
48
+ sender: msg.sender,
49
+ text: msg.text,
50
+ imageUrl: msg.hasImage && msg.sender === 'user' ? imageAttachmentUrl : undefined,
51
+ groupWithPrevious: msg.groupWithPrevious,
52
+ }));
53
+ }
54
+ // =============================================================================
55
+ // Render Client
56
+ // =============================================================================
7
57
  /**
8
58
  * Client for rendering operations
9
59
  * Note: This calls Modal endpoints directly, not the UGC Inc API
@@ -311,6 +361,9 @@ class RenderClient {
311
361
  */
312
362
  async submitInstagramDmRenderJob(params) {
313
363
  try {
364
+ // Transform CreateDmMessage[] to internal format
365
+ const transformedMessages = transformToInstagramMessages(params.messages, params.imageAttachmentUrl);
366
+ const hasStoryReply = params.messages.some(msg => msg.hasImage);
314
367
  const response = await fetch(RENDER_SUBMIT_URL, {
315
368
  method: 'POST',
316
369
  headers: {
@@ -323,8 +376,8 @@ class RenderClient {
323
376
  receiverUsername: params.receiverUsername,
324
377
  receiverProfilePicUrl: params.receiverProfilePicUrl,
325
378
  theme: params.theme,
326
- messages: params.messages,
327
- storyImageUrl: params.storyImageUrl,
379
+ messages: transformedMessages,
380
+ storyImageUrl: hasStoryReply ? params.imageAttachmentUrl : undefined,
328
381
  },
329
382
  },
330
383
  output_type: 'image',
@@ -374,6 +427,8 @@ class RenderClient {
374
427
  */
375
428
  async submitIMessageDmRenderJob(params) {
376
429
  try {
430
+ // Transform CreateDmMessage[] to internal format
431
+ const transformedMessages = transformToIMessageMessages(params.messages, params.imageAttachmentUrl);
377
432
  const response = await fetch(RENDER_SUBMIT_URL, {
378
433
  method: 'POST',
379
434
  headers: {
@@ -387,7 +442,7 @@ class RenderClient {
387
442
  profilePicUrl: params.profilePicUrl,
388
443
  theme: params.theme,
389
444
  time: params.time,
390
- messages: params.messages,
445
+ messages: transformedMessages,
391
446
  senderBubbleColor: params.senderBubbleColor,
392
447
  showReadReceipt: params.showReadReceipt,
393
448
  readReceiptText: params.readReceiptText,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ugcinc",
3
- "version": "4.1.45",
3
+ "version": "4.1.48",
4
4
  "description": "TypeScript/JavaScript client for the UGC Inc API",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",