publishport-opencli 1.8.5-pp.40 → 1.8.5-pp.43
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/cli-manifest.json +340 -14
- package/clis/linkedin/comment.js +1 -0
- package/clis/linkedin/follow.js +1 -0
- package/clis/linkedin/job-detail.js +38 -111
- package/clis/linkedin/like.js +1 -0
- package/clis/linkedin/notifications.js +1 -0
- package/clis/linkedin/people-search.js +1 -81
- package/clis/linkedin/post-comments.js +1 -0
- package/clis/linkedin/post-detail.js +1 -0
- package/clis/linkedin/profile-analytics.js +1 -11
- package/clis/linkedin/profile-api.js +218 -0
- package/clis/linkedin/profile-experience.js +1 -297
- package/clis/linkedin/profile-projects.js +1 -130
- package/clis/linkedin/profile-read.js +3 -61
- package/clis/linkedin/reply.js +1 -0
- package/clis/linkedin/repost.js +1 -0
- package/clis/linkedin/search-api.js +42 -0
- package/clis/linkedin/search.js +7 -58
- package/clis/linkedin/social-api.js +260 -0
- package/clis/linkedin/timeline.js +34 -400
- package/package.json +1 -1
package/cli-manifest.json
CHANGED
|
@@ -23502,6 +23502,47 @@
|
|
|
23502
23502
|
"modulePath": "lichess/user.js",
|
|
23503
23503
|
"sourceFile": "lichess/user.js"
|
|
23504
23504
|
},
|
|
23505
|
+
{
|
|
23506
|
+
"site": "linkedin",
|
|
23507
|
+
"name": "comment",
|
|
23508
|
+
"description": "Post a top-level comment on a LinkedIn post via the Voyager API. Dry-run by default; pass --send true to actually publish. Takes a post URL or activity/ugcPost urn.",
|
|
23509
|
+
"access": "write",
|
|
23510
|
+
"domain": "www.linkedin.com",
|
|
23511
|
+
"strategy": "cookie",
|
|
23512
|
+
"browser": true,
|
|
23513
|
+
"args": [
|
|
23514
|
+
{
|
|
23515
|
+
"name": "post",
|
|
23516
|
+
"type": "string",
|
|
23517
|
+
"required": true,
|
|
23518
|
+
"positional": true,
|
|
23519
|
+
"help": "Post to comment on: a LinkedIn post URL (…/feed/update/… or …/posts/…) or a raw urn:li:activity:… / urn:li:ugcPost:… urn."
|
|
23520
|
+
},
|
|
23521
|
+
{
|
|
23522
|
+
"name": "text",
|
|
23523
|
+
"type": "string",
|
|
23524
|
+
"required": true,
|
|
23525
|
+
"help": "Comment body (max 1250 chars)."
|
|
23526
|
+
},
|
|
23527
|
+
{
|
|
23528
|
+
"name": "send",
|
|
23529
|
+
"type": "bool",
|
|
23530
|
+
"default": false,
|
|
23531
|
+
"required": false,
|
|
23532
|
+
"help": "Actually post the comment. Default false = dry-run (validates the session only; nothing is posted)."
|
|
23533
|
+
}
|
|
23534
|
+
],
|
|
23535
|
+
"columns": [
|
|
23536
|
+
"status",
|
|
23537
|
+
"post_urn",
|
|
23538
|
+
"comment_urn",
|
|
23539
|
+
"text_chars"
|
|
23540
|
+
],
|
|
23541
|
+
"type": "js",
|
|
23542
|
+
"modulePath": "linkedin/comment.js",
|
|
23543
|
+
"sourceFile": "linkedin/comment.js",
|
|
23544
|
+
"navigateBefore": "https://www.linkedin.com"
|
|
23545
|
+
},
|
|
23505
23546
|
{
|
|
23506
23547
|
"site": "linkedin",
|
|
23507
23548
|
"name": "connect",
|
|
@@ -23609,6 +23650,39 @@
|
|
|
23609
23650
|
"sourceFile": "linkedin/create.js",
|
|
23610
23651
|
"navigateBefore": "https://www.linkedin.com"
|
|
23611
23652
|
},
|
|
23653
|
+
{
|
|
23654
|
+
"site": "linkedin",
|
|
23655
|
+
"name": "follow",
|
|
23656
|
+
"description": "Follow or unfollow a LinkedIn person or company page via the Voyager API. Following subscribes to their posts without a connection request (use `linkedin connect` for that). Takes a profile/company URL or urn.",
|
|
23657
|
+
"access": "write",
|
|
23658
|
+
"domain": "www.linkedin.com",
|
|
23659
|
+
"strategy": "cookie",
|
|
23660
|
+
"browser": true,
|
|
23661
|
+
"args": [
|
|
23662
|
+
{
|
|
23663
|
+
"name": "target",
|
|
23664
|
+
"type": "string",
|
|
23665
|
+
"required": true,
|
|
23666
|
+
"positional": true,
|
|
23667
|
+
"help": "Who to follow. A person MUST be given as a profile URL (…/in/<handle>) or urn:li:fsd_profile:… urn. A company can be a company URL (…/company/<name>), a bare company name (resolved as a company, never a person), or a urn:li:fsd_company:… urn."
|
|
23668
|
+
},
|
|
23669
|
+
{
|
|
23670
|
+
"name": "unfollow",
|
|
23671
|
+
"type": "bool",
|
|
23672
|
+
"default": false,
|
|
23673
|
+
"required": false,
|
|
23674
|
+
"help": "Unfollow instead of follow."
|
|
23675
|
+
}
|
|
23676
|
+
],
|
|
23677
|
+
"columns": [
|
|
23678
|
+
"status",
|
|
23679
|
+
"entity_urn"
|
|
23680
|
+
],
|
|
23681
|
+
"type": "js",
|
|
23682
|
+
"modulePath": "linkedin/follow.js",
|
|
23683
|
+
"sourceFile": "linkedin/follow.js",
|
|
23684
|
+
"navigateBefore": "https://www.linkedin.com"
|
|
23685
|
+
},
|
|
23612
23686
|
{
|
|
23613
23687
|
"site": "linkedin",
|
|
23614
23688
|
"name": "inbox",
|
|
@@ -23652,7 +23726,7 @@
|
|
|
23652
23726
|
{
|
|
23653
23727
|
"site": "linkedin",
|
|
23654
23728
|
"name": "job-detail",
|
|
23655
|
-
"description": "Read one LinkedIn job
|
|
23729
|
+
"description": "Read one LinkedIn job via the Voyager API: description, apply URL, workplace type, applicants, and company metadata",
|
|
23656
23730
|
"access": "read",
|
|
23657
23731
|
"domain": "www.linkedin.com",
|
|
23658
23732
|
"strategy": "cookie",
|
|
@@ -23707,6 +23781,48 @@
|
|
|
23707
23781
|
"sourceFile": "linkedin/jobs-preferences.js",
|
|
23708
23782
|
"navigateBefore": "https://www.linkedin.com"
|
|
23709
23783
|
},
|
|
23784
|
+
{
|
|
23785
|
+
"site": "linkedin",
|
|
23786
|
+
"name": "like",
|
|
23787
|
+
"description": "React to a LinkedIn post OR comment (like by default; also celebrate/support/love/insightful/funny), or remove your reaction. Takes a post URL / activity urn, or a comment_urn from `linkedin post-comments`.",
|
|
23788
|
+
"access": "write",
|
|
23789
|
+
"domain": "www.linkedin.com",
|
|
23790
|
+
"strategy": "cookie",
|
|
23791
|
+
"browser": true,
|
|
23792
|
+
"args": [
|
|
23793
|
+
{
|
|
23794
|
+
"name": "target",
|
|
23795
|
+
"type": "string",
|
|
23796
|
+
"required": true,
|
|
23797
|
+
"positional": true,
|
|
23798
|
+
"help": "What to react to: a LinkedIn post URL (…/feed/update/…) or activity/ugcPost urn, OR a comment_urn (urn:li:comment:(…)) from `linkedin post-comments`."
|
|
23799
|
+
},
|
|
23800
|
+
{
|
|
23801
|
+
"name": "reaction",
|
|
23802
|
+
"type": "string",
|
|
23803
|
+
"default": "like",
|
|
23804
|
+
"required": false,
|
|
23805
|
+
"help": "Reaction type: like (default), celebrate, support, love, insightful, funny. Ignored when --remove true."
|
|
23806
|
+
},
|
|
23807
|
+
{
|
|
23808
|
+
"name": "remove",
|
|
23809
|
+
"type": "bool",
|
|
23810
|
+
"default": false,
|
|
23811
|
+
"required": false,
|
|
23812
|
+
"help": "Remove your existing reaction instead of adding one."
|
|
23813
|
+
}
|
|
23814
|
+
],
|
|
23815
|
+
"columns": [
|
|
23816
|
+
"status",
|
|
23817
|
+
"target_urn",
|
|
23818
|
+
"target_type",
|
|
23819
|
+
"reaction"
|
|
23820
|
+
],
|
|
23821
|
+
"type": "js",
|
|
23822
|
+
"modulePath": "linkedin/like.js",
|
|
23823
|
+
"sourceFile": "linkedin/like.js",
|
|
23824
|
+
"navigateBefore": "https://www.linkedin.com"
|
|
23825
|
+
},
|
|
23710
23826
|
{
|
|
23711
23827
|
"site": "linkedin",
|
|
23712
23828
|
"name": "login",
|
|
@@ -23739,10 +23855,54 @@
|
|
|
23739
23855
|
"siteSession": "persistent",
|
|
23740
23856
|
"defaultWindowMode": "foreground"
|
|
23741
23857
|
},
|
|
23858
|
+
{
|
|
23859
|
+
"site": "linkedin",
|
|
23860
|
+
"name": "notifications",
|
|
23861
|
+
"description": "Read your LinkedIn notifications via the Voyager API: who reacted to / commented on / mentioned your posts, profile views, follows, and more. Read-only.",
|
|
23862
|
+
"access": "read",
|
|
23863
|
+
"domain": "www.linkedin.com",
|
|
23864
|
+
"strategy": "cookie",
|
|
23865
|
+
"browser": true,
|
|
23866
|
+
"args": [
|
|
23867
|
+
{
|
|
23868
|
+
"name": "limit",
|
|
23869
|
+
"type": "int",
|
|
23870
|
+
"default": 20,
|
|
23871
|
+
"required": false,
|
|
23872
|
+
"help": "Maximum notifications to return (1-100)."
|
|
23873
|
+
},
|
|
23874
|
+
{
|
|
23875
|
+
"name": "filter",
|
|
23876
|
+
"type": "string",
|
|
23877
|
+
"default": "all",
|
|
23878
|
+
"required": false,
|
|
23879
|
+
"help": "Which notifications: all (default), mentions, posts (activity on your posts), jobs."
|
|
23880
|
+
},
|
|
23881
|
+
{
|
|
23882
|
+
"name": "unread-only",
|
|
23883
|
+
"type": "bool",
|
|
23884
|
+
"default": false,
|
|
23885
|
+
"required": false,
|
|
23886
|
+
"help": "Only return unread notifications."
|
|
23887
|
+
}
|
|
23888
|
+
],
|
|
23889
|
+
"columns": [
|
|
23890
|
+
"rank",
|
|
23891
|
+
"unread",
|
|
23892
|
+
"headline",
|
|
23893
|
+
"content",
|
|
23894
|
+
"when",
|
|
23895
|
+
"target"
|
|
23896
|
+
],
|
|
23897
|
+
"type": "js",
|
|
23898
|
+
"modulePath": "linkedin/notifications.js",
|
|
23899
|
+
"sourceFile": "linkedin/notifications.js",
|
|
23900
|
+
"navigateBefore": "https://www.linkedin.com"
|
|
23901
|
+
},
|
|
23742
23902
|
{
|
|
23743
23903
|
"site": "linkedin",
|
|
23744
23904
|
"name": "people-search",
|
|
23745
|
-
"description": "Search standard LinkedIn (not Sales Navigator) for people by keyword. Each invocation consumes against LinkedIn's monthly Commercial Use Limit on people search; throttle accordingly.",
|
|
23905
|
+
"description": "Search standard LinkedIn (not Sales Navigator) for people by keyword via the Voyager search API. Each invocation consumes against LinkedIn's monthly Commercial Use Limit on people search; throttle accordingly.",
|
|
23746
23906
|
"access": "read",
|
|
23747
23907
|
"domain": "www.linkedin.com",
|
|
23748
23908
|
"strategy": "cookie",
|
|
@@ -23808,7 +23968,7 @@
|
|
|
23808
23968
|
"name": "current-company-id",
|
|
23809
23969
|
"type": "string",
|
|
23810
23970
|
"required": false,
|
|
23811
|
-
"help": "Comma-separated LinkedIn company IDs for CURRENT COMPANY filter (e.g. \"1441\" for Google).
|
|
23971
|
+
"help": "Comma-separated LinkedIn company IDs for CURRENT COMPANY filter (e.g. \"1441\" for Google). A full URN like `urn:li:fs_company:1441` is also accepted."
|
|
23812
23972
|
},
|
|
23813
23973
|
{
|
|
23814
23974
|
"name": "past-company-id",
|
|
@@ -23820,13 +23980,13 @@
|
|
|
23820
23980
|
"name": "industry-id",
|
|
23821
23981
|
"type": "string",
|
|
23822
23982
|
"required": false,
|
|
23823
|
-
"help": "Comma-separated LinkedIn industry IDs (e.g. \"4\" for Computer Software).
|
|
23983
|
+
"help": "Comma-separated LinkedIn industry IDs (e.g. \"4\" for Computer Software)."
|
|
23824
23984
|
},
|
|
23825
23985
|
{
|
|
23826
23986
|
"name": "location-id",
|
|
23827
23987
|
"type": "string",
|
|
23828
23988
|
"required": false,
|
|
23829
|
-
"help": "Comma-separated LinkedIn location IDs (geoUrn numeric tail; e.g. \"105214831\" for Bengaluru area).
|
|
23989
|
+
"help": "Comma-separated LinkedIn location IDs (geoUrn numeric tail; e.g. \"105214831\" for Bengaluru area)."
|
|
23830
23990
|
},
|
|
23831
23991
|
{
|
|
23832
23992
|
"name": "school-id",
|
|
@@ -23890,6 +24050,91 @@
|
|
|
23890
24050
|
"sourceFile": "linkedin/post-analytics.js",
|
|
23891
24051
|
"navigateBefore": "https://www.linkedin.com"
|
|
23892
24052
|
},
|
|
24053
|
+
{
|
|
24054
|
+
"site": "linkedin",
|
|
24055
|
+
"name": "post-comments",
|
|
24056
|
+
"description": "List the comments (and nested replies) on a LinkedIn post via the Voyager API. Emits each comment_urn so you can reply to it. Takes a post URL or activity/ugcPost urn.",
|
|
24057
|
+
"access": "read",
|
|
24058
|
+
"domain": "www.linkedin.com",
|
|
24059
|
+
"strategy": "cookie",
|
|
24060
|
+
"browser": true,
|
|
24061
|
+
"args": [
|
|
24062
|
+
{
|
|
24063
|
+
"name": "post",
|
|
24064
|
+
"type": "string",
|
|
24065
|
+
"required": true,
|
|
24066
|
+
"positional": true,
|
|
24067
|
+
"help": "Post to read comments from: a LinkedIn post URL (…/feed/update/… or …/posts/…) or a raw urn:li:activity:… / urn:li:ugcPost:… urn."
|
|
24068
|
+
},
|
|
24069
|
+
{
|
|
24070
|
+
"name": "limit",
|
|
24071
|
+
"type": "int",
|
|
24072
|
+
"default": 20,
|
|
24073
|
+
"required": false,
|
|
24074
|
+
"help": "Maximum comments to return (1-100)."
|
|
24075
|
+
},
|
|
24076
|
+
{
|
|
24077
|
+
"name": "sort",
|
|
24078
|
+
"type": "string",
|
|
24079
|
+
"default": "relevance",
|
|
24080
|
+
"required": false,
|
|
24081
|
+
"help": "Comment order: relevance (default) or recent (chronological)."
|
|
24082
|
+
}
|
|
24083
|
+
],
|
|
24084
|
+
"columns": [
|
|
24085
|
+
"rank",
|
|
24086
|
+
"comment_urn",
|
|
24087
|
+
"author",
|
|
24088
|
+
"headline",
|
|
24089
|
+
"text",
|
|
24090
|
+
"created_at",
|
|
24091
|
+
"is_reply",
|
|
24092
|
+
"parent_comment_urn",
|
|
24093
|
+
"reactions",
|
|
24094
|
+
"permalink"
|
|
24095
|
+
],
|
|
24096
|
+
"type": "js",
|
|
24097
|
+
"modulePath": "linkedin/post-comments.js",
|
|
24098
|
+
"sourceFile": "linkedin/post-comments.js",
|
|
24099
|
+
"navigateBefore": "https://www.linkedin.com"
|
|
24100
|
+
},
|
|
24101
|
+
{
|
|
24102
|
+
"site": "linkedin",
|
|
24103
|
+
"name": "post-detail",
|
|
24104
|
+
"description": "Read one LinkedIn post via the Voyager API: author, body text, reactions/comments/reposts/impressions, and whether it is a repost. Takes a post URL or activity/ugcPost urn.",
|
|
24105
|
+
"access": "read",
|
|
24106
|
+
"domain": "www.linkedin.com",
|
|
24107
|
+
"strategy": "cookie",
|
|
24108
|
+
"browser": true,
|
|
24109
|
+
"args": [
|
|
24110
|
+
{
|
|
24111
|
+
"name": "post",
|
|
24112
|
+
"type": "string",
|
|
24113
|
+
"required": true,
|
|
24114
|
+
"positional": true,
|
|
24115
|
+
"help": "Post to read: a LinkedIn post URL (…/feed/update/… or …/posts/…) or a raw urn:li:activity:… / urn:li:ugcPost:… urn."
|
|
24116
|
+
}
|
|
24117
|
+
],
|
|
24118
|
+
"columns": [
|
|
24119
|
+
"post_urn",
|
|
24120
|
+
"author",
|
|
24121
|
+
"author_type",
|
|
24122
|
+
"author_url",
|
|
24123
|
+
"posted",
|
|
24124
|
+
"text",
|
|
24125
|
+
"content_type",
|
|
24126
|
+
"is_repost",
|
|
24127
|
+
"reactions",
|
|
24128
|
+
"comments",
|
|
24129
|
+
"reposts",
|
|
24130
|
+
"impressions",
|
|
24131
|
+
"url"
|
|
24132
|
+
],
|
|
24133
|
+
"type": "js",
|
|
24134
|
+
"modulePath": "linkedin/post-detail.js",
|
|
24135
|
+
"sourceFile": "linkedin/post-detail.js",
|
|
24136
|
+
"navigateBefore": "https://www.linkedin.com"
|
|
24137
|
+
},
|
|
23893
24138
|
{
|
|
23894
24139
|
"site": "linkedin",
|
|
23895
24140
|
"name": "posts",
|
|
@@ -23935,7 +24180,7 @@
|
|
|
23935
24180
|
{
|
|
23936
24181
|
"site": "linkedin",
|
|
23937
24182
|
"name": "profile-analytics",
|
|
23938
|
-
"description": "Read
|
|
24183
|
+
"description": "Read your own LinkedIn analytics via the Voyager API: profile views, search appearances, followers, and connections (self only)",
|
|
23939
24184
|
"access": "read",
|
|
23940
24185
|
"domain": "www.linkedin.com",
|
|
23941
24186
|
"strategy": "cookie",
|
|
@@ -23945,7 +24190,7 @@
|
|
|
23945
24190
|
"name": "profile-url",
|
|
23946
24191
|
"type": "string",
|
|
23947
24192
|
"required": false,
|
|
23948
|
-
"help": "
|
|
24193
|
+
"help": "Ignored beyond validation — analytics are only visible for the signed-in account."
|
|
23949
24194
|
}
|
|
23950
24195
|
],
|
|
23951
24196
|
"columns": [
|
|
@@ -23954,8 +24199,7 @@
|
|
|
23954
24199
|
"post_impressions",
|
|
23955
24200
|
"search_appearances",
|
|
23956
24201
|
"followers",
|
|
23957
|
-
"connections"
|
|
23958
|
-
"raw_analytics"
|
|
24202
|
+
"connections"
|
|
23959
24203
|
],
|
|
23960
24204
|
"type": "js",
|
|
23961
24205
|
"modulePath": "linkedin/profile-analytics.js",
|
|
@@ -23965,7 +24209,7 @@
|
|
|
23965
24209
|
{
|
|
23966
24210
|
"site": "linkedin",
|
|
23967
24211
|
"name": "profile-experience",
|
|
23968
|
-
"description": "Read
|
|
24212
|
+
"description": "Read LinkedIn profile experience entries via the Voyager API: titles, companies, dates, locations, and descriptions",
|
|
23969
24213
|
"access": "read",
|
|
23970
24214
|
"domain": "www.linkedin.com",
|
|
23971
24215
|
"strategy": "cookie",
|
|
@@ -24006,7 +24250,7 @@
|
|
|
24006
24250
|
{
|
|
24007
24251
|
"site": "linkedin",
|
|
24008
24252
|
"name": "profile-projects",
|
|
24009
|
-
"description": "Read
|
|
24253
|
+
"description": "Read LinkedIn profile projects via the Voyager API: titles, dates, and descriptions",
|
|
24010
24254
|
"access": "read",
|
|
24011
24255
|
"domain": "www.linkedin.com",
|
|
24012
24256
|
"strategy": "cookie",
|
|
@@ -24039,7 +24283,7 @@
|
|
|
24039
24283
|
{
|
|
24040
24284
|
"site": "linkedin",
|
|
24041
24285
|
"name": "profile-read",
|
|
24042
|
-
"description": "Read
|
|
24286
|
+
"description": "Read LinkedIn profile sections via the Voyager API: name, headline, location, About, experience, and education",
|
|
24043
24287
|
"access": "read",
|
|
24044
24288
|
"domain": "www.linkedin.com",
|
|
24045
24289
|
"strategy": "cookie",
|
|
@@ -24070,6 +24314,88 @@
|
|
|
24070
24314
|
"sourceFile": "linkedin/profile-read.js",
|
|
24071
24315
|
"navigateBefore": "https://www.linkedin.com"
|
|
24072
24316
|
},
|
|
24317
|
+
{
|
|
24318
|
+
"site": "linkedin",
|
|
24319
|
+
"name": "reply",
|
|
24320
|
+
"description": "Reply to a comment on a LinkedIn post via the Voyager API. Dry-run by default; pass --send true to actually publish. The comment urn comes from `linkedin post-comments`.",
|
|
24321
|
+
"access": "write",
|
|
24322
|
+
"domain": "www.linkedin.com",
|
|
24323
|
+
"strategy": "cookie",
|
|
24324
|
+
"browser": true,
|
|
24325
|
+
"args": [
|
|
24326
|
+
{
|
|
24327
|
+
"name": "comment",
|
|
24328
|
+
"type": "string",
|
|
24329
|
+
"required": true,
|
|
24330
|
+
"positional": true,
|
|
24331
|
+
"help": "The comment to reply to: a comment_urn from `linkedin post-comments` (urn:li:comment:(activity:…,…) or urn:li:fsd_comment:(…))."
|
|
24332
|
+
},
|
|
24333
|
+
{
|
|
24334
|
+
"name": "text",
|
|
24335
|
+
"type": "string",
|
|
24336
|
+
"required": true,
|
|
24337
|
+
"help": "Reply body (max 1250 chars)."
|
|
24338
|
+
},
|
|
24339
|
+
{
|
|
24340
|
+
"name": "send",
|
|
24341
|
+
"type": "bool",
|
|
24342
|
+
"default": false,
|
|
24343
|
+
"required": false,
|
|
24344
|
+
"help": "Actually post the reply. Default false = dry-run (validates the session only; nothing is posted)."
|
|
24345
|
+
}
|
|
24346
|
+
],
|
|
24347
|
+
"columns": [
|
|
24348
|
+
"status",
|
|
24349
|
+
"parent_comment_urn",
|
|
24350
|
+
"reply_urn",
|
|
24351
|
+
"text_chars"
|
|
24352
|
+
],
|
|
24353
|
+
"type": "js",
|
|
24354
|
+
"modulePath": "linkedin/reply.js",
|
|
24355
|
+
"sourceFile": "linkedin/reply.js",
|
|
24356
|
+
"navigateBefore": "https://www.linkedin.com"
|
|
24357
|
+
},
|
|
24358
|
+
{
|
|
24359
|
+
"site": "linkedin",
|
|
24360
|
+
"name": "repost",
|
|
24361
|
+
"description": "Repost (reshare) a LinkedIn post to your own feed via the Voyager API. Plain repost by default; pass --text to quote-repost with your commentary. Dry-run unless --send true.",
|
|
24362
|
+
"access": "write",
|
|
24363
|
+
"domain": "www.linkedin.com",
|
|
24364
|
+
"strategy": "cookie",
|
|
24365
|
+
"browser": true,
|
|
24366
|
+
"args": [
|
|
24367
|
+
{
|
|
24368
|
+
"name": "post",
|
|
24369
|
+
"type": "string",
|
|
24370
|
+
"required": true,
|
|
24371
|
+
"positional": true,
|
|
24372
|
+
"help": "Post to repost: a LinkedIn post URL (…/feed/update/… or …/posts/…) or a raw urn:li:activity:… / urn:li:ugcPost:… urn."
|
|
24373
|
+
},
|
|
24374
|
+
{
|
|
24375
|
+
"name": "text",
|
|
24376
|
+
"type": "string",
|
|
24377
|
+
"required": false,
|
|
24378
|
+
"help": "Optional commentary to quote-repost with (max 3000 chars). Omit for a plain repost."
|
|
24379
|
+
},
|
|
24380
|
+
{
|
|
24381
|
+
"name": "send",
|
|
24382
|
+
"type": "bool",
|
|
24383
|
+
"default": false,
|
|
24384
|
+
"required": false,
|
|
24385
|
+
"help": "Actually repost. Default false = dry-run (validates the session only; nothing is posted)."
|
|
24386
|
+
}
|
|
24387
|
+
],
|
|
24388
|
+
"columns": [
|
|
24389
|
+
"status",
|
|
24390
|
+
"shared_urn",
|
|
24391
|
+
"repost_urn",
|
|
24392
|
+
"quote"
|
|
24393
|
+
],
|
|
24394
|
+
"type": "js",
|
|
24395
|
+
"modulePath": "linkedin/repost.js",
|
|
24396
|
+
"sourceFile": "linkedin/repost.js",
|
|
24397
|
+
"navigateBefore": "https://www.linkedin.com"
|
|
24398
|
+
},
|
|
24073
24399
|
{
|
|
24074
24400
|
"site": "linkedin",
|
|
24075
24401
|
"name": "safe-send",
|
|
@@ -24535,7 +24861,7 @@
|
|
|
24535
24861
|
{
|
|
24536
24862
|
"site": "linkedin",
|
|
24537
24863
|
"name": "timeline",
|
|
24538
|
-
"description": "Read LinkedIn home timeline posts",
|
|
24864
|
+
"description": "Read LinkedIn home timeline posts via the Voyager feed API",
|
|
24539
24865
|
"access": "read",
|
|
24540
24866
|
"domain": "www.linkedin.com",
|
|
24541
24867
|
"strategy": "cookie",
|
|
@@ -24546,7 +24872,7 @@
|
|
|
24546
24872
|
"type": "int",
|
|
24547
24873
|
"default": 20,
|
|
24548
24874
|
"required": false,
|
|
24549
|
-
"help": "Number of posts to return (max
|
|
24875
|
+
"help": "Number of posts to return (max 50)"
|
|
24550
24876
|
}
|
|
24551
24877
|
],
|
|
24552
24878
|
"columns": [
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{cli as Z,Strategy as $}from"@jackwener/opencli/registry";import{ArgumentError as Q,AuthRequiredError as b,CommandExecutionError as V}from"@jackwener/opencli/errors";import{assertLinkedInAuthenticated as q,LINKEDIN_DOMAIN as W,unwrapEvaluateResult as v}from"./shared.js";import{buildCommentScript as z,NORM_COMMENT_DECORATION as K,normalizeThreadUrn as k}from"./social-api.js";const P=1250;Z({site:"linkedin",name:"comment",access:"write",description:"Post a top-level comment on a LinkedIn post via the Voyager API. Dry-run by default; pass --send true to actually publish. Takes a post URL or activity/ugcPost urn.",domain:W,strategy:$.COOKIE,browser:!0,args:[{name:"post",type:"string",required:!0,positional:!0,help:"Post to comment on: a LinkedIn post URL (…/feed/update/… or …/posts/…) or a raw urn:li:activity:… / urn:li:ugcPost:… urn."},{name:"text",type:"string",required:!0,help:`Comment body (max ${P} chars).`},{name:"send",type:"bool",required:!1,default:!1,help:"Actually post the comment. Default false = dry-run (validates the session only; nothing is posted)."}],columns:["status","post_urn","comment_urn","text_chars"],func:async(F,G)=>{if(!F)throw new V("Browser session required for linkedin comment");const J=k(G?.post),B=String(G?.text??"").replace(/ /g," ").trim();if(!B)throw new Q("--text is required");if(B.length>P)throw new Q(`--text must be ${P} characters or fewer (got ${B.length})`);const Y=G?.send===!0||G?.send==="true";await F.goto(`https://www.linkedin.com/feed/update/${J}/`);await F.wait(2);if(!Y){await q(F,"LinkedIn comment");return[{status:"dry_run",post_urn:J,comment_urn:"(not posted — pass --send true to publish)",text_chars:B.length}]}const f=v(await F.evaluate(z({threadUrn:J,text:B,decorationId:K})));if(!f?.ok){if(f?.stage==="auth"||f?.httpStatus===401||f?.httpStatus===403)throw new b(W,`LinkedIn comment requires an active signed-in LinkedIn browser session (${f?.error||"auth"}).`);throw new V(`LinkedIn comment failed: stage=${f?.stage||"unknown"} http=${f?.httpStatus||"?"} ${f?.error||""}`.trim())}return[{status:"commented",post_urn:J,comment_urn:f.commentUrn||"",text_chars:B.length}]}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{cli as T,Strategy as U}from"@jackwener/opencli/registry";import{ArgumentError as V,AuthRequiredError as W,CommandExecutionError as J}from"@jackwener/opencli/errors";import{LINKEDIN_DOMAIN as Q,unwrapEvaluateResult as X}from"./shared.js";import{buildFollowScript as Y}from"./social-api.js";T({site:"linkedin",name:"follow",access:"write",description:"Follow or unfollow a LinkedIn person or company page via the Voyager API. Following subscribes to their posts without a connection request (use `linkedin connect` for that). Takes a profile/company URL or urn.",domain:Q,strategy:U.COOKIE,browser:!0,args:[{name:"target",type:"string",required:!0,positional:!0,help:"Who to follow. A person MUST be given as a profile URL (…/in/<handle>) or urn:li:fsd_profile:… urn. A company can be a company URL (…/company/<name>), a bare company name (resolved as a company, never a person), or a urn:li:fsd_company:… urn."},{name:"unfollow",type:"bool",required:!1,default:!1,help:"Unfollow instead of follow."}],columns:["status","entity_urn"],func:async(B,G)=>{if(!B)throw new J("Browser session required for linkedin follow");const H=String(G?.target??"").trim();if(!H)throw new V("target is required (profile/company URL or urn)");const P=G?.unfollow===!0||G?.unfollow==="true";await B.goto("https://www.linkedin.com/feed/");await B.wait(2);const z=X(await B.evaluate(Y({target:H,following:!P})));if(!z?.ok){if(z?.stage==="auth"||z?.httpStatus===401||z?.httpStatus===403)throw new W(Q,`LinkedIn follow requires an active signed-in LinkedIn browser session (${z?.error||"auth"}).`);if(z?.stage==="resolve")throw new J(`LinkedIn follow could not resolve "${H}" to a person or company. Pass a /in/<handle> URL, a /company/<name> URL, or a urn.`);throw new J(`LinkedIn follow failed: stage=${z?.stage||"unknown"} http=${z?.httpStatus||"?"} ${z?.error||""}`.trim())}return[{status:P?"unfollowed":"followed",entity_urn:z.entity_urn||""}]}});
|