Skip to content

Commit 98f6b26

Browse files
Add manage conversation after sending message
1 parent 26f0739 commit 98f6b26

5 files changed

Lines changed: 72 additions & 3 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@linkedapi/node",
3-
"version": "2.2.0",
3+
"version": "2.2.1",
44
"description": "Control your LinkedIn accounts and retrieve real-time data, all through this Node.js SDK.",
55
"main": "dist/index.js",
66
"types": "dist/index.d.ts",

src/mappers/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export * from './base-mapper.abstract';
22
export * from './then-workflow-mapper.abstract';
33
export * from './array-workflow-mapper';
4+
export * from './send-message-mapper';
45
export * from './simple-workflow-mapper';
56
export * from './void-workflow-mapper';

src/mappers/send-message-mapper.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import { TSendMessageParams } from '../types';
2+
import { TLinkedApiActionError } from '../types/errors';
3+
import type {
4+
TActionResponse,
5+
TWorkflowCompletion,
6+
TWorkflowDefinition,
7+
TWorkflowSingleData,
8+
} from '../types/workflows';
9+
10+
import { BaseMapper, TMappedResponse } from './base-mapper.abstract';
11+
12+
export class SendMessageMapper extends BaseMapper<TSendMessageParams, void> {
13+
public mapRequest(params: TSendMessageParams): TWorkflowDefinition {
14+
const { manageConversation, ...rest } = params;
15+
16+
const definition: Record<string, unknown> = {
17+
actionType: 'st.sendMessage',
18+
...rest,
19+
};
20+
21+
// The child st.manageConversation acts on the conversation this message was sent into, so it
22+
// carries only `operation` — no threadId. Core rejects a threadId on a child manageConversation.
23+
// Guard on `operation` so an empty passthrough (e.g. Make sending `{ operation: '' }`) is ignored.
24+
if (manageConversation?.operation) {
25+
definition.then = {
26+
actionType: 'st.manageConversation',
27+
operation: manageConversation.operation,
28+
};
29+
}
30+
31+
return definition as unknown as TWorkflowDefinition;
32+
}
33+
34+
public mapResponse(completion: TWorkflowCompletion): TMappedResponse<void> {
35+
if (Array.isArray(completion)) {
36+
return {
37+
data: undefined,
38+
errors: completion.map((action) => action.error).filter(Boolean) as TLinkedApiActionError[],
39+
};
40+
}
41+
42+
const errors: TLinkedApiActionError[] = [];
43+
44+
if (completion.error) {
45+
errors.push(completion.error);
46+
}
47+
48+
const thenActions = (completion.data as TWorkflowSingleData | undefined)?.then;
49+
if (thenActions) {
50+
const childActions = Array.isArray(thenActions) ? thenActions : [thenActions];
51+
for (const child of childActions as TActionResponse[]) {
52+
if (child.error) {
53+
errors.push(child.error);
54+
}
55+
}
56+
}
57+
58+
return {
59+
data: undefined,
60+
errors,
61+
};
62+
}
63+
}

src/operations/send-message.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Operation, TOperationName } from '../core';
2-
import { VoidWorkflowMapper } from '../mappers/void-workflow-mapper';
2+
import { SendMessageMapper } from '../mappers/send-message-mapper';
33
import { TSendMessageParams } from '../types';
44

55
export class SendMessage extends Operation<TSendMessageParams, void> {
66
public override readonly operationName: TOperationName = 'sendMessage';
7-
protected override readonly mapper = new VoidWorkflowMapper<TSendMessageParams>('st.sendMessage');
7+
protected override readonly mapper = new SendMessageMapper();
88
}

src/types/actions/message.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ export interface TSendMessageParams extends TBaseActionParams {
44
personUrl?: string;
55
text: string;
66
threadId?: string;
7+
manageConversation?: TSendMessageManageConversation;
8+
}
9+
10+
export interface TSendMessageManageConversation {
11+
operation: TManageConversationOperation;
712
}
813

914
export interface TSyncConversationParams extends TBaseActionParams {

0 commit comments

Comments
 (0)