@jackwener/opencli 1.7.20 → 1.7.21
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 +233 -72
- package/clis/_shared/search-adapter.js +70 -0
- package/clis/boss/chatlist.js +96 -14
- package/clis/boss/chatlist.test.js +211 -0
- package/clis/boss/chatmsg.js +98 -24
- package/clis/boss/chatmsg.test.js +230 -0
- package/clis/boss/utils.js +240 -11
- package/clis/brave/search.js +80 -0
- package/clis/brave/search.test.js +76 -0
- package/clis/duckduckgo/search.js +131 -0
- package/clis/duckduckgo/search.test.js +128 -0
- package/clis/duckduckgo/suggest.js +45 -0
- package/clis/duckduckgo/suggest.test.js +66 -0
- package/clis/facebook/feed.js +301 -56
- package/clis/facebook/feed.test.js +169 -0
- package/clis/reddit/comment.js +0 -1
- package/clis/reddit/frontpage.js +0 -1
- package/clis/reddit/home.js +0 -1
- package/clis/reddit/popular.js +0 -1
- package/clis/reddit/read.js +0 -1
- package/clis/reddit/read.test.js +2 -2
- package/clis/reddit/save.js +0 -1
- package/clis/reddit/saved.js +0 -1
- package/clis/reddit/search.js +0 -1
- package/clis/reddit/subreddit-info.js +0 -1
- package/clis/reddit/subreddit.js +0 -1
- package/clis/reddit/subscribe.js +0 -1
- package/clis/reddit/upvote.js +0 -1
- package/clis/reddit/upvoted.js +0 -1
- package/clis/reddit/user-comments.js +0 -1
- package/clis/reddit/user-posts.js +0 -1
- package/clis/reddit/user.js +0 -1
- package/clis/reddit/whoami.js +0 -1
- package/clis/rednote/rednote.test.js +65 -0
- package/clis/rednote/search.js +11 -5
- package/clis/twitter/article.js +0 -1
- package/clis/twitter/bookmark-folder.js +0 -1
- package/clis/twitter/bookmark-folders.js +0 -1
- package/clis/twitter/bookmarks.js +0 -1
- package/clis/twitter/download.js +0 -1
- package/clis/twitter/followers.js +0 -1
- package/clis/twitter/following.js +0 -1
- package/clis/twitter/likes.js +0 -1
- package/clis/twitter/list-tweets.js +0 -1
- package/clis/twitter/lists.js +0 -1
- package/clis/twitter/notifications.js +0 -1
- package/clis/twitter/profile.js +0 -1
- package/clis/twitter/search.js +0 -1
- package/clis/twitter/thread.js +0 -1
- package/clis/twitter/timeline.js +0 -1
- package/clis/twitter/trending.js +0 -1
- package/clis/twitter/tweets.js +0 -1
- package/clis/xiaohongshu/search.js +34 -16
- package/clis/xiaohongshu/search.test.js +66 -11
- package/clis/yahoo/search.js +92 -0
- package/clis/yahoo/search.test.js +94 -0
- package/package.json +1 -1
package/cli-manifest.json
CHANGED
|
@@ -3484,7 +3484,7 @@
|
|
|
3484
3484
|
{
|
|
3485
3485
|
"site": "boss",
|
|
3486
3486
|
"name": "chatlist",
|
|
3487
|
-
"description": "BOSS
|
|
3487
|
+
"description": "BOSS直聘查看聊天列表(招聘端/求职端)",
|
|
3488
3488
|
"access": "read",
|
|
3489
3489
|
"domain": "www.zhipin.com",
|
|
3490
3490
|
"strategy": "cookie",
|
|
@@ -3509,12 +3509,26 @@
|
|
|
3509
3509
|
"type": "str",
|
|
3510
3510
|
"default": "0",
|
|
3511
3511
|
"required": false,
|
|
3512
|
-
"help": "Filter by job ID (0=all)"
|
|
3512
|
+
"help": "Filter by job ID (0=all, boss side only)"
|
|
3513
|
+
},
|
|
3514
|
+
{
|
|
3515
|
+
"name": "side",
|
|
3516
|
+
"type": "str",
|
|
3517
|
+
"default": "auto",
|
|
3518
|
+
"required": false,
|
|
3519
|
+
"help": "Identity side: auto (default), boss (recruiter), or geek (job-seeker)",
|
|
3520
|
+
"choices": [
|
|
3521
|
+
"auto",
|
|
3522
|
+
"boss",
|
|
3523
|
+
"geek"
|
|
3524
|
+
]
|
|
3513
3525
|
}
|
|
3514
3526
|
],
|
|
3515
3527
|
"columns": [
|
|
3516
3528
|
"name",
|
|
3529
|
+
"company",
|
|
3517
3530
|
"job",
|
|
3531
|
+
"title",
|
|
3518
3532
|
"last_msg",
|
|
3519
3533
|
"last_time",
|
|
3520
3534
|
"uid",
|
|
@@ -3528,7 +3542,7 @@
|
|
|
3528
3542
|
{
|
|
3529
3543
|
"site": "boss",
|
|
3530
3544
|
"name": "chatmsg",
|
|
3531
|
-
"description": "BOSS
|
|
3545
|
+
"description": "BOSS直聘查看聊天消息历史(招聘端/求职端)",
|
|
3532
3546
|
"access": "read",
|
|
3533
3547
|
"domain": "www.zhipin.com",
|
|
3534
3548
|
"strategy": "cookie",
|
|
@@ -3547,6 +3561,18 @@
|
|
|
3547
3561
|
"default": 1,
|
|
3548
3562
|
"required": false,
|
|
3549
3563
|
"help": "Page number"
|
|
3564
|
+
},
|
|
3565
|
+
{
|
|
3566
|
+
"name": "side",
|
|
3567
|
+
"type": "str",
|
|
3568
|
+
"default": "auto",
|
|
3569
|
+
"required": false,
|
|
3570
|
+
"help": "Identity side: auto (default), boss (recruiter), or geek (job-seeker)",
|
|
3571
|
+
"choices": [
|
|
3572
|
+
"auto",
|
|
3573
|
+
"boss",
|
|
3574
|
+
"geek"
|
|
3575
|
+
]
|
|
3550
3576
|
}
|
|
3551
3577
|
],
|
|
3552
3578
|
"columns": [
|
|
@@ -4009,6 +4035,47 @@
|
|
|
4009
4035
|
"sourceFile": "boss/stats.js",
|
|
4010
4036
|
"navigateBefore": false
|
|
4011
4037
|
},
|
|
4038
|
+
{
|
|
4039
|
+
"site": "brave",
|
|
4040
|
+
"name": "search",
|
|
4041
|
+
"description": "Search Brave Search",
|
|
4042
|
+
"access": "read",
|
|
4043
|
+
"domain": "search.brave.com",
|
|
4044
|
+
"strategy": "public",
|
|
4045
|
+
"browser": true,
|
|
4046
|
+
"args": [
|
|
4047
|
+
{
|
|
4048
|
+
"name": "keyword",
|
|
4049
|
+
"type": "str",
|
|
4050
|
+
"required": true,
|
|
4051
|
+
"positional": true,
|
|
4052
|
+
"help": "Search query"
|
|
4053
|
+
},
|
|
4054
|
+
{
|
|
4055
|
+
"name": "limit",
|
|
4056
|
+
"type": "int",
|
|
4057
|
+
"default": 10,
|
|
4058
|
+
"required": false,
|
|
4059
|
+
"help": "Number of results per page (max 18)"
|
|
4060
|
+
},
|
|
4061
|
+
{
|
|
4062
|
+
"name": "offset",
|
|
4063
|
+
"type": "int",
|
|
4064
|
+
"default": 0,
|
|
4065
|
+
"required": false,
|
|
4066
|
+
"help": "Page offset (0, 1, 2...). Brave returns ~18 results per page"
|
|
4067
|
+
}
|
|
4068
|
+
],
|
|
4069
|
+
"columns": [
|
|
4070
|
+
"rank",
|
|
4071
|
+
"title",
|
|
4072
|
+
"url",
|
|
4073
|
+
"snippet"
|
|
4074
|
+
],
|
|
4075
|
+
"type": "js",
|
|
4076
|
+
"modulePath": "brave/search.js",
|
|
4077
|
+
"sourceFile": "brave/search.js"
|
|
4078
|
+
},
|
|
4012
4079
|
{
|
|
4013
4080
|
"site": "chaoxing",
|
|
4014
4081
|
"name": "assignments",
|
|
@@ -8704,6 +8771,93 @@
|
|
|
8704
8771
|
"sourceFile": "douyin/videos.js",
|
|
8705
8772
|
"navigateBefore": "https://creator.douyin.com"
|
|
8706
8773
|
},
|
|
8774
|
+
{
|
|
8775
|
+
"site": "duckduckgo",
|
|
8776
|
+
"name": "search",
|
|
8777
|
+
"description": "Search DuckDuckGo",
|
|
8778
|
+
"access": "read",
|
|
8779
|
+
"domain": "html.duckduckgo.com",
|
|
8780
|
+
"strategy": "public",
|
|
8781
|
+
"browser": true,
|
|
8782
|
+
"args": [
|
|
8783
|
+
{
|
|
8784
|
+
"name": "keyword",
|
|
8785
|
+
"type": "str",
|
|
8786
|
+
"required": true,
|
|
8787
|
+
"positional": true,
|
|
8788
|
+
"help": "Search query"
|
|
8789
|
+
},
|
|
8790
|
+
{
|
|
8791
|
+
"name": "limit",
|
|
8792
|
+
"type": "int",
|
|
8793
|
+
"default": 10,
|
|
8794
|
+
"required": false,
|
|
8795
|
+
"help": "Number of results per page (1-10). For multi-page, use --offset"
|
|
8796
|
+
},
|
|
8797
|
+
{
|
|
8798
|
+
"name": "offset",
|
|
8799
|
+
"type": "int",
|
|
8800
|
+
"default": 0,
|
|
8801
|
+
"required": false,
|
|
8802
|
+
"help": "Result offset for pagination (0, 10, 20...). Uses XHR POST internally"
|
|
8803
|
+
},
|
|
8804
|
+
{
|
|
8805
|
+
"name": "region",
|
|
8806
|
+
"type": "str",
|
|
8807
|
+
"required": false,
|
|
8808
|
+
"help": "Region code (e.g. jp-jp, us-en, cn-zh). Default: all regions"
|
|
8809
|
+
},
|
|
8810
|
+
{
|
|
8811
|
+
"name": "time",
|
|
8812
|
+
"type": "str",
|
|
8813
|
+
"required": false,
|
|
8814
|
+
"help": "Time range: d (day), w (week), m (month), y (year)"
|
|
8815
|
+
}
|
|
8816
|
+
],
|
|
8817
|
+
"columns": [
|
|
8818
|
+
"rank",
|
|
8819
|
+
"title",
|
|
8820
|
+
"url",
|
|
8821
|
+
"snippet",
|
|
8822
|
+
"displayUrl",
|
|
8823
|
+
"icon",
|
|
8824
|
+
"resultType"
|
|
8825
|
+
],
|
|
8826
|
+
"type": "js",
|
|
8827
|
+
"modulePath": "duckduckgo/search.js",
|
|
8828
|
+
"sourceFile": "duckduckgo/search.js"
|
|
8829
|
+
},
|
|
8830
|
+
{
|
|
8831
|
+
"site": "duckduckgo",
|
|
8832
|
+
"name": "suggest",
|
|
8833
|
+
"description": "DuckDuckGo search suggestions",
|
|
8834
|
+
"access": "read",
|
|
8835
|
+
"domain": "duckduckgo.com",
|
|
8836
|
+
"strategy": "public",
|
|
8837
|
+
"browser": false,
|
|
8838
|
+
"args": [
|
|
8839
|
+
{
|
|
8840
|
+
"name": "keyword",
|
|
8841
|
+
"type": "str",
|
|
8842
|
+
"required": true,
|
|
8843
|
+
"positional": true,
|
|
8844
|
+
"help": "Search query prefix"
|
|
8845
|
+
},
|
|
8846
|
+
{
|
|
8847
|
+
"name": "limit",
|
|
8848
|
+
"type": "int",
|
|
8849
|
+
"default": 8,
|
|
8850
|
+
"required": false,
|
|
8851
|
+
"help": "Max number of suggestions"
|
|
8852
|
+
}
|
|
8853
|
+
],
|
|
8854
|
+
"columns": [
|
|
8855
|
+
"phrase"
|
|
8856
|
+
],
|
|
8857
|
+
"type": "js",
|
|
8858
|
+
"modulePath": "duckduckgo/suggest.js",
|
|
8859
|
+
"sourceFile": "duckduckgo/suggest.js"
|
|
8860
|
+
},
|
|
8707
8861
|
{
|
|
8708
8862
|
"site": "eastmoney",
|
|
8709
8863
|
"name": "announcement",
|
|
@@ -9387,7 +9541,7 @@
|
|
|
9387
9541
|
"type": "js",
|
|
9388
9542
|
"modulePath": "facebook/feed.js",
|
|
9389
9543
|
"sourceFile": "facebook/feed.js",
|
|
9390
|
-
"navigateBefore":
|
|
9544
|
+
"navigateBefore": false
|
|
9391
9545
|
},
|
|
9392
9546
|
{
|
|
9393
9547
|
"site": "facebook",
|
|
@@ -18990,8 +19144,7 @@
|
|
|
18990
19144
|
"type": "js",
|
|
18991
19145
|
"modulePath": "reddit/comment.js",
|
|
18992
19146
|
"sourceFile": "reddit/comment.js",
|
|
18993
|
-
"navigateBefore": "https://reddit.com"
|
|
18994
|
-
"siteSession": "persistent"
|
|
19147
|
+
"navigateBefore": "https://reddit.com"
|
|
18995
19148
|
},
|
|
18996
19149
|
{
|
|
18997
19150
|
"site": "reddit",
|
|
@@ -19021,8 +19174,7 @@
|
|
|
19021
19174
|
"type": "js",
|
|
19022
19175
|
"modulePath": "reddit/frontpage.js",
|
|
19023
19176
|
"sourceFile": "reddit/frontpage.js",
|
|
19024
|
-
"navigateBefore": "https://reddit.com"
|
|
19025
|
-
"siteSession": "persistent"
|
|
19177
|
+
"navigateBefore": "https://reddit.com"
|
|
19026
19178
|
},
|
|
19027
19179
|
{
|
|
19028
19180
|
"site": "reddit",
|
|
@@ -19054,8 +19206,7 @@
|
|
|
19054
19206
|
"type": "js",
|
|
19055
19207
|
"modulePath": "reddit/home.js",
|
|
19056
19208
|
"sourceFile": "reddit/home.js",
|
|
19057
|
-
"navigateBefore": "https://reddit.com"
|
|
19058
|
-
"siteSession": "persistent"
|
|
19209
|
+
"navigateBefore": "https://reddit.com"
|
|
19059
19210
|
},
|
|
19060
19211
|
{
|
|
19061
19212
|
"site": "reddit",
|
|
@@ -19124,8 +19275,7 @@
|
|
|
19124
19275
|
"type": "js",
|
|
19125
19276
|
"modulePath": "reddit/popular.js",
|
|
19126
19277
|
"sourceFile": "reddit/popular.js",
|
|
19127
|
-
"navigateBefore": "https://reddit.com"
|
|
19128
|
-
"siteSession": "persistent"
|
|
19278
|
+
"navigateBefore": "https://reddit.com"
|
|
19129
19279
|
},
|
|
19130
19280
|
{
|
|
19131
19281
|
"site": "reddit",
|
|
@@ -19202,8 +19352,7 @@
|
|
|
19202
19352
|
"type": "js",
|
|
19203
19353
|
"modulePath": "reddit/read.js",
|
|
19204
19354
|
"sourceFile": "reddit/read.js",
|
|
19205
|
-
"navigateBefore": "https://reddit.com"
|
|
19206
|
-
"siteSession": "persistent"
|
|
19355
|
+
"navigateBefore": "https://reddit.com"
|
|
19207
19356
|
},
|
|
19208
19357
|
{
|
|
19209
19358
|
"site": "reddit",
|
|
@@ -19269,8 +19418,7 @@
|
|
|
19269
19418
|
"type": "js",
|
|
19270
19419
|
"modulePath": "reddit/save.js",
|
|
19271
19420
|
"sourceFile": "reddit/save.js",
|
|
19272
|
-
"navigateBefore": "https://reddit.com"
|
|
19273
|
-
"siteSession": "persistent"
|
|
19421
|
+
"navigateBefore": "https://reddit.com"
|
|
19274
19422
|
},
|
|
19275
19423
|
{
|
|
19276
19424
|
"site": "reddit",
|
|
@@ -19299,8 +19447,7 @@
|
|
|
19299
19447
|
"type": "js",
|
|
19300
19448
|
"modulePath": "reddit/saved.js",
|
|
19301
19449
|
"sourceFile": "reddit/saved.js",
|
|
19302
|
-
"navigateBefore": "https://reddit.com"
|
|
19303
|
-
"siteSession": "persistent"
|
|
19450
|
+
"navigateBefore": "https://reddit.com"
|
|
19304
19451
|
},
|
|
19305
19452
|
{
|
|
19306
19453
|
"site": "reddit",
|
|
@@ -19358,8 +19505,7 @@
|
|
|
19358
19505
|
"type": "js",
|
|
19359
19506
|
"modulePath": "reddit/search.js",
|
|
19360
19507
|
"sourceFile": "reddit/search.js",
|
|
19361
|
-
"navigateBefore": "https://reddit.com"
|
|
19362
|
-
"siteSession": "persistent"
|
|
19508
|
+
"navigateBefore": "https://reddit.com"
|
|
19363
19509
|
},
|
|
19364
19510
|
{
|
|
19365
19511
|
"site": "reddit",
|
|
@@ -19409,8 +19555,7 @@
|
|
|
19409
19555
|
"type": "js",
|
|
19410
19556
|
"modulePath": "reddit/subreddit.js",
|
|
19411
19557
|
"sourceFile": "reddit/subreddit.js",
|
|
19412
|
-
"navigateBefore": "https://reddit.com"
|
|
19413
|
-
"siteSession": "persistent"
|
|
19558
|
+
"navigateBefore": "https://reddit.com"
|
|
19414
19559
|
},
|
|
19415
19560
|
{
|
|
19416
19561
|
"site": "reddit",
|
|
@@ -19436,8 +19581,7 @@
|
|
|
19436
19581
|
"type": "js",
|
|
19437
19582
|
"modulePath": "reddit/subreddit-info.js",
|
|
19438
19583
|
"sourceFile": "reddit/subreddit-info.js",
|
|
19439
|
-
"navigateBefore": "https://reddit.com"
|
|
19440
|
-
"siteSession": "persistent"
|
|
19584
|
+
"navigateBefore": "https://reddit.com"
|
|
19441
19585
|
},
|
|
19442
19586
|
{
|
|
19443
19587
|
"site": "reddit",
|
|
@@ -19470,8 +19614,7 @@
|
|
|
19470
19614
|
"type": "js",
|
|
19471
19615
|
"modulePath": "reddit/subscribe.js",
|
|
19472
19616
|
"sourceFile": "reddit/subscribe.js",
|
|
19473
|
-
"navigateBefore": "https://reddit.com"
|
|
19474
|
-
"siteSession": "persistent"
|
|
19617
|
+
"navigateBefore": "https://reddit.com"
|
|
19475
19618
|
},
|
|
19476
19619
|
{
|
|
19477
19620
|
"site": "reddit",
|
|
@@ -19504,8 +19647,7 @@
|
|
|
19504
19647
|
"type": "js",
|
|
19505
19648
|
"modulePath": "reddit/upvote.js",
|
|
19506
19649
|
"sourceFile": "reddit/upvote.js",
|
|
19507
|
-
"navigateBefore": "https://reddit.com"
|
|
19508
|
-
"siteSession": "persistent"
|
|
19650
|
+
"navigateBefore": "https://reddit.com"
|
|
19509
19651
|
},
|
|
19510
19652
|
{
|
|
19511
19653
|
"site": "reddit",
|
|
@@ -19534,8 +19676,7 @@
|
|
|
19534
19676
|
"type": "js",
|
|
19535
19677
|
"modulePath": "reddit/upvoted.js",
|
|
19536
19678
|
"sourceFile": "reddit/upvoted.js",
|
|
19537
|
-
"navigateBefore": "https://reddit.com"
|
|
19538
|
-
"siteSession": "persistent"
|
|
19679
|
+
"navigateBefore": "https://reddit.com"
|
|
19539
19680
|
},
|
|
19540
19681
|
{
|
|
19541
19682
|
"site": "reddit",
|
|
@@ -19561,8 +19702,7 @@
|
|
|
19561
19702
|
"type": "js",
|
|
19562
19703
|
"modulePath": "reddit/user.js",
|
|
19563
19704
|
"sourceFile": "reddit/user.js",
|
|
19564
|
-
"navigateBefore": "https://reddit.com"
|
|
19565
|
-
"siteSession": "persistent"
|
|
19705
|
+
"navigateBefore": "https://reddit.com"
|
|
19566
19706
|
},
|
|
19567
19707
|
{
|
|
19568
19708
|
"site": "reddit",
|
|
@@ -19597,8 +19737,7 @@
|
|
|
19597
19737
|
"type": "js",
|
|
19598
19738
|
"modulePath": "reddit/user-comments.js",
|
|
19599
19739
|
"sourceFile": "reddit/user-comments.js",
|
|
19600
|
-
"navigateBefore": "https://reddit.com"
|
|
19601
|
-
"siteSession": "persistent"
|
|
19740
|
+
"navigateBefore": "https://reddit.com"
|
|
19602
19741
|
},
|
|
19603
19742
|
{
|
|
19604
19743
|
"site": "reddit",
|
|
@@ -19634,8 +19773,7 @@
|
|
|
19634
19773
|
"type": "js",
|
|
19635
19774
|
"modulePath": "reddit/user-posts.js",
|
|
19636
19775
|
"sourceFile": "reddit/user-posts.js",
|
|
19637
|
-
"navigateBefore": "https://reddit.com"
|
|
19638
|
-
"siteSession": "persistent"
|
|
19776
|
+
"navigateBefore": "https://reddit.com"
|
|
19639
19777
|
},
|
|
19640
19778
|
{
|
|
19641
19779
|
"site": "reddit",
|
|
@@ -19653,8 +19791,7 @@
|
|
|
19653
19791
|
"type": "js",
|
|
19654
19792
|
"modulePath": "reddit/whoami.js",
|
|
19655
19793
|
"sourceFile": "reddit/whoami.js",
|
|
19656
|
-
"navigateBefore": "https://reddit.com"
|
|
19657
|
-
"siteSession": "persistent"
|
|
19794
|
+
"navigateBefore": "https://reddit.com"
|
|
19658
19795
|
},
|
|
19659
19796
|
{
|
|
19660
19797
|
"site": "rednote",
|
|
@@ -22442,8 +22579,7 @@
|
|
|
22442
22579
|
"type": "js",
|
|
22443
22580
|
"modulePath": "twitter/article.js",
|
|
22444
22581
|
"sourceFile": "twitter/article.js",
|
|
22445
|
-
"navigateBefore": "https://x.com"
|
|
22446
|
-
"siteSession": "persistent"
|
|
22582
|
+
"navigateBefore": "https://x.com"
|
|
22447
22583
|
},
|
|
22448
22584
|
{
|
|
22449
22585
|
"site": "twitter",
|
|
@@ -22543,8 +22679,7 @@
|
|
|
22543
22679
|
"type": "js",
|
|
22544
22680
|
"modulePath": "twitter/bookmark-folder.js",
|
|
22545
22681
|
"sourceFile": "twitter/bookmark-folder.js",
|
|
22546
|
-
"navigateBefore": "https://x.com"
|
|
22547
|
-
"siteSession": "persistent"
|
|
22682
|
+
"navigateBefore": "https://x.com"
|
|
22548
22683
|
},
|
|
22549
22684
|
{
|
|
22550
22685
|
"site": "twitter",
|
|
@@ -22564,8 +22699,7 @@
|
|
|
22564
22699
|
"type": "js",
|
|
22565
22700
|
"modulePath": "twitter/bookmark-folders.js",
|
|
22566
22701
|
"sourceFile": "twitter/bookmark-folders.js",
|
|
22567
|
-
"navigateBefore": "https://x.com"
|
|
22568
|
-
"siteSession": "persistent"
|
|
22702
|
+
"navigateBefore": "https://x.com"
|
|
22569
22703
|
},
|
|
22570
22704
|
{
|
|
22571
22705
|
"site": "twitter",
|
|
@@ -22606,8 +22740,7 @@
|
|
|
22606
22740
|
"type": "js",
|
|
22607
22741
|
"modulePath": "twitter/bookmarks.js",
|
|
22608
22742
|
"sourceFile": "twitter/bookmarks.js",
|
|
22609
|
-
"navigateBefore": "https://x.com"
|
|
22610
|
-
"siteSession": "persistent"
|
|
22743
|
+
"navigateBefore": "https://x.com"
|
|
22611
22744
|
},
|
|
22612
22745
|
{
|
|
22613
22746
|
"site": "twitter",
|
|
@@ -22681,8 +22814,7 @@
|
|
|
22681
22814
|
"type": "js",
|
|
22682
22815
|
"modulePath": "twitter/download.js",
|
|
22683
22816
|
"sourceFile": "twitter/download.js",
|
|
22684
|
-
"navigateBefore": "https://x.com"
|
|
22685
|
-
"siteSession": "persistent"
|
|
22817
|
+
"navigateBefore": "https://x.com"
|
|
22686
22818
|
},
|
|
22687
22819
|
{
|
|
22688
22820
|
"site": "twitter",
|
|
@@ -22742,8 +22874,7 @@
|
|
|
22742
22874
|
"type": "js",
|
|
22743
22875
|
"modulePath": "twitter/followers.js",
|
|
22744
22876
|
"sourceFile": "twitter/followers.js",
|
|
22745
|
-
"navigateBefore": true
|
|
22746
|
-
"siteSession": "persistent"
|
|
22877
|
+
"navigateBefore": true
|
|
22747
22878
|
},
|
|
22748
22879
|
{
|
|
22749
22880
|
"site": "twitter",
|
|
@@ -22778,8 +22909,7 @@
|
|
|
22778
22909
|
"type": "js",
|
|
22779
22910
|
"modulePath": "twitter/following.js",
|
|
22780
22911
|
"sourceFile": "twitter/following.js",
|
|
22781
|
-
"navigateBefore": "https://x.com"
|
|
22782
|
-
"siteSession": "persistent"
|
|
22912
|
+
"navigateBefore": "https://x.com"
|
|
22783
22913
|
},
|
|
22784
22914
|
{
|
|
22785
22915
|
"site": "twitter",
|
|
@@ -22879,8 +23009,7 @@
|
|
|
22879
23009
|
"type": "js",
|
|
22880
23010
|
"modulePath": "twitter/likes.js",
|
|
22881
23011
|
"sourceFile": "twitter/likes.js",
|
|
22882
|
-
"navigateBefore": "https://x.com"
|
|
22883
|
-
"siteSession": "persistent"
|
|
23012
|
+
"navigateBefore": "https://x.com"
|
|
22884
23013
|
},
|
|
22885
23014
|
{
|
|
22886
23015
|
"site": "twitter",
|
|
@@ -23000,8 +23129,7 @@
|
|
|
23000
23129
|
"type": "js",
|
|
23001
23130
|
"modulePath": "twitter/list-tweets.js",
|
|
23002
23131
|
"sourceFile": "twitter/list-tweets.js",
|
|
23003
|
-
"navigateBefore": "https://x.com"
|
|
23004
|
-
"siteSession": "persistent"
|
|
23132
|
+
"navigateBefore": "https://x.com"
|
|
23005
23133
|
},
|
|
23006
23134
|
{
|
|
23007
23135
|
"site": "twitter",
|
|
@@ -23030,8 +23158,7 @@
|
|
|
23030
23158
|
"type": "js",
|
|
23031
23159
|
"modulePath": "twitter/lists.js",
|
|
23032
23160
|
"sourceFile": "twitter/lists.js",
|
|
23033
|
-
"navigateBefore": "https://x.com"
|
|
23034
|
-
"siteSession": "persistent"
|
|
23161
|
+
"navigateBefore": "https://x.com"
|
|
23035
23162
|
},
|
|
23036
23163
|
{
|
|
23037
23164
|
"site": "twitter",
|
|
@@ -23060,8 +23187,7 @@
|
|
|
23060
23187
|
"type": "js",
|
|
23061
23188
|
"modulePath": "twitter/notifications.js",
|
|
23062
23189
|
"sourceFile": "twitter/notifications.js",
|
|
23063
|
-
"navigateBefore": true
|
|
23064
|
-
"siteSession": "persistent"
|
|
23190
|
+
"navigateBefore": true
|
|
23065
23191
|
},
|
|
23066
23192
|
{
|
|
23067
23193
|
"site": "twitter",
|
|
@@ -23131,8 +23257,7 @@
|
|
|
23131
23257
|
"type": "js",
|
|
23132
23258
|
"modulePath": "twitter/profile.js",
|
|
23133
23259
|
"sourceFile": "twitter/profile.js",
|
|
23134
|
-
"navigateBefore": "https://x.com"
|
|
23135
|
-
"siteSession": "persistent"
|
|
23260
|
+
"navigateBefore": "https://x.com"
|
|
23136
23261
|
},
|
|
23137
23262
|
{
|
|
23138
23263
|
"site": "twitter",
|
|
@@ -23401,8 +23526,7 @@
|
|
|
23401
23526
|
"type": "js",
|
|
23402
23527
|
"modulePath": "twitter/search.js",
|
|
23403
23528
|
"sourceFile": "twitter/search.js",
|
|
23404
|
-
"navigateBefore": "https://x.com"
|
|
23405
|
-
"siteSession": "persistent"
|
|
23529
|
+
"navigateBefore": "https://x.com"
|
|
23406
23530
|
},
|
|
23407
23531
|
{
|
|
23408
23532
|
"site": "twitter",
|
|
@@ -23448,8 +23572,7 @@
|
|
|
23448
23572
|
"type": "js",
|
|
23449
23573
|
"modulePath": "twitter/thread.js",
|
|
23450
23574
|
"sourceFile": "twitter/thread.js",
|
|
23451
|
-
"navigateBefore": "https://x.com"
|
|
23452
|
-
"siteSession": "persistent"
|
|
23575
|
+
"navigateBefore": "https://x.com"
|
|
23453
23576
|
},
|
|
23454
23577
|
{
|
|
23455
23578
|
"site": "twitter",
|
|
@@ -23502,8 +23625,7 @@
|
|
|
23502
23625
|
"type": "js",
|
|
23503
23626
|
"modulePath": "twitter/timeline.js",
|
|
23504
23627
|
"sourceFile": "twitter/timeline.js",
|
|
23505
|
-
"navigateBefore": "https://x.com"
|
|
23506
|
-
"siteSession": "persistent"
|
|
23628
|
+
"navigateBefore": "https://x.com"
|
|
23507
23629
|
},
|
|
23508
23630
|
{
|
|
23509
23631
|
"site": "twitter",
|
|
@@ -23530,8 +23652,7 @@
|
|
|
23530
23652
|
"type": "js",
|
|
23531
23653
|
"modulePath": "twitter/trending.js",
|
|
23532
23654
|
"sourceFile": "twitter/trending.js",
|
|
23533
|
-
"navigateBefore": "https://x.com"
|
|
23534
|
-
"siteSession": "persistent"
|
|
23655
|
+
"navigateBefore": "https://x.com"
|
|
23535
23656
|
},
|
|
23536
23657
|
{
|
|
23537
23658
|
"site": "twitter",
|
|
@@ -23581,8 +23702,7 @@
|
|
|
23581
23702
|
"type": "js",
|
|
23582
23703
|
"modulePath": "twitter/tweets.js",
|
|
23583
23704
|
"sourceFile": "twitter/tweets.js",
|
|
23584
|
-
"navigateBefore": "https://x.com"
|
|
23585
|
-
"siteSession": "persistent"
|
|
23705
|
+
"navigateBefore": "https://x.com"
|
|
23586
23706
|
},
|
|
23587
23707
|
{
|
|
23588
23708
|
"site": "twitter",
|
|
@@ -26699,6 +26819,47 @@
|
|
|
26699
26819
|
"sourceFile": "xueqiu/watchlist.js",
|
|
26700
26820
|
"navigateBefore": "https://xueqiu.com"
|
|
26701
26821
|
},
|
|
26822
|
+
{
|
|
26823
|
+
"site": "yahoo",
|
|
26824
|
+
"name": "search",
|
|
26825
|
+
"description": "Search Yahoo (powered by Bing)",
|
|
26826
|
+
"access": "read",
|
|
26827
|
+
"domain": "search.yahoo.com",
|
|
26828
|
+
"strategy": "public",
|
|
26829
|
+
"browser": true,
|
|
26830
|
+
"args": [
|
|
26831
|
+
{
|
|
26832
|
+
"name": "keyword",
|
|
26833
|
+
"type": "str",
|
|
26834
|
+
"required": true,
|
|
26835
|
+
"positional": true,
|
|
26836
|
+
"help": "Search query"
|
|
26837
|
+
},
|
|
26838
|
+
{
|
|
26839
|
+
"name": "limit",
|
|
26840
|
+
"type": "int",
|
|
26841
|
+
"default": 7,
|
|
26842
|
+
"required": false,
|
|
26843
|
+
"help": "Number of results per page (max 7)"
|
|
26844
|
+
},
|
|
26845
|
+
{
|
|
26846
|
+
"name": "page",
|
|
26847
|
+
"type": "int",
|
|
26848
|
+
"default": 1,
|
|
26849
|
+
"required": false,
|
|
26850
|
+
"help": "Page number (1, 2, 3...). Yahoo returns ~7 results per page"
|
|
26851
|
+
}
|
|
26852
|
+
],
|
|
26853
|
+
"columns": [
|
|
26854
|
+
"rank",
|
|
26855
|
+
"title",
|
|
26856
|
+
"url",
|
|
26857
|
+
"snippet"
|
|
26858
|
+
],
|
|
26859
|
+
"type": "js",
|
|
26860
|
+
"modulePath": "yahoo/search.js",
|
|
26861
|
+
"sourceFile": "yahoo/search.js"
|
|
26862
|
+
},
|
|
26702
26863
|
{
|
|
26703
26864
|
"site": "yahoo-finance",
|
|
26704
26865
|
"name": "quote",
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ArgumentError, CommandExecutionError, EmptyResultError } from '@jackwener/opencli/errors';
|
|
2
|
+
|
|
3
|
+
export function requireSearchQuery(value, label = 'keyword') {
|
|
4
|
+
const query = String(value ?? '').trim();
|
|
5
|
+
if (!query) {
|
|
6
|
+
throw new ArgumentError(`${label} cannot be empty`);
|
|
7
|
+
}
|
|
8
|
+
return query;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function requireBoundedInteger(value, defaultValue, min, max, label) {
|
|
12
|
+
const raw = value ?? defaultValue;
|
|
13
|
+
const parsed = typeof raw === 'number' ? raw : Number(raw);
|
|
14
|
+
if (!Number.isInteger(parsed)) {
|
|
15
|
+
throw new ArgumentError(`${label} must be an integer between ${min} and ${max}, got ${JSON.stringify(value)}`);
|
|
16
|
+
}
|
|
17
|
+
if (parsed < min || parsed > max) {
|
|
18
|
+
throw new ArgumentError(`${label} must be between ${min} and ${max}, got ${parsed}`);
|
|
19
|
+
}
|
|
20
|
+
return parsed;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function requireNonNegativeInteger(value, defaultValue, label) {
|
|
24
|
+
const raw = value ?? defaultValue;
|
|
25
|
+
const parsed = typeof raw === 'number' ? raw : Number(raw);
|
|
26
|
+
if (!Number.isInteger(parsed) || parsed < 0) {
|
|
27
|
+
throw new ArgumentError(`${label} must be a non-negative integer, got ${JSON.stringify(value)}`);
|
|
28
|
+
}
|
|
29
|
+
return parsed;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function unwrapBrowserResult(value) {
|
|
33
|
+
if (value && typeof value === 'object' && !Array.isArray(value) && 'session' in value && 'data' in value) {
|
|
34
|
+
return value.data;
|
|
35
|
+
}
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function requireRows(value, label) {
|
|
40
|
+
const rows = unwrapBrowserResult(value);
|
|
41
|
+
if (!Array.isArray(rows)) {
|
|
42
|
+
throw new CommandExecutionError(`${label} returned an unexpected payload shape; expected an array of result rows.`);
|
|
43
|
+
}
|
|
44
|
+
return rows;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function toHttpsUrl(value, baseUrl) {
|
|
48
|
+
const raw = String(value ?? '').trim();
|
|
49
|
+
if (!raw) return '';
|
|
50
|
+
try {
|
|
51
|
+
const url = new URL(raw, baseUrl);
|
|
52
|
+
if (url.protocol !== 'http:' && url.protocol !== 'https:') return '';
|
|
53
|
+
return url.href;
|
|
54
|
+
} catch {
|
|
55
|
+
return '';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function emptySearchResults(site, query) {
|
|
60
|
+
return new EmptyResultError(`${site} search`, `No ${site} results matched "${query}".`);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export async function runBrowserStep(label, fn) {
|
|
64
|
+
try {
|
|
65
|
+
return await fn();
|
|
66
|
+
} catch (error) {
|
|
67
|
+
if (error?.code || error?.name === 'ArgumentError') throw error;
|
|
68
|
+
throw new CommandExecutionError(`${label} failed: ${error?.message ?? error}`);
|
|
69
|
+
}
|
|
70
|
+
}
|