@opentabs-dev/opentabs-plugin-linkedin 0.0.74

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 (41) hide show
  1. package/README.md +159 -0
  2. package/dist/adapter.iife.js +14733 -0
  3. package/dist/adapter.iife.js.map +7 -0
  4. package/dist/index.d.ts +14 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +32 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/linkedin-api.d.ts +34 -0
  9. package/dist/linkedin-api.d.ts.map +1 -0
  10. package/dist/linkedin-api.js +200 -0
  11. package/dist/linkedin-api.js.map +1 -0
  12. package/dist/tools/get-conversation-messages.d.ts +14 -0
  13. package/dist/tools/get-conversation-messages.d.ts.map +1 -0
  14. package/dist/tools/get-conversation-messages.js +27 -0
  15. package/dist/tools/get-conversation-messages.js.map +1 -0
  16. package/dist/tools/get-current-user.d.ts +14 -0
  17. package/dist/tools/get-current-user.d.ts.map +1 -0
  18. package/dist/tools/get-current-user.js +21 -0
  19. package/dist/tools/get-current-user.js.map +1 -0
  20. package/dist/tools/get-mailbox-counts.d.ts +8 -0
  21. package/dist/tools/get-mailbox-counts.d.ts.map +1 -0
  22. package/dist/tools/get-mailbox-counts.js +26 -0
  23. package/dist/tools/get-mailbox-counts.js.map +1 -0
  24. package/dist/tools/get-user-profile.d.ts +19 -0
  25. package/dist/tools/get-user-profile.d.ts.map +1 -0
  26. package/dist/tools/get-user-profile.js +37 -0
  27. package/dist/tools/get-user-profile.js.map +1 -0
  28. package/dist/tools/list-conversations.d.ts +17 -0
  29. package/dist/tools/list-conversations.d.ts.map +1 -0
  30. package/dist/tools/list-conversations.js +26 -0
  31. package/dist/tools/list-conversations.js.map +1 -0
  32. package/dist/tools/schemas.d.ts +213 -0
  33. package/dist/tools/schemas.d.ts.map +1 -0
  34. package/dist/tools/schemas.js +128 -0
  35. package/dist/tools/schemas.js.map +1 -0
  36. package/dist/tools/send-message.d.ts +8 -0
  37. package/dist/tools/send-message.d.ts.map +1 -0
  38. package/dist/tools/send-message.js +38 -0
  39. package/dist/tools/send-message.js.map +1 -0
  40. package/dist/tools.json +421 -0
  41. package/package.json +54 -0
@@ -0,0 +1,421 @@
1
+ {
2
+ "sdkVersion": "0.0.74",
3
+ "iconSvg": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"#0A66C2\" d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\"/></svg>",
4
+ "iconInactiveSvg": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"#999999\" d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\"/></svg>",
5
+ "iconDarkSvg": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"#0A66C2\" d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\"/></svg>",
6
+ "iconDarkInactiveSvg": "<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"#999999\" d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\"/></svg>",
7
+ "tools": [
8
+ {
9
+ "name": "get_current_user",
10
+ "displayName": "Get Current User",
11
+ "description": "Get the authenticated LinkedIn user profile including name, headline, public identifier, and profile picture.",
12
+ "summary": "Get the current authenticated user",
13
+ "icon": "user",
14
+ "group": "Profile",
15
+ "input_schema": {
16
+ "type": "object",
17
+ "properties": {},
18
+ "additionalProperties": false
19
+ },
20
+ "output_schema": {
21
+ "type": "object",
22
+ "properties": {
23
+ "user": {
24
+ "type": "object",
25
+ "properties": {
26
+ "plain_id": {
27
+ "type": "number",
28
+ "description": "Numeric LinkedIn member ID"
29
+ },
30
+ "first_name": {
31
+ "type": "string",
32
+ "description": "First name"
33
+ },
34
+ "last_name": {
35
+ "type": "string",
36
+ "description": "Last name"
37
+ },
38
+ "occupation": {
39
+ "type": "string",
40
+ "description": "Current headline or occupation"
41
+ },
42
+ "public_identifier": {
43
+ "type": "string",
44
+ "description": "Public profile slug (e.g., \"williamhgates\")"
45
+ },
46
+ "profile_urn": {
47
+ "type": "string",
48
+ "description": "Profile URN (e.g., \"urn:li:fsd_profile:...\")"
49
+ },
50
+ "profile_picture_url": {
51
+ "type": "string",
52
+ "description": "Profile picture URL"
53
+ },
54
+ "is_premium": {
55
+ "type": "boolean",
56
+ "description": "Whether the user has a Premium subscription"
57
+ }
58
+ },
59
+ "required": [
60
+ "plain_id",
61
+ "first_name",
62
+ "last_name",
63
+ "occupation",
64
+ "public_identifier",
65
+ "profile_urn",
66
+ "profile_picture_url",
67
+ "is_premium"
68
+ ],
69
+ "additionalProperties": false,
70
+ "description": "Current user profile"
71
+ }
72
+ },
73
+ "required": [
74
+ "user"
75
+ ],
76
+ "additionalProperties": false
77
+ }
78
+ },
79
+ {
80
+ "name": "get_user_profile",
81
+ "displayName": "Get User Profile",
82
+ "description": "Get a LinkedIn user profile by their public identifier (the slug from their profile URL, e.g., \"williamhgates\" for linkedin.com/in/williamhgates). Returns name, headline, location, and profile picture.",
83
+ "summary": "Get a user's LinkedIn profile",
84
+ "icon": "user-search",
85
+ "group": "Profile",
86
+ "input_schema": {
87
+ "type": "object",
88
+ "properties": {
89
+ "public_identifier": {
90
+ "type": "string",
91
+ "description": "Public profile identifier — the slug from the LinkedIn profile URL (e.g., \"williamhgates\")"
92
+ }
93
+ },
94
+ "required": [
95
+ "public_identifier"
96
+ ],
97
+ "additionalProperties": false
98
+ },
99
+ "output_schema": {
100
+ "type": "object",
101
+ "properties": {
102
+ "profile": {
103
+ "type": "object",
104
+ "properties": {
105
+ "first_name": {
106
+ "type": "string",
107
+ "description": "First name"
108
+ },
109
+ "last_name": {
110
+ "type": "string",
111
+ "description": "Last name"
112
+ },
113
+ "headline": {
114
+ "type": "string",
115
+ "description": "Professional headline"
116
+ },
117
+ "public_identifier": {
118
+ "type": "string",
119
+ "description": "Public profile slug"
120
+ },
121
+ "profile_urn": {
122
+ "type": "string",
123
+ "description": "Profile URN"
124
+ },
125
+ "profile_picture_url": {
126
+ "type": "string",
127
+ "description": "Profile picture URL"
128
+ },
129
+ "location": {
130
+ "type": "string",
131
+ "description": "Geographic location"
132
+ },
133
+ "country": {
134
+ "type": "string",
135
+ "description": "Country name"
136
+ },
137
+ "is_premium": {
138
+ "type": "boolean",
139
+ "description": "Whether the user has a Premium subscription"
140
+ },
141
+ "is_influencer": {
142
+ "type": "boolean",
143
+ "description": "Whether the user is a LinkedIn influencer"
144
+ },
145
+ "is_creator": {
146
+ "type": "boolean",
147
+ "description": "Whether the user is a LinkedIn creator"
148
+ }
149
+ },
150
+ "required": [
151
+ "first_name",
152
+ "last_name",
153
+ "headline",
154
+ "public_identifier",
155
+ "profile_urn",
156
+ "profile_picture_url",
157
+ "location",
158
+ "country",
159
+ "is_premium",
160
+ "is_influencer",
161
+ "is_creator"
162
+ ],
163
+ "additionalProperties": false,
164
+ "description": "User profile"
165
+ }
166
+ },
167
+ "required": [
168
+ "profile"
169
+ ],
170
+ "additionalProperties": false
171
+ }
172
+ },
173
+ {
174
+ "name": "list_conversations",
175
+ "displayName": "List Conversations",
176
+ "description": "List recent messaging conversations from the LinkedIn inbox. Returns conversations with participant names, last message preview, and read status. Results are ordered by most recent activity.",
177
+ "summary": "List messaging conversations",
178
+ "icon": "messages-square",
179
+ "group": "Messaging",
180
+ "input_schema": {
181
+ "type": "object",
182
+ "properties": {},
183
+ "additionalProperties": false
184
+ },
185
+ "output_schema": {
186
+ "type": "object",
187
+ "properties": {
188
+ "conversations": {
189
+ "type": "array",
190
+ "items": {
191
+ "type": "object",
192
+ "properties": {
193
+ "conversation_urn": {
194
+ "type": "string",
195
+ "description": "Conversation URN identifier"
196
+ },
197
+ "title": {
198
+ "type": "string",
199
+ "description": "Conversation title or participant name"
200
+ },
201
+ "last_message_text": {
202
+ "type": "string",
203
+ "description": "Text of the most recent message"
204
+ },
205
+ "last_message_at": {
206
+ "type": "number",
207
+ "description": "Timestamp of the last message in milliseconds"
208
+ },
209
+ "is_read": {
210
+ "type": "boolean",
211
+ "description": "Whether the conversation is read"
212
+ },
213
+ "notification_status": {
214
+ "type": "string",
215
+ "description": "Notification status (ACTIVE, MUTED, etc.)"
216
+ },
217
+ "participants": {
218
+ "type": "array",
219
+ "items": {
220
+ "type": "object",
221
+ "properties": {
222
+ "name": {
223
+ "type": "string",
224
+ "description": "Participant full name"
225
+ },
226
+ "profile_urn": {
227
+ "type": "string",
228
+ "description": "Participant profile URN"
229
+ },
230
+ "profile_picture_url": {
231
+ "type": "string",
232
+ "description": "Participant profile picture URL"
233
+ }
234
+ },
235
+ "required": [
236
+ "name",
237
+ "profile_urn",
238
+ "profile_picture_url"
239
+ ],
240
+ "additionalProperties": false
241
+ },
242
+ "description": "List of conversation participants"
243
+ }
244
+ },
245
+ "required": [
246
+ "conversation_urn",
247
+ "title",
248
+ "last_message_text",
249
+ "last_message_at",
250
+ "is_read",
251
+ "notification_status",
252
+ "participants"
253
+ ],
254
+ "additionalProperties": false
255
+ },
256
+ "description": "List of recent conversations"
257
+ }
258
+ },
259
+ "required": [
260
+ "conversations"
261
+ ],
262
+ "additionalProperties": false
263
+ }
264
+ },
265
+ {
266
+ "name": "get_conversation_messages",
267
+ "displayName": "Get Conversation Messages",
268
+ "description": "Get messages from a specific LinkedIn messaging conversation. Requires the conversation URN from list_conversations. Returns messages with sender info and timestamps.",
269
+ "summary": "Read messages in a conversation",
270
+ "icon": "message-square-text",
271
+ "group": "Messaging",
272
+ "input_schema": {
273
+ "type": "object",
274
+ "properties": {
275
+ "conversation_urn": {
276
+ "type": "string",
277
+ "description": "Conversation URN (e.g., \"urn:li:msg_conversation:(...)\")"
278
+ }
279
+ },
280
+ "required": [
281
+ "conversation_urn"
282
+ ],
283
+ "additionalProperties": false
284
+ },
285
+ "output_schema": {
286
+ "type": "object",
287
+ "properties": {
288
+ "messages": {
289
+ "type": "array",
290
+ "items": {
291
+ "type": "object",
292
+ "properties": {
293
+ "message_urn": {
294
+ "type": "string",
295
+ "description": "Message URN identifier"
296
+ },
297
+ "text": {
298
+ "type": "string",
299
+ "description": "Message text content"
300
+ },
301
+ "sender_name": {
302
+ "type": "string",
303
+ "description": "Sender full name"
304
+ },
305
+ "sender_profile_urn": {
306
+ "type": "string",
307
+ "description": "Sender profile URN"
308
+ },
309
+ "delivered_at": {
310
+ "type": "number",
311
+ "description": "Delivery timestamp in milliseconds"
312
+ },
313
+ "subject": {
314
+ "type": "string",
315
+ "description": "Message subject (if any)"
316
+ }
317
+ },
318
+ "required": [
319
+ "message_urn",
320
+ "text",
321
+ "sender_name",
322
+ "sender_profile_urn",
323
+ "delivered_at",
324
+ "subject"
325
+ ],
326
+ "additionalProperties": false
327
+ },
328
+ "description": "Messages in the conversation"
329
+ }
330
+ },
331
+ "required": [
332
+ "messages"
333
+ ],
334
+ "additionalProperties": false
335
+ }
336
+ },
337
+ {
338
+ "name": "send_message",
339
+ "displayName": "Send Message",
340
+ "description": "Send a message in an existing LinkedIn messaging conversation. Requires the conversation URN from list_conversations. The message is sent as the authenticated user.",
341
+ "summary": "Send a message in a conversation",
342
+ "icon": "send",
343
+ "group": "Messaging",
344
+ "input_schema": {
345
+ "type": "object",
346
+ "properties": {
347
+ "conversation_urn": {
348
+ "type": "string",
349
+ "description": "Conversation URN to send the message in (e.g., \"urn:li:msg_conversation:(...)\")"
350
+ },
351
+ "text": {
352
+ "type": "string",
353
+ "description": "Message text to send"
354
+ }
355
+ },
356
+ "required": [
357
+ "conversation_urn",
358
+ "text"
359
+ ],
360
+ "additionalProperties": false
361
+ },
362
+ "output_schema": {
363
+ "type": "object",
364
+ "properties": {
365
+ "success": {
366
+ "type": "boolean",
367
+ "description": "Whether the message was sent successfully"
368
+ }
369
+ },
370
+ "required": [
371
+ "success"
372
+ ],
373
+ "additionalProperties": false
374
+ }
375
+ },
376
+ {
377
+ "name": "get_mailbox_counts",
378
+ "displayName": "Get Mailbox Counts",
379
+ "description": "Get unread message counts per mailbox category (Inbox, Secondary Inbox, Message Requests, Archive, Spam).",
380
+ "summary": "Get unread message counts",
381
+ "icon": "inbox",
382
+ "group": "Messaging",
383
+ "input_schema": {
384
+ "type": "object",
385
+ "properties": {},
386
+ "additionalProperties": false
387
+ },
388
+ "output_schema": {
389
+ "type": "object",
390
+ "properties": {
391
+ "counts": {
392
+ "type": "array",
393
+ "items": {
394
+ "type": "object",
395
+ "properties": {
396
+ "category": {
397
+ "type": "string",
398
+ "description": "Mailbox category (INBOX, SECONDARY_INBOX, ARCHIVE, SPAM, MESSAGE_REQUEST_PENDING)"
399
+ },
400
+ "unread_count": {
401
+ "type": "number",
402
+ "description": "Number of unread conversations in this category"
403
+ }
404
+ },
405
+ "required": [
406
+ "category",
407
+ "unread_count"
408
+ ],
409
+ "additionalProperties": false
410
+ },
411
+ "description": "Unread counts per mailbox category"
412
+ }
413
+ },
414
+ "required": [
415
+ "counts"
416
+ ],
417
+ "additionalProperties": false
418
+ }
419
+ }
420
+ ]
421
+ }
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@opentabs-dev/opentabs-plugin-linkedin",
3
+ "description": "OpenTabs plugin for LinkedIn",
4
+ "version": "0.0.74",
5
+ "type": "module",
6
+ "main": "dist/adapter.iife.js",
7
+ "keywords": [
8
+ "opentabs-plugin"
9
+ ],
10
+ "opentabs": {
11
+ "displayName": "LinkedIn",
12
+ "description": "OpenTabs plugin for LinkedIn",
13
+ "urlPatterns": [
14
+ "*://*.linkedin.com/*"
15
+ ]
16
+ },
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js"
21
+ }
22
+ },
23
+ "types": "./dist/index.d.ts",
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "scripts": {
28
+ "build": "tsc && opentabs-plugin build",
29
+ "dev": "tsc --watch --preserveWatchOutput & opentabs-plugin build --watch",
30
+ "type-check": "tsc --noEmit",
31
+ "lint": "biome lint src/",
32
+ "lint:fix": "biome lint --fix src/",
33
+ "format:check": "biome format src/",
34
+ "format": "biome format --write src/",
35
+ "check": "npm run build && npm run type-check && npm run lint && npm run format:check"
36
+ },
37
+ "peerDependencies": {
38
+ "zod": "^4.0.0"
39
+ },
40
+ "dependencies": {
41
+ "@opentabs-dev/plugin-sdk": "^0.0.74"
42
+ },
43
+ "devDependencies": {
44
+ "@biomejs/biome": "2.4.6",
45
+ "@opentabs-dev/plugin-tools": "^0.0.74",
46
+ "jiti": "^2.6.1",
47
+ "typescript": "^5.9.3",
48
+ "zod": "^4.0.0"
49
+ },
50
+ "license": "MIT",
51
+ "publishConfig": {
52
+ "access": "public"
53
+ }
54
+ }