Skip to content

Commit 953c1ce

Browse files
Invitations
1 parent 5dc7f01 commit 953c1ce

18 files changed

Lines changed: 223 additions & 129 deletions

examples/connections.ts

Lines changed: 61 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
import LinkedApi, { LinkedApiError } from '@linkedapi/node';
1+
import LinkedApi, {
2+
INVITATION_TYPE,
3+
LinkedApiError,
4+
TRetrieveInvitationsResult,
5+
} from '@linkedapi/node';
26

37
async function connectionsExample(): Promise<void> {
4-
58
const linkedapi = new LinkedApi({
69
linkedApiToken: process.env.LINKED_API_TOKEN!,
710
identificationToken: process.env.IDENTIFICATION_TOKEN!,
@@ -17,12 +20,11 @@ async function connectionsExample(): Promise<void> {
1720
await sendConnectionRequest(linkedapi, targetPersonUrl);
1821
await retrievePendingRequests(linkedapi);
1922
await withdrawConnectionRequest(linkedapi, targetPersonUrl);
20-
await retrieveConnectionRequests(linkedapi);
21-
await acceptConnectionRequest(linkedapi, targetPersonUrl2);
22-
await ignoreConnectionRequest(linkedapi, targetPersonUrl2);
23+
await retrieveInvitations(linkedapi);
24+
await acceptInvitation(linkedapi, targetPersonUrl2);
25+
await ignoreInvitation(linkedapi, targetPersonUrl2);
2326
await retrieveConnections(linkedapi);
2427
await removeConnection(linkedapi, targetPersonUrl2);
25-
2628
} catch (error) {
2729
if (error instanceof LinkedApiError) {
2830
console.error('🚨 Linked API Error:', error.message);
@@ -59,7 +61,7 @@ async function sendConnectionRequest(linkedapi: LinkedApi, personUrl: string): P
5961

6062
const requestParams = {
6163
personUrl: personUrl,
62-
note: 'Hi! I\'d love to connect and discuss potential collaboration opportunities. Looking forward to connecting with you!',
64+
note: "Hi! I'd love to connect and discuss potential collaboration opportunities. Looking forward to connecting with you!",
6365
email: 'example@gmail.com',
6466
};
6567

@@ -199,53 +201,77 @@ async function removeConnection(linkedapi: LinkedApi, personUrl: string): Promis
199201
}
200202
}
201203

202-
async function retrieveConnectionRequests(linkedapi: LinkedApi): Promise<void> {
203-
console.log('\n📥 Retrieving incoming connection requests...');
204+
async function retrieveInvitations(linkedapi: LinkedApi): Promise<void> {
205+
console.log('\n📥 Retrieving incoming invitations...');
204206

205-
const workflow = await linkedapi.retrieveConnectionRequests.execute();
206-
console.log('📥 Retrieve connection requests workflow started:', workflow.workflowId);
207+
const workflow = await linkedapi.retrieveInvitations.execute();
208+
console.log('📥 Retrieve invitations workflow started:', workflow.workflowId);
207209

208-
const requestsResult = await linkedapi.retrieveConnectionRequests.result(workflow.workflowId);
209-
if (requestsResult.data) {
210-
const requests = requestsResult.data;
211-
console.log('✅ Incoming requests retrieval completed');
212-
console.log(`📊 Found ${requests.length} incoming requests`);
213-
requests.forEach((request, index) => {
214-
console.log(` ${index + 1}. ${request.name}`);
215-
console.log(` Profile: ${request.publicUrl}`);
216-
console.log(` Headline: ${request.headline}`);
217-
});
210+
const invitationsResult = await linkedapi.retrieveInvitations.result(workflow.workflowId);
211+
if (invitationsResult.data) {
212+
const invitations = invitationsResult.data;
213+
console.log('✅ Incoming invitations retrieval completed');
214+
console.log(`📊 Found ${invitations.length} incoming invitations`);
215+
for (const [index, invitation] of invitations.entries()) {
216+
console.log(` ${index + 1}. ${invitation.name}`);
217+
logInvitationTarget(invitation);
218+
}
218219
}
219-
if (requestsResult.errors.length > 0) {
220-
console.error('🚨 Errors:', JSON.stringify(requestsResult.errors, null, 2));
220+
if (invitationsResult.errors.length > 0) {
221+
console.error('🚨 Errors:', JSON.stringify(invitationsResult.errors, null, 2));
221222
}
222223
}
223224

224-
async function acceptConnectionRequest(linkedapi: LinkedApi, personUrl: string): Promise<void> {
225-
console.log('\n🤝 Accepting incoming connection request...');
225+
async function acceptInvitation(linkedapi: LinkedApi, personUrl: string): Promise<void> {
226+
console.log('\n🤝 Accepting incoming invitation...');
226227

227-
const workflow = await linkedapi.acceptConnectionRequest.execute({ personUrl });
228-
console.log('🤝 Accept connection request workflow started:', workflow.workflowId);
228+
const workflow = await linkedapi.acceptInvitation.execute({
229+
invitationType: INVITATION_TYPE.connect,
230+
personUrl,
231+
});
232+
console.log('🤝 Accept invitation workflow started:', workflow.workflowId);
229233

230-
const acceptResult = await linkedapi.acceptConnectionRequest.result(workflow.workflowId);
234+
const acceptResult = await linkedapi.acceptInvitation.result(workflow.workflowId);
231235
if (acceptResult.errors.length > 0) {
232236
console.error('🚨 Errors:', JSON.stringify(acceptResult.errors, null, 2));
233237
} else {
234-
console.log('✅ Connection request accepted successfully');
238+
console.log('✅ Invitation accepted successfully');
235239
}
236240
}
237241

238-
async function ignoreConnectionRequest(linkedapi: LinkedApi, personUrl: string): Promise<void> {
239-
console.log('\n🙈 Ignoring incoming connection request...');
242+
async function ignoreInvitation(linkedapi: LinkedApi, personUrl: string): Promise<void> {
243+
console.log('\n🙈 Ignoring incoming invitation...');
240244

241-
const workflow = await linkedapi.ignoreConnectionRequest.execute({ personUrl });
242-
console.log('🙈 Ignore connection request workflow started:', workflow.workflowId);
245+
const workflow = await linkedapi.ignoreInvitation.execute({
246+
invitationType: INVITATION_TYPE.connect,
247+
personUrl,
248+
});
249+
console.log('🙈 Ignore invitation workflow started:', workflow.workflowId);
243250

244-
const ignoreResult = await linkedapi.ignoreConnectionRequest.result(workflow.workflowId);
251+
const ignoreResult = await linkedapi.ignoreInvitation.result(workflow.workflowId);
245252
if (ignoreResult.errors.length > 0) {
246253
console.error('🚨 Errors:', JSON.stringify(ignoreResult.errors, null, 2));
247254
} else {
248-
console.log('✅ Connection request ignored successfully');
255+
console.log('✅ Invitation ignored successfully');
256+
}
257+
}
258+
259+
function logInvitationTarget(invitation: TRetrieveInvitationsResult): void {
260+
console.log(` Type: ${invitation.invitationType}`);
261+
switch (invitation.invitationType) {
262+
case INVITATION_TYPE.connect:
263+
console.log(` Profile: ${invitation.publicUrl}`);
264+
console.log(` Headline: ${invitation.headline}`);
265+
console.log(` Note: ${invitation.note}`);
266+
break;
267+
case INVITATION_TYPE.companyFollow:
268+
console.log(` Company: ${invitation.companyName}`);
269+
console.log(` Company URL: ${invitation.companyUrl}`);
270+
break;
271+
case INVITATION_TYPE.newsletterSubscribe:
272+
console.log(` Newsletter: ${invitation.newsletterName}`);
273+
console.log(` Newsletter URL: ${invitation.newsletterUrl}`);
274+
break;
249275
}
250276
}
251277

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.3.1",
3+
"version": "2.3.2",
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/core/operation.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ export const OPERATION_NAME = {
2424
sendConnectionRequest: 'sendConnectionRequest',
2525
withdrawConnectionRequest: 'withdrawConnectionRequest',
2626
retrievePendingRequests: 'retrievePendingRequests',
27-
retrieveConnectionRequests: 'retrieveConnectionRequests',
28-
acceptConnectionRequest: 'acceptConnectionRequest',
29-
ignoreConnectionRequest: 'ignoreConnectionRequest',
27+
retrieveInvitations: 'retrieveInvitations',
28+
acceptInvitation: 'acceptInvitation',
29+
ignoreInvitation: 'ignoreInvitation',
3030
retrieveConnections: 'retrieveConnections',
3131
removeConnection: 'removeConnection',
3232
searchCompanies: 'searchCompanies',

src/index.ts

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Operation } from './core';
22
import { buildLinkedApiHttpClient } from './core/linked-api-http-client';
33
import type { TMappedResponse } from './mappers/base-mapper.abstract';
44
import {
5-
AcceptConnectionRequest,
5+
AcceptInvitation,
66
CheckConnectionStatus,
77
CommentOnPost,
88
CreatePost,
@@ -11,7 +11,7 @@ import {
1111
FetchJob,
1212
FetchPerson,
1313
FetchPost,
14-
IgnoreConnectionRequest,
14+
IgnoreInvitation,
1515
ManageConversation,
1616
NvFetchCompany,
1717
NvFetchPerson,
@@ -23,8 +23,8 @@ import {
2323
NvSyncInbox,
2424
ReactToPost,
2525
RemoveConnection,
26-
RetrieveConnectionRequests,
2726
RetrieveConnections,
27+
RetrieveInvitations,
2828
RetrievePendingRequests,
2929
RetrievePerformance,
3030
RetrieveSSI,
@@ -111,9 +111,9 @@ class LinkedApi {
111111
this.sendConnectionRequest = new SendConnectionRequest(this.httpClient);
112112
this.withdrawConnectionRequest = new WithdrawConnectionRequest(this.httpClient);
113113
this.retrievePendingRequests = new RetrievePendingRequests(this.httpClient);
114-
this.retrieveConnectionRequests = new RetrieveConnectionRequests(this.httpClient);
115-
this.acceptConnectionRequest = new AcceptConnectionRequest(this.httpClient);
116-
this.ignoreConnectionRequest = new IgnoreConnectionRequest(this.httpClient);
114+
this.retrieveInvitations = new RetrieveInvitations(this.httpClient);
115+
this.acceptInvitation = new AcceptInvitation(this.httpClient);
116+
this.ignoreInvitation = new IgnoreInvitation(this.httpClient);
117117
this.retrieveConnections = new RetrieveConnections(this.httpClient);
118118
this.removeConnection = new RemoveConnection(this.httpClient);
119119
this.searchCompanies = new SearchCompanies(this.httpClient);
@@ -148,9 +148,9 @@ class LinkedApi {
148148
this.sendConnectionRequest,
149149
this.withdrawConnectionRequest,
150150
this.retrievePendingRequests,
151-
this.retrieveConnectionRequests,
152-
this.acceptConnectionRequest,
153-
this.ignoreConnectionRequest,
151+
this.retrieveInvitations,
152+
this.acceptInvitation,
153+
this.ignoreInvitation,
154154
this.retrieveConnections,
155155
this.removeConnection,
156156
this.searchCompanies,
@@ -1025,7 +1025,7 @@ class LinkedApi {
10251025
* @param params - Parameters including the person's URL and optional connection message
10261026
* @returns Promise resolving to the connection request action
10271027
*
1028-
* @see {@link https://linkedapi.io/docs/working-with-connection-requests/ Working with Connection Requests Documentation}
1028+
* @see {@link https://linkedapi.io/docs/working-with-invitations/ Working with Invitations Documentation}
10291029
* @see {@link https://linkedapi.io/docs/action-st-send-connection-request/ st.sendConnectionRequest Action Documentation}
10301030
*
10311031
* @example
@@ -1076,7 +1076,7 @@ class LinkedApi {
10761076
* @param params - Parameters including the person's URL
10771077
* @returns Promise resolving to the withdrawal action
10781078
*
1079-
* @see {@link https://linkedapi.io/docs/working-with-connection-requests/ Working with Connection Requests Documentation}
1079+
* @see {@link https://linkedapi.io/docs/working-with-invitations/ Working with Invitations Documentation}
10801080
* @see {@link https://linkedapi.io/docs/action-st-withdraw-connection-request/ st.withdrawConnectionRequest Action Documentation}
10811081
*
10821082
* @example
@@ -1099,7 +1099,7 @@ class LinkedApi {
10991099
*
11001100
* @returns Promise resolving to an object containing an array of pending requests
11011101
*
1102-
* @see {@link https://linkedapi.io/docs/working-with-connection-requests/ Working with Connection Requests Documentation}
1102+
* @see {@link https://linkedapi.io/docs/working-with-invitations/ Working with Invitations Documentation}
11031103
* @see {@link https://linkedapi.io/docs/action-st-retrieve-pending-requests/ st.retrievePendingRequests Action Documentation}
11041104
*
11051105
* @example
@@ -1120,67 +1120,75 @@ class LinkedApi {
11201120
public retrievePendingRequests: RetrievePendingRequests;
11211121

11221122
/**
1123-
* Retrieve incoming connection requests (invitations others have sent you).
1123+
* Retrieve incoming connection, company-follow, and newsletter-subscription invitations.
11241124
*
1125-
* This method fetches the list of received connection requests from your invitation manager.
1125+
* This method fetches the list of received invitations from your invitation manager.
11261126
*
1127-
* @returns Promise resolving to an object containing an array of received requests
1127+
* @returns Promise resolving to an object containing an array of received invitations
11281128
*
1129-
* @see {@link https://linkedapi.io/docs/working-with-connection-requests/ Working with Connection Requests Documentation}
1130-
* @see {@link https://linkedapi.io/docs/action-st-retrieve-connection-requests/ st.retrieveConnectionRequests Action Documentation}
1129+
* @see {@link https://linkedapi.io/docs/working-with-invitations/ Working with Invitations Documentation}
1130+
* @see {@link https://linkedapi.io/docs/action-st-retrieve-invitations/ st.retrieveInvitations Action Documentation}
11311131
*
11321132
* @example
11331133
* ```typescript
1134-
* const workflow = await linkedapi.retrieveConnectionRequests.execute();
1134+
* const workflow = await linkedapi.retrieveInvitations.execute();
11351135
*
1136-
* const result = await linkedapi.retrieveConnectionRequests.result(workflow.workflowId);
1136+
* const result = await linkedapi.retrieveInvitations.result(workflow.workflowId);
11371137
* if (result.data) {
1138-
* result.data.forEach(request => {
1139-
* console.log(`${request.name}: ${request.headline}`);
1140-
* console.log(`Profile: ${request.publicUrl}`);
1141-
* });
1138+
* for (const invitation of result.data) {
1139+
* console.log(`${invitation.invitationType}: ${invitation.name}`);
1140+
* if (invitation.invitationType === "connect") {
1141+
* console.log(`Profile: ${invitation.publicUrl}`);
1142+
* } else if (invitation.invitationType === "companyFollow") {
1143+
* console.log(`Company: ${invitation.companyUrl}`);
1144+
* } else {
1145+
* console.log(`Newsletter: ${invitation.newsletterUrl}`);
1146+
* }
1147+
* }
11421148
* }
11431149
* ```
11441150
*/
1145-
public retrieveConnectionRequests: RetrieveConnectionRequests;
1151+
public retrieveInvitations: RetrieveInvitations;
11461152

11471153
/**
1148-
* Accept an incoming connection request from a person's profile.
1154+
* Accept an incoming connection, company-follow, or newsletter-subscription invitation.
11491155
*
1150-
* @param params - Parameters including the person's profile URL
1156+
* @param params - Invitation type and its matching target URL
11511157
*
1152-
* @see {@link https://linkedapi.io/docs/working-with-connection-requests/ Working with Connection Requests Documentation}
1153-
* @see {@link https://linkedapi.io/docs/action-st-accept-connection-request/ st.acceptConnectionRequest Action Documentation}
1158+
* @see {@link https://linkedapi.io/docs/working-with-invitations/ Working with Invitations Documentation}
1159+
* @see {@link https://linkedapi.io/docs/action-st-accept-invitation/ st.acceptInvitation Action Documentation}
11541160
*
11551161
* @example
11561162
* ```typescript
1157-
* const workflow = await linkedapi.acceptConnectionRequest.execute({
1163+
* const workflow = await linkedapi.acceptInvitation.execute({
1164+
* invitationType: "connect",
11581165
* personUrl: "https://www.linkedin.com/in/john-doe",
11591166
* });
11601167
*
1161-
* await linkedapi.acceptConnectionRequest.result(workflow.workflowId);
1168+
* await linkedapi.acceptInvitation.result(workflow.workflowId);
11621169
* ```
11631170
*/
1164-
public acceptConnectionRequest: AcceptConnectionRequest;
1171+
public acceptInvitation: AcceptInvitation;
11651172

11661173
/**
1167-
* Ignore an incoming connection request from a person's profile.
1174+
* Ignore an incoming connection, company-follow, or newsletter-subscription invitation.
11681175
*
1169-
* @param params - Parameters including the person's profile URL
1176+
* @param params - Invitation type and its matching target URL
11701177
*
1171-
* @see {@link https://linkedapi.io/docs/working-with-connection-requests/ Working with Connection Requests Documentation}
1172-
* @see {@link https://linkedapi.io/docs/action-st-ignore-connection-request/ st.ignoreConnectionRequest Action Documentation}
1178+
* @see {@link https://linkedapi.io/docs/working-with-invitations/ Working with Invitations Documentation}
1179+
* @see {@link https://linkedapi.io/docs/action-st-ignore-invitation/ st.ignoreInvitation Action Documentation}
11731180
*
11741181
* @example
11751182
* ```typescript
1176-
* const workflow = await linkedapi.ignoreConnectionRequest.execute({
1177-
* personUrl: "https://www.linkedin.com/in/john-doe",
1183+
* const workflow = await linkedapi.ignoreInvitation.execute({
1184+
* invitationType: "newsletterSubscribe",
1185+
* newsletterUrl: "https://www.linkedin.com/newsletters/example-1234567890/",
11781186
* });
11791187
*
1180-
* await linkedapi.ignoreConnectionRequest.result(workflow.workflowId);
1188+
* await linkedapi.ignoreInvitation.result(workflow.workflowId);
11811189
* ```
11821190
*/
1183-
public ignoreConnectionRequest: IgnoreConnectionRequest;
1191+
public ignoreInvitation: IgnoreInvitation;
11841192

11851193
/**
11861194
* Retrieve your LinkedIn connections with optional filtering.

src/operations/accept-connection-request.ts

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Operation, TOperationName } from '../core';
2+
import { VoidWorkflowMapper } from '../mappers';
3+
import { TAcceptInvitationParams } from '../types';
4+
5+
export class AcceptInvitation extends Operation<TAcceptInvitationParams, void> {
6+
public override readonly operationName: TOperationName = 'acceptInvitation';
7+
protected override readonly mapper = new VoidWorkflowMapper<TAcceptInvitationParams>(
8+
'st.acceptInvitation',
9+
);
10+
}

src/operations/ignore-connection-request.ts

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { Operation, TOperationName } from '../core';
2+
import { VoidWorkflowMapper } from '../mappers';
3+
import { TIgnoreInvitationParams } from '../types';
4+
5+
export class IgnoreInvitation extends Operation<TIgnoreInvitationParams, void> {
6+
public override readonly operationName: TOperationName = 'ignoreInvitation';
7+
protected override readonly mapper = new VoidWorkflowMapper<TIgnoreInvitationParams>(
8+
'st.ignoreInvitation',
9+
);
10+
}

0 commit comments

Comments
 (0)